diff --git a/sonic-radiance.love/game/abstractmobs/character/datas.lua b/sonic-radiance.love/game/abstractmobs/character/datas.lua index 9fd50db..263fa20 100644 --- a/sonic-radiance.love/game/abstractmobs/character/datas.lua +++ b/sonic-radiance.love/game/abstractmobs/character/datas.lua @@ -17,6 +17,7 @@ function CharacterData:getData() data.hp = self.hp data.pp = self.pp data.statuts = self.statuts + data.equip = self.equip return data end @@ -33,6 +34,8 @@ function CharacterData:setData(data) self.hp = data.hp self.pp = data.pp self.statuts = data.statuts + + self.equip = data.equip or {} end return CharacterData diff --git a/sonic-radiance.love/game/abstractmobs/character/equip.lua b/sonic-radiance.love/game/abstractmobs/character/equip.lua new file mode 100644 index 0000000..0c2e30d --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/character/equip.lua @@ -0,0 +1,52 @@ +local CharacterEquip = Object:extend() +local itemutils = require "game.utils.items" + +local categories = {"gloves", "shoes", "accessories"} + +function CharacterEquip:initEquip() + self.equip = {} + if self.data.inventory == nil then + core.debug:warning("character/equip", "Initial equip not set for " .. self.simplename) + for _, category in ipairs(categories) do + self.equip[category] = "" + end + else + for _, category in ipairs(categories) do + self.equip[category] = self.data.inventory[category] or "" + end + end +end + +function CharacterEquip:setEquip(category, name) + if (not utils.string.isEmpty(self.equip[category])) then + game.loot:addItem(category, self.equip[category]) + end + self.equip[category] = name + game.loot:removeItem(category, name) +end + +function CharacterEquip:predictStat(category, name) + +end + +function CharacterEquip:getEquipStats(stat, ignore) + local boost = 0 + local ignore = ignore or "" + for _, category in ipairs(categories) do + if (category ~= ignore) then + boost = boost + self:getStatByType(stat, category) + end + end + return boost +end + +function CharacterEquip:getStatByType(stat, category) + if (not utils.string.isEmpty(self.equip[category])) then + local data = itemutils.getItemData(category, self.equip[category]) + local boost = data.statsBoost[stat] or 0 + return boost + end + return 0 +end + +return CharacterEquip \ No newline at end of file diff --git a/sonic-radiance.love/game/abstractmobs/character/init.lua b/sonic-radiance.love/game/abstractmobs/character/init.lua index 4716bc1..ead115b 100644 --- a/sonic-radiance.love/game/abstractmobs/character/init.lua +++ b/sonic-radiance.love/game/abstractmobs/character/init.lua @@ -4,9 +4,11 @@ local AbstractCharacter = AbstractMobParent:extend() local CharacterHealth = require "game.abstractmobs.character.health" local CharacterLevels = require "game.abstractmobs.character.levels" local CharacterDatas = require "game.abstractmobs.character.datas" +local CharacterEquip = require "game.abstractmobs.character.equip" AbstractCharacter:implement(CharacterHealth) AbstractCharacter:implement(CharacterLevels) AbstractCharacter:implement(CharacterDatas) +AbstractCharacter:implement(CharacterEquip) function AbstractCharacter:new(name) self.simplename = name @@ -15,6 +17,7 @@ end function AbstractCharacter:initBasicElements() self:getCommonData() + self:initEquip() self:initLevel() end @@ -28,6 +31,11 @@ function AbstractCharacter:createStats() return stats end +function AbstractCharacter:getStat(statName, ignoreEquip) + local stat = self:getComputedStat(statName) + self:getEquipStats(statName, ignoreEquip) + return stat +end + function AbstractCharacter:createSkills() local learnedlist = {} diff --git a/sonic-radiance.love/game/abstractmobs/character/levels.lua b/sonic-radiance.love/game/abstractmobs/character/levels.lua index 182d933..239a700 100644 --- a/sonic-radiance.love/game/abstractmobs/character/levels.lua +++ b/sonic-radiance.love/game/abstractmobs/character/levels.lua @@ -29,7 +29,7 @@ function CharacterLevel:levelUp() self:setLevel(self.level + 1) end -function CharacterLevel:getStat(statname) +function CharacterLevel:getComputedStat(statname) local baseStat = self.data.stats[statname] if (baseStat == nil) then error("Stat " .. statname .. " doesn't exist")