feat: ajout du holder de competence

This commit is contained in:
Kazhnuz 2024-08-02 09:06:50 +02:00
parent e9d05ebd30
commit e816551eab
4 changed files with 72 additions and 4 deletions

View file

@ -0,0 +1,57 @@
local CompetenceHolder = Object:extend()
local Competence = Object:extend()
function Competence:new(name)
self.name = name;
self.base = 0;
self.lvl = 0;
self.bonus = 0;
self.add = 0;
end
function Competence:reduce(level)
return {
name = self.name,
value = self.base + (self.lvl * level) + self.bonus + self.add
}
end
function CompetenceHolder:new(key, datas)
self.key = key
self.datas = datas
self.list = {}
end
function CompetenceHolder:applyCommand(command, args)
if (command == "reset") then
self.list = {}
return
end
local competence = self:getCompetence(args[1])
if (command == "") then
competence.base = tonumber(args[2]) or 0
elseif (command == "add") then
competence.add = tonumber(args[2]) or 0
elseif (command == "bonus") then
competence.bonus = tonumber(args[2]) or 0
elseif (command == "lvl") then
competence.lvl = tonumber(args[2]) or 0
end
end
function CompetenceHolder:getCompetence(name)
if self.list[name] == nil then
self.list[name] = Competence(name)
end
return self.list[name]
end
function CompetenceHolder:reduce(level)
local list = {}
for key, value in pairs(self.list) do
table.insert(list, value:reduce(level))
end
return list
end
return CompetenceHolder

View file

@ -11,7 +11,7 @@ function StatHolder:applyCommand(command, args)
end end
function StatHolder:reduce(level) function StatHolder:reduce(level)
return self.commands.base + ((self.commands.level or 0) * level) + (self.commands.add or 0) + (self.commands.bonus or 0) return self.commands.base + ((self.commands.lvl or 0) * level) + (self.commands.add or 0) + (self.commands.bonus or 0)
end end
return StatHolder return StatHolder

View file

@ -4,6 +4,7 @@ local DataList = Object:extend()
local ListHolder = require "classes.dataholders.listholder" local ListHolder = require "classes.dataholders.listholder"
local SimpleHolder = require "classes.dataholders.simpleholder" local SimpleHolder = require "classes.dataholders.simpleholder"
local StatHolder = require "classes.dataholders.statholder" local StatHolder = require "classes.dataholders.statholder"
local CompetenceHolder = require "classes.dataholders.competenceholder"
function RawData.fromLine(line) function RawData.fromLine(line)
line = utils.removeComment(line) line = utils.removeComment(line)
@ -49,8 +50,10 @@ function RawData:getCommand()
end end
function DataList.getHolder(key, value) function DataList.getHolder(key, value)
if (value.dataType == "comp" or value.dataType == "list") then if (value.dataType == "list") then
return ListHolder(key, value) return ListHolder(key, value)
elseif (value.dataType == "comp") then
return CompetenceHolder(key, value)
elseif (value.dataType == "stat") then elseif (value.dataType == "stat") then
return StatHolder(key, value) return StatHolder(key, value)
end end

View file

@ -20,6 +20,14 @@ local function addStatCommands(name, value)
addCommands(name .. ".bonus", name, 0) addCommands(name .. ".bonus", name, 0)
end end
local function addCompCommands(name, value)
addCommands(name, name)
addCommands(name .. ".reset", name)
addCommands(name .. ".lvl", name)
addCommands(name .. ".add", name)
addCommands(name .. ".bonus", name)
end
local function addListCommands(name, value) local function addListCommands(name, value)
addCommands(name, name) addCommands(name, name)
addCommands(name .. ".replace", name) addCommands(name .. ".replace", name)
@ -32,7 +40,7 @@ for key, value in pairs(struct) do
elseif (value.dataType == "list") then elseif (value.dataType == "list") then
addListCommands(key, value) addListCommands(key, value)
elseif (value.dataType == "comp") then elseif (value.dataType == "comp") then
addListCommands(key, value) addCompCommands(key, value)
else else
addCommands(key, key, value.default) addCommands(key, key, value.default)
end end
@ -45,7 +53,7 @@ end
function functions.clean(args, command) function functions.clean(args, command)
local baseCommand = commands[command] local baseCommand = commands[command]
if (baseCommand == nil) then if (baseCommand == nil) then
error("Command " .. baseCommand .. " doesn't exists") error("Command " .. command .. " doesn't exists")
end end
local commandData = struct[baseCommand] local commandData = struct[baseCommand]
if (commandData.args == nil or commandData.args == 1) then if (commandData.args == nil or commandData.args == 1) then