diff --git a/sonic-radiance.love/game/abstractmobs/character.lua b/sonic-radiance.love/game/abstractmobs/character.lua deleted file mode 100644 index a8073df..0000000 --- a/sonic-radiance.love/game/abstractmobs/character.lua +++ /dev/null @@ -1,126 +0,0 @@ -local AbstractMobParent = require "game.abstractmobs.parent" - -local AbstractCharacter = AbstractMobParent:extend() - -local charutils = require "game.utils.characters" - -function AbstractCharacter:new(name) - self.simplename = name - self.super.new(self) -end - -function AbstractCharacter:initBasicElements() - self:getCommonData(self.simplename) - - self.level = self.data.startlevel - self.exp = charutils.getExpValue(self.level) - self.exp_next = charutils.getExpValue(self.level + 1) -end - -function AbstractCharacter:getCommonData(simplename) - self.data = charutils.getCharacterData(self.simplename) - self.name = self.data.name - self.fullname = self.data.fullname - self.turns = self.data.turns -end - -function AbstractCharacter:createStats() - local stats = {} - local base_stats = self.data.stats - - stats.hpmax = charutils.getHPValue(self.level, base_stats.hpmax) - stats.ppmax = charutils.getPPValue(self.level, base_stats.ppmax) - stats.attack = charutils.getStatValue(self.level, base_stats.attack) - stats.power = charutils.getStatValue(self.level, base_stats.power) - stats.defense = charutils.getStatValue(self.level, base_stats.defense) - stats.mind = charutils.getStatValue(self.level, base_stats.mind) - stats.technic = charutils.getStatValue(self.level, base_stats.technic) - stats.speed = charutils.getStatValue(self.level, base_stats.speed) - - return stats -end - -function AbstractCharacter:createSkills() - local learnedlist = {} - - for i, v in ipairs(self.data.skills) do - local tech_name, tech_level, isLearned = v[1], v[2], false - if tech_level <= self.level then - local canLearn = true - for i, learnedSkill in ipairs(learnedlist) do - - -- We check if the skill have already been learned, to level-up it - if learnedSkill.name == tech_name then - canLearn = false - learnedSkill.level = learnedSkill.level + 1 - end - end - - if (canLearn) then - local skilldata = {} - skilldata.name = tech_name - skilldata.level = 1 - skilldata.learnedAt = tech_level - - table.insert(learnedlist, skilldata) - end - - end - -- On continue ensuite d'itérer dans la liste - end - - return learnedlist -end - -function AbstractCharacter:setLevel(newlevel) - self.level = newlevel - local exp, exp_next, exp_current - local exp_min = charutils.getExpValue(self.level) - local exp_max = charutils.getExpValue(self.level + 1) - exp = self.exp - - self.exp = math.max(math.min(exp, exp_max - 1), exp_min) - self.exp_next = exp_max - - self.stats = self:createStats() -end - -function AbstractCharacter:levelUp() - if (game.difficulty:get("levelUpHeal")) then - self:heal() - end - self:setLevel(self.level + 1) -end - -function AbstractCharacter:heal() - self:initLife() -end - -function AbstractCharacter:getData() - local data = {} - data.simplename = self.simplename - data.level = self.level - data.exp = self.exp - data.exp_next = self.exp_next - data.hp = self.hp - data.pp = self.pp - data.statuts = self.statuts - - return data -end - -function AbstractCharacter:setData(data) - self.simplename = data.simplename - self:getCommonData(self.simplename) - - self.level = data.level - self.exp = data.exp - self.exp_next = data.exp_next - self:createStats() - - self.hp = data.hp - self.pp = data.pp - self.statuts = data.statuts -end - -return AbstractCharacter diff --git a/sonic-radiance.love/game/abstractmobs/character/datas.lua b/sonic-radiance.love/game/abstractmobs/character/datas.lua new file mode 100644 index 0000000..9fd50db --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/character/datas.lua @@ -0,0 +1,38 @@ +local CharacterData = Object:extend() +local charutils = require "game.utils.characters" + +function CharacterData:getCommonData() + self.data = charutils.getCharacterData(self.simplename) + self.name = self.data.name + self.fullname = self.data.fullname + self.turns = self.data.turns +end + +function CharacterData:getData() + local data = {} + data.simplename = self.simplename + data.level = self.level + data.exp = self.exp + data.exp_next = self.exp_next + data.hp = self.hp + data.pp = self.pp + data.statuts = self.statuts + + return data +end + +function CharacterData:setData(data) + self.simplename = data.simplename + self:getCommonData() + + self.level = data.level + self.exp = data.exp + self.exp_next = data.exp_next + self:createStats() + + self.hp = data.hp + self.pp = data.pp + self.statuts = data.statuts +end + +return CharacterData diff --git a/sonic-radiance.love/game/abstractmobs/character/health.lua b/sonic-radiance.love/game/abstractmobs/character/health.lua new file mode 100644 index 0000000..9bad5f0 --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/character/health.lua @@ -0,0 +1,7 @@ +local CharacterHealth = Object:extend() + +function CharacterHealth:heal() + self:initLife() +end + +return CharacterHealth \ 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 new file mode 100644 index 0000000..4716bc1 --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/character/init.lua @@ -0,0 +1,61 @@ +local AbstractMobParent = require "game.abstractmobs.parent" +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" +AbstractCharacter:implement(CharacterHealth) +AbstractCharacter:implement(CharacterLevels) +AbstractCharacter:implement(CharacterDatas) + +function AbstractCharacter:new(name) + self.simplename = name + self.super.new(self) +end + +function AbstractCharacter:initBasicElements() + self:getCommonData() + self:initLevel() +end + +function AbstractCharacter:createStats() + local statNames = self:getStatList() + local stats = {} + for _, name in ipairs(statNames) do + stats[name] = self:getStat(name) + end + + return stats +end + +function AbstractCharacter:createSkills() + local learnedlist = {} + + for i, v in ipairs(self.data.skills) do + local tech_name, tech_level, isLearned = v[1], v[2], false + if tech_level <= self.level then + local canLearn = true + for i, learnedSkill in ipairs(learnedlist) do + -- We check if the skill have already been learned, to level-up it + if learnedSkill.name == tech_name then + canLearn = false + learnedSkill.level = learnedSkill.level + 1 + end + end + + if (canLearn) then + local skilldata = {} + skilldata.name = tech_name + skilldata.level = 1 + skilldata.learnedAt = tech_level + + table.insert(learnedlist, skilldata) + end + end + -- On continue ensuite d'itérer dans la liste + end + + return learnedlist +end + +return AbstractCharacter diff --git a/sonic-radiance.love/game/abstractmobs/character/levels.lua b/sonic-radiance.love/game/abstractmobs/character/levels.lua new file mode 100644 index 0000000..182d933 --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/character/levels.lua @@ -0,0 +1,55 @@ +local CharacterLevel = Object:extend() + +local charutils = require "game.utils.characters" +local statList = {"hpmax", "ppmax", "attack", "power", "defense", "mind", "technic", "speed"} + +function CharacterLevel:initLevel() + self.level = self.data.startlevel + self.exp = charutils.getExpValue(self.level) + self.exp_next = charutils.getExpValue(self.level + 1) +end + +function CharacterLevel:setLevel(newlevel) + self.level = newlevel + local exp + local exp_min = charutils.getExpValue(self.level) + local exp_max = charutils.getExpValue(self.level + 1) + exp = self.exp + + self.exp = math.max(math.min(exp, exp_max - 1), exp_min) + self.exp_next = exp_max + + self.stats = self:createStats() +end + +function CharacterLevel:levelUp() + if (game.difficulty:get("levelUpHeal")) then + self:heal() + end + self:setLevel(self.level + 1) +end + +function CharacterLevel:getStat(statname) + local baseStat = self.data.stats[statname] + if (baseStat == nil) then + error("Stat " .. statname .. " doesn't exist") + else + local stat = 0 + + if (statname == "hpmax") then + stat = charutils.getHPValue(self.level, baseStat) + elseif (statname == "ppmax") then + stat = charutils.getPPValue(self.level, baseStat) + else + stat = charutils.getStatValue(self.level, baseStat) + end + + return stat + end +end + +function CharacterLevel:getStatList() + return statList +end + +return CharacterLevel