45 lines
1.2 KiB
Lua
45 lines
1.2 KiB
Lua
local World = require "core.modules.world.world2D"
|
|
local RPGWorld = World:extend()
|
|
local objFile = "scenes.overworld.actors"
|
|
local RPGMap = require "scenes.overworld.map"
|
|
|
|
function RPGWorld:new(scene, area, playerx, playery)
|
|
self.area = area or game.position.area
|
|
self.playerx = playerx or game.position.x
|
|
self.playery = playery or game.position.y
|
|
RPGWorld.super.new(self, scene, objFile, nil, nil)
|
|
end
|
|
|
|
function RPGWorld:createMapController()
|
|
RPGMap(self, self.area, self.playerx, self.playery)
|
|
end
|
|
|
|
function RPGWorld:savePosition()
|
|
local x, y = self.players[1].actor.x, self.players[1].actor.y
|
|
game.position.x = math.floor(x / 16)
|
|
game.position.y = math.floor(y / 16)
|
|
game.position.area = self.area
|
|
end
|
|
|
|
function RPGWorld:teleport(area, x, y)
|
|
if (area == self.area) then
|
|
self.players[1].actor.x = x * 16
|
|
self.players[1].actor.y = y * 16
|
|
else
|
|
self.area = area
|
|
self.playerx = x
|
|
self.playery = y
|
|
self:reset()
|
|
collectgarbage()
|
|
end
|
|
end
|
|
|
|
function RPGWorld:restoreActions()
|
|
self.encounter:destroy()
|
|
local currentMap = self.map:getMapAtPoint(self.players[1].actor.x, self.players[1].actor.y)
|
|
self.players[1].actor.xsp = 0
|
|
self.players[1].actor.ysp = 0
|
|
self.scene:playMapMusic(currentMap)
|
|
end
|
|
|
|
return RPGWorld
|