finish animation
This commit is contained in:
parent
a39ad6b75e
commit
05d3e8ace8
|
@ -10,8 +10,9 @@ local _M = {}
|
||||||
|
|
||||||
---@param tilesheet Texture
|
---@param tilesheet Texture
|
||||||
---@param frames table<Frame>
|
---@param frames table<Frame>
|
||||||
function _M.CreateAnimation(tilesheet, frames)
|
---@param onEndCallback function
|
||||||
local o = {tilesheet = tilesheet, frames = frames, index = 1, counter = 0, isPlaying = false}
|
function _M.CreateAnimation(tilesheet, frames, onEndCallback)
|
||||||
|
local o = {tilesheet = tilesheet, frames = frames, index = 1, counter = 0, isPlaying = false, onEndCallback = onEndCallback}
|
||||||
setmetatable(o, {__index = _M})
|
setmetatable(o, {__index = _M})
|
||||||
return o
|
return o
|
||||||
end
|
end
|
||||||
|
@ -47,7 +48,7 @@ end
|
||||||
|
|
||||||
---@param self Animation
|
---@param self Animation
|
||||||
function _M.Rewind(self)
|
function _M.Rewind(self)
|
||||||
self.index = 0
|
self.index = 1
|
||||||
self.counter = 0
|
self.counter = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -63,14 +64,15 @@ function _M.Update(self)
|
||||||
end
|
end
|
||||||
if self.index > #self.frames then
|
if self.index > #self.frames then
|
||||||
self:Pause()
|
self:Pause()
|
||||||
|
if self.onEndCallback then
|
||||||
|
self.onEndCallback(self)
|
||||||
|
end
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
self.counter = self.counter + hazel.Time.GetElapseTime()
|
self.counter = self.counter + hazel.Time.GetElapseTime()
|
||||||
---@type Frame
|
---@type Frame
|
||||||
local curFrame = self.frames[self.index]
|
local curFrame = self.frames[self.index]
|
||||||
if not curFrame then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if self.counter >= curFrame.time then
|
if self.counter >= curFrame.time then
|
||||||
self.counter = self.counter - curFrame.time
|
self.counter = self.counter - curFrame.time
|
||||||
self.index = self.index + 1
|
self.index = self.index + 1
|
||||||
|
|
|
@ -37,4 +37,24 @@ _M.MonsterBirthNum = 0
|
||||||
|
|
||||||
_M.MonsterBirthCountDown = 0
|
_M.MonsterBirthCountDown = 0
|
||||||
|
|
||||||
|
_M.Animations = {
|
||||||
|
---@type Animation
|
||||||
|
PlayerWalkDown = nil,
|
||||||
|
---@type Animation
|
||||||
|
PlayerWalkUp = nil,
|
||||||
|
---@type Animation
|
||||||
|
PlayerWalkRight = nil,
|
||||||
|
---@type Animation
|
||||||
|
PlayerWalkLeft = nil,
|
||||||
|
|
||||||
|
---@type Animation
|
||||||
|
EnemyWalkDown = nil,
|
||||||
|
---@type Animation
|
||||||
|
EnemyWalkUp = nil,
|
||||||
|
---@type Animation
|
||||||
|
EnemyWalkRight = nil,
|
||||||
|
---@type Animation
|
||||||
|
EnemyWalkLeft = nil,
|
||||||
|
}
|
||||||
|
|
||||||
return _M
|
return _M
|
|
@ -4,6 +4,7 @@ local constants = require "constants"
|
||||||
local content = require "content"
|
local content = require "content"
|
||||||
local vmath = require "vmath"
|
local vmath = require "vmath"
|
||||||
local timer = require "timer"
|
local timer = require "timer"
|
||||||
|
local animation = require "animation"
|
||||||
|
|
||||||
local function drawCurosr()
|
local function drawCurosr()
|
||||||
hazel.Renderer.SetDrawColor(1, 0, 0, 1)
|
hazel.Renderer.SetDrawColor(1, 0, 0, 1)
|
||||||
|
@ -171,6 +172,11 @@ local function initGame()
|
||||||
content.PlayerEntity = ECS.CreatePlayer(hazel.CreatePos(constants.TileSize * 16, constants.TileSize * 13))
|
content.PlayerEntity = ECS.CreatePlayer(hazel.CreatePos(constants.TileSize * 16, constants.TileSize * 13))
|
||||||
content.MonsterBirthNum = constants.MonsterBirthInitNum
|
content.MonsterBirthNum = constants.MonsterBirthInitNum
|
||||||
content.GameState = content.GameStateEnum.WaitStart
|
content.GameState = content.GameStateEnum.WaitStart
|
||||||
|
---@param v Animation
|
||||||
|
for _, v in pairs(content.Animations) do
|
||||||
|
v:Rewind()
|
||||||
|
v:Stop()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function generateMonster()
|
local function generateMonster()
|
||||||
|
@ -208,6 +214,19 @@ end
|
||||||
---@type Timer
|
---@type Timer
|
||||||
local showLicenseTimer = nil
|
local showLicenseTimer = nil
|
||||||
|
|
||||||
|
---@return Animation
|
||||||
|
---@param row number
|
||||||
|
---@param time number
|
||||||
|
local function createAnimation(row, time)
|
||||||
|
local frame = {}
|
||||||
|
for i = 0, 2 do
|
||||||
|
table.insert(frame, {row = row, col = i, time = time})
|
||||||
|
end
|
||||||
|
return animation.CreateAnimation(content.Tilesheet, frame, function(self)
|
||||||
|
self:Rewind()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
function GameStart()
|
function GameStart()
|
||||||
hazel.SetWindowIcon("resources/icon.png")
|
hazel.SetWindowIcon("resources/icon.png")
|
||||||
content.Texture = hazel.LoadTexture("resources/tilesheet.png")
|
content.Texture = hazel.LoadTexture("resources/tilesheet.png")
|
||||||
|
@ -220,9 +239,18 @@ function GameStart()
|
||||||
|
|
||||||
content.GameState = content.GameStateEnum.ShowLogo
|
content.GameState = content.GameStateEnum.ShowLogo
|
||||||
|
|
||||||
|
content.Animations.PlayerWalkDown = createAnimation(0, 0.1)
|
||||||
|
content.Animations.PlayerWalkUp = createAnimation(1, 0.1)
|
||||||
|
content.Animations.PlayerWalkRight = createAnimation(2, 0.1)
|
||||||
|
content.Animations.PlayerWalkLeft = createAnimation(3, 0.1)
|
||||||
|
|
||||||
|
content.Animations.EnemyWalkDown = createAnimation(5, 0.1)
|
||||||
|
content.Animations.EnemyWalkUp = createAnimation(6, 0.1)
|
||||||
|
content.Animations.EnemyWalkRight = createAnimation(7, 0.1)
|
||||||
|
content.Animations.EnemyWalkLeft = createAnimation(8, 0.1)
|
||||||
|
|
||||||
showLicenseTimer = timer.CreateTimer(constants.ShowLicenseTime, 1, function()
|
showLicenseTimer = timer.CreateTimer(constants.ShowLicenseTime, 1, function()
|
||||||
content.GameState = content.GameStateEnum.WaitStart
|
content.GameState = content.GameStateEnum.WaitStart
|
||||||
showLicenseTimer = nil
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
hazel.HideCursor()
|
hazel.HideCursor()
|
||||||
|
|
Reference in New Issue