2019-08-14 16:26:23 +02:00
|
|
|
local World = Object:extend()
|
|
|
|
|
|
|
|
local maputils = require "scenes.battlesystem.utils"
|
|
|
|
local Map = require "scenes.battlesystem.map"
|
|
|
|
local Cursor = require "scenes.battlesystem.cursor"
|
|
|
|
|
2019-08-16 23:04:30 +02:00
|
|
|
local TweenManager = require "game.modules.tweenmanager"
|
|
|
|
|
2019-08-14 16:26:23 +02:00
|
|
|
local POSITIONS = {
|
|
|
|
{x = 3, y = 4},
|
|
|
|
{x = 2, y = 2},
|
|
|
|
{x = 2, y = 6},
|
|
|
|
}
|
|
|
|
|
2019-08-15 09:13:08 +02:00
|
|
|
local gui = require "game.modules.gui"
|
|
|
|
|
2019-08-14 16:26:23 +02:00
|
|
|
-- 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")
|
2019-08-16 18:33:47 +02:00
|
|
|
|
|
|
|
self.isBattleActive = false
|
2019-08-14 16:26:23 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
function World:registerActor(actor)
|
|
|
|
self.globalID = self.globalID + 1
|
|
|
|
|
|
|
|
table.insert(self.actors, actor)
|
|
|
|
actor.id = self.globalID
|
|
|
|
end
|
|
|
|
|
2019-08-15 15:06:13 +02:00
|
|
|
function World:destroyActor(actorToDestroy)
|
|
|
|
for i, actor in ipairs(self.actors) do
|
|
|
|
if actor == actorToDestroy then
|
|
|
|
table.remove(self.actors, i)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2019-08-14 16:26:23 +02:00
|
|
|
-- INFO FUNCTIONS
|
|
|
|
-- Get info from the world
|
|
|
|
|
2019-08-25 15:54:26 +02:00
|
|
|
function World:caseIsEmpty(x, y, notThisActor)
|
|
|
|
local actor = self:getActorInCase(x, y, notThisActor)
|
2019-08-14 16:26:23 +02:00
|
|
|
|
2019-08-25 15:54:26 +02:00
|
|
|
return (actor == nil)
|
2019-08-14 16:26:23 +02:00
|
|
|
end
|
|
|
|
|
2019-08-25 15:54:26 +02:00
|
|
|
function World:getActorInCase(x, y, notThisActor)
|
2019-08-14 16:26:23 +02:00
|
|
|
for i, actor in ipairs(self.actors) do
|
2019-08-25 15:54:26 +02:00
|
|
|
if (actor.x == x) and (actor.y == y) and (actor ~= notThisActor) then
|
2019-08-14 16:26:23 +02:00
|
|
|
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
|
|
|
|
|
2019-08-24 21:10:41 +02:00
|
|
|
self.map:update(dt)
|
2019-08-14 16:26:23 +02:00
|
|
|
end
|
|
|
|
|
2019-08-25 10:38:06 +02:00
|
|
|
function World:sendSignalToCurrentBattler(signal, subSignal)
|
2020-05-01 14:50:21 +02:00
|
|
|
self.scene.turns:sendSignalToCurrentBattler(signal, subSignal)
|
2019-08-14 16:26:23 +02:00
|
|
|
end
|
|
|
|
|
2019-08-22 22:40:31 +02:00
|
|
|
-- 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
|
2019-08-14 16:26:23 +02:00
|
|
|
|
|
|
|
-- DRAW FUNCTION
|
|
|
|
-- Draw the world
|
|
|
|
|
|
|
|
function World:draw()
|
2019-08-22 22:40:31 +02:00
|
|
|
self.map:draw(self.activeGrid, self.effectGrid)
|
2020-07-19 16:57:38 +02:00
|
|
|
--self.cursor:drawBottom()
|
2019-08-14 16:26:23 +02:00
|
|
|
self:drawShadows()
|
|
|
|
self:drawActors()
|
2020-07-19 16:57:38 +02:00
|
|
|
--self.cursor:drawTop()
|
2019-08-14 16:26:23 +02:00
|
|
|
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
|