local World3D = require "core.modules.world.world3D"
local RadianceWorld = World3D:extend()

local customMap = require "game.modules.world.maps"

function RadianceWorld:new(scene, maptype, mapname)
  local mappath = game.utils.getMapPath(maptype, mapname)
  RadianceWorld.super.new(self, scene, "game.modules.world.actors", mappath, maptype)

  self.mapname = mapname
end

function RadianceWorld:createMapController()
  if (self.maptype == "test") then
    customMap.Test(self)
  elseif (self.maptype == "battle") then
    customMap.Battle(self, self.maptype, self.mapname)
  elseif (self.maptype == "shoot") then
    customMap.Shoot(self, self.maptype, self.mapname)
    self.cameras:lockY(4)
  else
    RadianceWorld.super.createMapController(self)
  end
end

function RadianceWorld:loadMapObjects()
  RadianceWorld.super.loadMapObjects(self)
  self:addInvisibleWalls()
end

function RadianceWorld:addInvisibleWalls()
  local w, h = self:getDimensions()
  print(w, h)
  self.obj.collisions["invisible"](self,   0, -16,   0,  w,  16, 1000)
  self.obj.collisions["invisible"](self,   0,   h,   0,  w,  16, 1000)
  self.obj.collisions["invisible"](self,   w,   0,   0, 16,   h, 1000)
  self.obj.collisions["invisible"](self, -16,   0,   0, 16,   h, 1000)
end

function RadianceWorld:draw(dt)
  self:drawBackgroundColor()
  local camNumber = self.cameras:getViewNumber()

  if (camNumber == 0) then
    self:drawMap()
    self:drawActors()
  else
    for i=1, camNumber do
      self:drawParallax(i)
      self.cameras:attachView(i)
      self:drawMap(i)
      self:drawActors(i)
      self.cameras:detachView(i)
    end
  end
end

function RadianceWorld:drawParallax(i)
  local x, y, w, h = self.cameras:getViewCoordinate(i)
  if (self.map ~= nil) and (self.maptype ~= "sti") then
    self.map:drawParallax(x, y, w, h)
  end
end

return RadianceWorld
