summaryrefslogtreecommitdiffhomepage
path: root/not
diff options
context:
space:
mode:
Diffstat (limited to 'not')
-rw-r--r--not/World.lua50
1 files changed, 20 insertions, 30 deletions
diff --git a/not/World.lua b/not/World.lua
index 6a71fd9..c3fec11 100644
--- a/not/World.lua
+++ b/not/World.lua
@@ -10,13 +10,14 @@ require "not.Effect"
require "not.Decoration"
require "not.Ray"
--- Constructor of `World` ZA WARUDO!
+--- ZA WARUDO!
+-- TODO: Missing documentation on most of World's methods.
function World:new (map, nauts)
- -- Box2D physical world.
love.physics.setMeter(64)
self.world = love.physics.newWorld(0, 9.81*64, true)
self.world:setCallbacks(self.beginContact, self.endContact)
- -- Tables for entities. TODO: It is still pretty bad!
+ -- Tables for entities.
+ -- TODO: Move all entities into single table.
self.lastNaut = false
self.Nauts = {}
self.Platforms = {}
@@ -25,6 +26,7 @@ function World:new (map, nauts)
self.Decorations = {}
self.Rays = {}
-- Map and misc.
+ -- TODO: `map` could be table from config file rather than just string.
local map = map or "default"
self:loadMap(map)
self:spawnNauts(nauts)
@@ -60,8 +62,8 @@ function World:loadMap (name)
end
if op.background then
local image = love.graphics.newImage(op.background)
- local x = image:getWidth() / -2
- local y = image:getHeight() / -2
+ local x = self.map.center.x - (image:getWidth() / 2)
+ local y = self.map.center.y - (image:getHeight() / 2)
self:createDecoration(x, y, op.background) -- TODO: Decoration does not allow Image instead of filePath!
end
end
@@ -88,33 +90,34 @@ function World:getSpawnPosition ()
return self.map.respawns[n].x, self.map.respawns[n].y
end
--- Add new platform to the world
--- TODO: it would be nice if function parameters would be same as `not.Platform.new`.
+-- TODO: Standardize `create*` methods with corresponding constructors. Pay attention to both params' order and names.
function World:createPlatform (x, y, polygon, sprite, animations)
table.insert(self.Platforms, Platform(animations, polygon, x, y, self, sprite))
end
--- Add new naut to the world
--- TODO: separate two methods for `not.Hero` and `not.Player`.
function World:createNaut (x, y, name)
local naut = Player(name, x, y, self)
table.insert(self.Nauts, naut)
return naut
end
--- Add new decoration to the world
--- TODO: `not.World.create*` functions often have different naming for parameters. It is not ground-breaking but it makes reading code harder for no good reason.
function World:createDecoration (x, y, sprite)
table.insert(self.Decorations, Decoration(x, y, self, sprite))
end
--- Add new cloud to the world
--- TODO: extend variables names to provide better readability.
--- TODO: follow new parameters in `not.Cloud.new` based on `not.Cloud.init`.
+-- TODO: Extend names of variables related to Clouds to provide better readability. See also: `not/Cloud`.
function World:createCloud (x, y, t, v)
table.insert(self.Clouds, Cloud(x, y, t, v, self))
end
+function World:createEffect (name, x, y)
+ table.insert(self.Effects, Effect(name, x, y, self))
+end
+
+function World:createRay (naut)
+ table.insert(self.Rays, Ray(naut, self))
+end
+
-- Randomize Cloud creation
function World:randomizeCloud (outside)
if outside == nil then
@@ -135,18 +138,6 @@ function World:randomizeCloud (outside)
self:createCloud(x, y, t, v)
end
--- Add an effect behind nauts
--- TODO: follow new parameters in `not.Effect.new` based on `not.Effect.init`.
--- TODO: along with `createRay` move this nearer reast of `create*` methods for readability.
-function World:createEffect (name, x, y)
- table.insert(self.Effects, Effect(name, x, y, self))
-end
-
--- Add a ray
-function World:createRay (naut)
- table.insert(self.Rays, Ray(naut, self))
-end
-
-- get Nauts functions
-- more than -1 lives
function World:getNautsPlayable ()
@@ -209,6 +200,7 @@ function World:update (dt)
decoration:update(dt)
end
-- Clouds
+ -- TODO: possibly create new class for Clouds generation. Do it along with Cloud cleaning.
if self.map.clouds then
-- generator
local n = table.getn(self.Clouds)
@@ -323,9 +315,8 @@ function World:draw ()
end
-- Box2D callbacks
--- TODO: Rather than here, these contacts should be in `Hero` (most likely).
--- TODO: Explode these into more functions.\
--- TODO: Stop using magical numbers:
+-- TODO: Review current state of Box2D callbacks.
+-- TODO: Stop using magical numbers in Box2D callbacks.
-- [1] -> Platform
-- [2] -> Hero
-- [3] -> Punch sensor
@@ -367,7 +358,6 @@ function World.endContact (a, b, coll)
end
-- Controller callbacks
--- TODO: names of this methods don't follow naming patterns in this project. See `Controller` and change it.
function World:controlpressed (set, action, key)
if key == "f6" and debug then
local map = self:getMapName()