144 lines
3.7 KiB
Lua
144 lines
3.7 KiB
Lua
Player = Entity:New(x,y)
|
|
|
|
-- Player Gun Types
|
|
Player.GunType = {
|
|
{
|
|
name = "Plasma Machine Gun",
|
|
shotCooldown = 0.05,
|
|
hits = 1,
|
|
damage = 1,
|
|
moveSpeed = 8,
|
|
animation = Animation.projectilePlasma,
|
|
friendly = true
|
|
},
|
|
{
|
|
name = "Piercing Blaster",
|
|
shotCooldown = 0.5,
|
|
hits = 3,
|
|
damage = 5,
|
|
moveSpeed = 5,
|
|
animation = Animation.projectilePiercing,
|
|
friendly = true
|
|
},
|
|
{
|
|
name = "Rocket Launcher",
|
|
shotCooldown = 1,
|
|
hits = 1,
|
|
damage = 10,
|
|
moveSpeed = 3,
|
|
animation = Animation.projectileRocket,
|
|
friendly = true
|
|
}
|
|
}
|
|
|
|
-- Player Builder
|
|
function Player:New(x,y)
|
|
local o = Entity:New(x,y)
|
|
|
|
o.moveSpeed = 3
|
|
o.moveSpeedFocused = 2
|
|
o.hitbox = 5
|
|
o.sprite = love.graphics.newImage("assets/heart.png")
|
|
o.draw_scale = 3
|
|
|
|
-- gun properties
|
|
o.shotTimer = 0
|
|
o.current_gun = 1
|
|
o.gunSwitchTimer = 0
|
|
o.gunSwitchTime = 0.2
|
|
|
|
o.max_health = 100
|
|
o.health = 100
|
|
-- lists
|
|
o:AddList(List.Simulate)
|
|
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
return o
|
|
end
|
|
|
|
-- Function to get the player input
|
|
function Player:Input()
|
|
-- Gun Switch
|
|
if love.keyboard.isDown("q") then
|
|
self.gunSwitchTimer = self.gunSwitchTimer - current_dt
|
|
elseif love.keyboard.isDown("e") then
|
|
self.gunSwitchTimer = self.gunSwitchTimer + current_dt
|
|
else
|
|
self.gunSwitchTimer = 0
|
|
end
|
|
|
|
if math.abs(self.gunSwitchTimer) > self.gunSwitchTime then
|
|
self.current_gun = self.current_gun + math.sign(self.gunSwitchTimer)
|
|
self.gunSwitchTimer = 0
|
|
end
|
|
|
|
if self.current_gun < 1 then self.current_gun = #self.GunType end
|
|
if self.current_gun > #self.GunType then self.current_gun = 1 end
|
|
|
|
-- Player Intent to Movement
|
|
if love.keyboard.isDown("a") then self.target.x = self.pos.x - 1
|
|
elseif love.keyboard.isDown("d") then self.target.x = self.pos.x + 1
|
|
else self.target.x = self.pos.x end
|
|
|
|
if love.keyboard.isDown("w") then self.target.y = self.pos.y - 1
|
|
elseif love.keyboard.isDown("s") then self.target.y = self.pos.y + 1
|
|
else self.target.y = self.pos.y end
|
|
|
|
-- Variable moveSpeed when focusing
|
|
if love.keyboard.isDown("lshift") then
|
|
self:MoveTowards(self.target.x, self.target.y, self.moveSpeedFocused)
|
|
else
|
|
self:MoveTowards(self.target.x, self.target.y, self.moveSpeed)
|
|
end
|
|
|
|
-- Actually moving the player
|
|
self.pos.x = math.min(math.max(self.pos.x + self.vel.x,self.hitbox),window_width - self.hitbox)
|
|
self.pos.y = math.min(math.max(self.pos.y + self.vel.y,self.hitbox),window_height - self.hitbox)
|
|
|
|
-- Get Ready to shoot if triggered
|
|
if self.shotTimer > 0 then self.shotTimer = self.shotTimer - current_dt end
|
|
if self.shotTimer < 0 then self.shotTimer = 0 end
|
|
|
|
-- Shoot if ready and triggered
|
|
if love.mouse.isDown(1) and self.shotTimer == 0 then
|
|
local x, y = love.mouse.getPosition()
|
|
Projectile:New(self.pos.x,self.pos.y,GetAngle(x - self.pos.x, y - self.pos.y), self.GunType[self.current_gun])
|
|
self.shotTimer = self.GunType[self.current_gun].shotCooldown
|
|
end
|
|
end
|
|
|
|
function Player:Step()
|
|
|
|
end
|
|
|
|
function Player:Draw()
|
|
love.graphics.setColor(1,1,1)
|
|
|
|
-- Draw Mouse
|
|
local x, y = love.mouse.getPosition()
|
|
love.graphics.circle("line", x, y, self.hitbox/2)
|
|
|
|
-- Draw Gun Name
|
|
love.graphics.print("Current Gun: "..self.GunType[self.current_gun].name, 10, 35)
|
|
|
|
-- Draw Self
|
|
if self.sprite ~= nil then
|
|
love.graphics.draw(
|
|
self.sprite,
|
|
self.pos.x-self.sprite:getPixelWidth()/2*self.draw_scale,
|
|
self.pos.y-self.sprite:getPixelHeight()/2*self.draw_scale,
|
|
0,
|
|
self.draw_scale
|
|
)
|
|
end
|
|
|
|
-- Draw Hitbox
|
|
love.graphics.setColor(1,0,0)
|
|
if love.keyboard.isDown("lshift") then
|
|
love.graphics.circle("fill", self.pos.x, self.pos.y, self.hitbox)
|
|
end
|
|
|
|
love.graphics.setColor(1,1,1)
|
|
end
|