Arrow = Entity:New(x,y)

 function Arrow:New(x,y,rotation,speed)
 	local o = Entity:New(x,y)

  o.type = "arrow"

  o.pos = {x = x, y = y}
  o.speed = speed or 0
  o.sprite_rotation = rotation or 0
  o.vel = {
    x = o.speed * math.cos(o.sprite_rotation),
    y = o.speed * math.sin(o.sprite_rotation)
  }
	o.sprite_offset = {x = 13, y = 1}
  o.stuck = false
  o.illuminated = true

  -- animations
  o.body = Animation:New(animation.kupo.arrow)

	table.insert(LoadedObjects.Entities,o)
	o.id = #LoadedObjects.Entities

 	setmetatable(o, self)
 	self.__index = self
 	return o
 end

function Arrow:HandleAnimation()
  self:Draw(self.body)
end

function Arrow:DoPhysics()
  if not self.stuck then
     -- horizontal collisions
    if not isThereAnyCollisionAt(
      self.pos.x + self.vel.x,
      self.pos.y
    ) then
    	self.pos.x = self.pos.x + self.vel.x
    else
      while not isThereObjectAt(
        self.pos.x + math.sign(self.vel.x),
        self.pos.y,
        LoadedObjects.Collisions
      ) do
        self.pos.x = self.pos.x + math.sign(self.vel.x)
      end
      self.stuck = true
    end
      -- vertical collision
    if not isThereAnyCollisionAt(
      self.pos.x,
      self.pos.y + self.vel.y
    ) then
      self.pos.y = self.pos.y + self.vel.y
    else
      while not isThereObjectAt(
        self.pos.x,
        self.pos.y + math.sign(self.vel.y),
        LoadedObjects.Collisions
      ) do
        self.pos.y = self.pos.y + math.sign(self.vel.y)
      end
      self.stuck = true
    end
    -- stuck into collisions
    if self.stuck then
      --lets allow the arrow to tip a bit into the thing
      self.pos.x = self.pos.x + self.vel.x / 5
      self.pos.y = self.pos.y + self.vel.y / 5
      self.vel.x = 0
      self.vel.y = 0
      self.illuminated = false
    end
  end
end
