Arrow = {}
Arrow.type = "Arrow"
Arrow.supertype = Entity.type
Arrow.display = Animation:new(animation.kupo.arrow)
setmetatable(Arrow, Entity)


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

	o.pos = {x = x, y = y}
	o.speed = speed or 10
	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)

	o.box = {
		from = {x = -0.5, y = -0.5}, --gameworld pixels
		to = {x = 0.5, y = 0.5} -- gameworld pixels
	}

	o:id()

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

function Arrow:drawBackground()
	self:draw(self.body)
end

function Arrow:doPhysics()
	-- horizontal collision
	self:moveX(
		self.vel.x,
		function()
			self.stuck = true
		end
	)

	if not self.stuck then
		-- vertical collision
		self:moveY(
			self.vel.y,
			function()
				self.stuck = true
			end
		)
	end

	if self.stuck then
		self.pos.x = self.pos.x + self.vel.x * (2/3)
		self.pos.y = self.pos.y + self.vel.y * (2/3)
		self.vel.x = 0
		self.vel.y = 0
	end

	self:adjustLight()
end
