local World = Object:extend() local maputils = require "scenes.battlesystem.utils" local Map = require "scenes.battlesystem.map" local Cursor = require "scenes.battlesystem.cursor" local TweenManager = require "game.modules.tweenmanager" local POSITIONS = { {x = 3, y = 4}, {x = 2, y = 2}, {x = 2, y = 6}, } local gui = require "game.modules.gui" -- INIT FUNCTIONS -- Initialize the battle world function World:new(scene, battlefile) self.scene = scene self.assets = scene.assets self.obj = require "scenes.battlesystem.actors" self.actors = {} self.globalID = 0 self.battlers = {} self.heroNumber = 0 self.ennNumber = 0 self.map = Map(self, "city") self.isBattleActive = false end function World:registerActor(actor) self.globalID = self.globalID + 1 table.insert(self.actors, actor) actor.id = self.globalID end function World:destroyActor(actorToDestroy) for i, actor in ipairs(self.actors) do if actor == actorToDestroy then table.remove(self.actors, i) end end end -- INFO FUNCTIONS -- Get info from the world function World:caseIsEmpty(x, y, notThisActor) local actor = self:getActorInCase(x, y, notThisActor) return (actor == nil) end function World:getActorInCase(x, y, notThisActor) for i, actor in ipairs(self.actors) do if (actor.x == x) and (actor.y == y) and (actor ~= notThisActor) then core.debug:print("cbs/world", "one actor found in case <" .. x .. ";" .. y .. ">") return actor end end return nil end -- UPDATE FUNCTION -- Update all actors function World:update(dt) for i, actor in ipairs(self.actors) do actor:update(dt) end self.map:update(dt) end function World:sendSignalToCurrentBattler(signal, subSignal) self.scene.turns:sendSignalToCurrentBattler(signal, subSignal) end -- ACTIVEGRID FUNCTIONS -- Help to handle the activeGrid system function World:resetActiveGrid() self.activeGrid = maputils.newFullMap() end function World:setActiveGrid(ox, oy, shape, size, direction) self.activeGrid = maputils.maskToMap(ox, oy, shape, size, direction) end function World:setActiveGridFromGrid(grid) self.activeGrid = grid end function World:resetEffectGrid() self.effectGrid = maputils.newEmptyMap() end function World:setEffectGrid(ox, oy, shape, size, direction) self.effectGrid = maputils.maskToMap(ox, oy, shape, size, direction) end -- DRAW FUNCTION -- Draw the world function World:draw() self.map:draw(self.activeGrid, self.effectGrid) --self.cursor:drawBottom() self:drawShadows() self:drawActors() --self.cursor:drawTop() end function World:drawActors() for i, actor in ipairs(self.actors) do actor:draw() end end function World:drawShadows() for i, actor in ipairs(self.actors) do actor:drawShadow() end end return World