Compare commits
No commits in common. "8821cb4cf7eeafd30c01a2ebddcfccb1c334859d" and "3838037006074a55a97db179f16a1cf7262b06c9" have entirely different histories.
8821cb4cf7
...
3838037006
@ -1,23 +1,17 @@
|
|||||||
--- @class StatsBehavior : Behavior
|
--- @class StatsBehavior : Behavior
|
||||||
--- @field hp integer
|
--- @field hp integer
|
||||||
--- @field mana integer
|
--- @field mana integer
|
||||||
--- @field initiative integer
|
|
||||||
--- @field isInTurnOrder boolean
|
|
||||||
local behavior = {}
|
local behavior = {}
|
||||||
behavior.__index = behavior
|
behavior.__index = behavior
|
||||||
behavior.id = "stats"
|
behavior.id = "stats"
|
||||||
|
|
||||||
--- @param hp? integer
|
--- @param hp? integer
|
||||||
--- @param mana? integer
|
--- @param mana? integer
|
||||||
--- @param initiative? integer
|
function behavior.new(hp, mana)
|
||||||
--- @param isInTurnOrder? boolean
|
return setmetatable({
|
||||||
function behavior.new(hp, mana, initiative, isInTurnOrder)
|
|
||||||
return setmetatable({
|
|
||||||
hp = hp or 20,
|
hp = hp or 20,
|
||||||
mana = mana or 10,
|
mana = mana or 10
|
||||||
initiative = initiative or 10,
|
}, behavior)
|
||||||
isInTurnOrder = isInTurnOrder or true
|
|
||||||
}, behavior)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return behavior
|
return behavior
|
||||||
@ -16,8 +16,8 @@ character.__index = character
|
|||||||
--- @param spriteDir table
|
--- @param spriteDir table
|
||||||
--- @param position? Vec3
|
--- @param position? Vec3
|
||||||
--- @param size? Vec3
|
--- @param size? Vec3
|
||||||
--- @param initiative? integer
|
--- @param level? integer
|
||||||
local function spawn(name, spriteDir, position, size, initiative)
|
local function spawn(name, spriteDir, position, size, level)
|
||||||
local char = {}
|
local char = {}
|
||||||
|
|
||||||
char = setmetatable(char, character)
|
char = setmetatable(char, character)
|
||||||
@ -28,14 +28,13 @@ local function spawn(name, spriteDir, position, size, initiative)
|
|||||||
|
|
||||||
char:addBehavior {
|
char:addBehavior {
|
||||||
Tree.behaviors.residentsleeper.new(),
|
Tree.behaviors.residentsleeper.new(),
|
||||||
Tree.behaviors.stats.new(nil, nil, initiative),
|
Tree.behaviors.stats.new(),
|
||||||
Tree.behaviors.map.new(position, size),
|
Tree.behaviors.map.new(position, size),
|
||||||
Tree.behaviors.sprite.new(spriteDir),
|
Tree.behaviors.sprite.new(spriteDir),
|
||||||
Tree.behaviors.spellcaster.new()
|
Tree.behaviors.spellcaster.new()
|
||||||
}
|
}
|
||||||
|
|
||||||
Tree.level.characters[char.id] = char
|
Tree.level.characters[char.id] = char
|
||||||
Tree.level.turnOrder:updateOrder()
|
|
||||||
return char
|
return char
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -18,9 +18,7 @@ controls.keymap = {
|
|||||||
cameraMoveDown = control("key", "s"),
|
cameraMoveDown = control("key", "s"),
|
||||||
cameraMoveScroll = control("mouse", "3"),
|
cameraMoveScroll = control("mouse", "3"),
|
||||||
fullMana = control("key", "m"),
|
fullMana = control("key", "m"),
|
||||||
select = control("mouse", "1"),
|
select = control("mouse", "1")
|
||||||
endTurnTest = control("key", "e"),
|
|
||||||
toggleTurns = control("key", "r"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local currentKeys = {}
|
local currentKeys = {}
|
||||||
|
|||||||
@ -7,7 +7,6 @@ local utils = require "lib.utils.utils"
|
|||||||
--- @field selector Selector
|
--- @field selector Selector
|
||||||
--- @field camera Camera
|
--- @field camera Camera
|
||||||
--- @field tileGrid TileGrid
|
--- @field tileGrid TileGrid
|
||||||
--- @field turnOrder TurnOrder
|
|
||||||
local level = {}
|
local level = {}
|
||||||
level.__index = level
|
level.__index = level
|
||||||
|
|
||||||
@ -25,7 +24,6 @@ local function new(type, template)
|
|||||||
tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size),
|
tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size),
|
||||||
selector = (require "lib.level.selector").new(),
|
selector = (require "lib.level.selector").new(),
|
||||||
camera = (require "lib.level.camera").new(),
|
camera = (require "lib.level.camera").new(),
|
||||||
turnOrder = (require "lib.level.turn_order").new(),
|
|
||||||
}, level)
|
}, level)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -25,18 +25,12 @@ function selector:update(dt)
|
|||||||
local selectedId = Tree.level.characterGrid:get(Vec3 { mousePosition.x, mousePosition.y })
|
local selectedId = Tree.level.characterGrid:get(Vec3 { mousePosition.x, mousePosition.y })
|
||||||
|
|
||||||
if not self.id then
|
if not self.id then
|
||||||
if selectedId ~= Tree.level.turnOrder.notWalked[1] and Tree.level.turnOrder.isTurnsEnabled then return end
|
|
||||||
return self:select(selectedId)
|
return self:select(selectedId)
|
||||||
else
|
else
|
||||||
local char = Tree.level.characters[self.id]
|
local char = Tree.level.characters[self.id]
|
||||||
|
|
||||||
char:try(Tree.behaviors.spellcaster, function(b)
|
char:try(Tree.behaviors.spellcaster, function(b)
|
||||||
if not b.cast then
|
if not b.cast then
|
||||||
-- тут какая-то страшная дичь, я даже не уверен что оно работает
|
|
||||||
-- зато я точно уверен, что это надо было писать не так
|
|
||||||
if not selectedId then self:select(selectedId) end
|
|
||||||
-- print(selectedId ~= next(Tree.level.turnOrder.notWalked), Tree.level.turnOrder.isTurnsEnabled)
|
|
||||||
if selectedId ~= Tree.level.turnOrder.notWalked[1] and Tree.level.turnOrder.isTurnsEnabled then return end
|
|
||||||
self:select(selectedId)
|
self:select(selectedId)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1,62 +0,0 @@
|
|||||||
--- @class TurnOrder
|
|
||||||
--- @field walked integer[]
|
|
||||||
--- @field notWalked integer[]
|
|
||||||
--- @field isTurnsEnabled boolean
|
|
||||||
local turnOrder = {}
|
|
||||||
turnOrder.__index = turnOrder
|
|
||||||
|
|
||||||
local function new()
|
|
||||||
return setmetatable({
|
|
||||||
walked = {},
|
|
||||||
notWalked = {},
|
|
||||||
isTurnsEnabled = true
|
|
||||||
}, turnOrder)
|
|
||||||
end
|
|
||||||
|
|
||||||
function turnOrder:updateOrder()
|
|
||||||
local notWalked = {}
|
|
||||||
local count = 1
|
|
||||||
for id, char in ipairs(Tree.level.characters) do
|
|
||||||
char:try(Tree.behaviors.stats, function(stats)
|
|
||||||
notWalked[count] = id
|
|
||||||
count = count + 1
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
table.sort(notWalked, function(id_a, id_b)
|
|
||||||
local res = Tree.level.characters[id_a]:try(Tree.behaviors.stats, function(astats)
|
|
||||||
local res = Tree.level.characters[id_b]:try(Tree.behaviors.stats, function(bstats)
|
|
||||||
return astats.initiative > bstats.initiative
|
|
||||||
end)
|
|
||||||
return res
|
|
||||||
end)
|
|
||||||
return res or false
|
|
||||||
end)
|
|
||||||
self.notWalked = notWalked
|
|
||||||
|
|
||||||
print('[Level]: Turn order has been updated!')
|
|
||||||
end
|
|
||||||
|
|
||||||
function turnOrder:next()
|
|
||||||
table.insert(self.walked, self.notWalked[1])
|
|
||||||
self.notWalked[1] = nil
|
|
||||||
|
|
||||||
local notWalked = {}
|
|
||||||
for i = 1, #self.notWalked do
|
|
||||||
notWalked[i] = self.notWalked[i + 1]
|
|
||||||
print(notWalked[i], i)
|
|
||||||
end
|
|
||||||
|
|
||||||
self.notWalked = notWalked
|
|
||||||
print('[Level]: Triggered next turn')
|
|
||||||
print('[Level]:', next(self.notWalked))
|
|
||||||
if #self.notWalked == 0 then
|
|
||||||
self:updateOrder()
|
|
||||||
self.walked = {}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function turnOrder:toggleTurns()
|
|
||||||
self.isTurnsEnabled = not self.isTurnsEnabled
|
|
||||||
end
|
|
||||||
|
|
||||||
return { new = new }
|
|
||||||
@ -102,13 +102,13 @@ function attack:cast(caster, target)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
caster:try(Tree.behaviors.stats, function(stats)
|
caster:try(Tree.behaviors.stats, function (stats)
|
||||||
stats.mana = stats.mana - 2
|
stats.mana = stats.mana - 2
|
||||||
end)
|
end)
|
||||||
|
|
||||||
--- @type Character
|
--- @type Character
|
||||||
local targetCharacterId = Tree.level.characterGrid:get(target)
|
local targetCharacterId = Tree.level.characterGrid:get(target)
|
||||||
if not targetCharacterId or targetCharacterId == caster.id then return false end
|
if not targetCharacterId then return false end
|
||||||
local targetCharacter = Tree.level.characters[targetCharacterId]
|
local targetCharacter = Tree.level.characters[targetCharacterId]
|
||||||
targetCharacter:try(Tree.behaviors.stats, function(stats)
|
targetCharacter:try(Tree.behaviors.stats, function(stats)
|
||||||
stats.hp = stats.hp - 4
|
stats.hp = stats.hp - 4
|
||||||
|
|||||||
15
main.lua
15
main.lua
@ -11,9 +11,7 @@ end
|
|||||||
|
|
||||||
function love.load()
|
function love.load()
|
||||||
character.spawn("Foodor", Tree.assets.files.sprites.character)
|
character.spawn("Foodor", Tree.assets.files.sprites.character)
|
||||||
character.spawn("Baris", Tree.assets.files.sprites.character, Vec3 { 3, 3 }, nil, 12)
|
character.spawn("Baris", Tree.assets.files.sprites.character, Vec3 { 3, 3 })
|
||||||
character.spawn("Foodor Jr", Tree.assets.files.sprites.character, Vec3 { 0, 3 })
|
|
||||||
character.spawn("Baris Jr", Tree.assets.files.sprites.character, Vec3 { 0, 6 })
|
|
||||||
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
love.window.setMode(1080, 720, { resizable = true, msaa = 4, vsync = true })
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -25,17 +23,6 @@ function love.update(dt)
|
|||||||
Widgets:update(dt) -- логика UI-слоя должна отработать раньше всех, потому что нужно перехватить жесты и не пустить их дальше
|
Widgets:update(dt) -- логика UI-слоя должна отработать раньше всех, потому что нужно перехватить жесты и не пустить их дальше
|
||||||
Tree.panning:update(dt)
|
Tree.panning:update(dt)
|
||||||
Tree.level:update(dt)
|
Tree.level:update(dt)
|
||||||
|
|
||||||
-- для тестов очереди ходов
|
|
||||||
-- удалить как только появится ui для людей
|
|
||||||
if Tree.controls:isJustPressed("endTurnTest") then
|
|
||||||
Tree.level.turnOrder:next()
|
|
||||||
end
|
|
||||||
if Tree.controls:isJustPressed("toggleTurns") then
|
|
||||||
print('toggle turns')
|
|
||||||
Tree.level.turnOrder:toggleTurns()
|
|
||||||
end
|
|
||||||
|
|
||||||
Tree.controls:cache()
|
Tree.controls:cache()
|
||||||
|
|
||||||
local t2 = love.timer.getTime()
|
local t2 = love.timer.getTime()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user