consistent naming; moving functions from level.lua to gameworld.lua
This commit is contained in:
		
							parent
							
								
									f4b44dc7bc
								
							
						
					
					
						commit
						90ed1f6460
					
				|  | @ -3,11 +3,11 @@ return { | ||||||
|   tileset = tileset.library, |   tileset = tileset.library, | ||||||
|   tiles = { |   tiles = { | ||||||
|     {13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13}, |     {13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13}, | ||||||
|     { }, |     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||||||
|     { 0, 0, 0, 0, 0, 0, 5,25,26, 6,25,26, 7, 0, 5,25,26, 7}, |     { 0, 0, 0, 0, 0, 0, 5,25,26, 6,25,26, 7, 0, 5,25,26, 7, 0, 0, 0, 0, 0, 0}, | ||||||
|     { 0, 0, 0, 0, 0, 0, 5,37,38, 6,37,38, 7, 0, 5,37,38, 7}, |     { 0, 0, 0, 0, 0, 0, 5,37,38, 6,37,38, 7, 0, 5,37,38, 7, 0, 0, 0, 0, 0, 0}, | ||||||
|     { 0, 0, 0, 0, 0, 0, 5,37,38, 6,37,38, 7, 0, 5,37,38, 7}, |     { 0, 0, 0, 0, 0, 0, 5,37,38, 6,37,38, 7, 0, 5,37,38, 7, 0, 0, 0, 0, 0, 0}, | ||||||
|     { 0, 0, 0, 0, 0, 0, 5,49,50, 6,49,50, 7, 0, 5,49,50, 7}, |     { 0, 0, 0, 0, 0, 0, 5,49,50, 6,49,50, 7, 0, 5,49,50, 7, 0, 0, 0, 0, 0, 0}, | ||||||
|     { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} |     { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} | ||||||
|   }, |   }, | ||||||
|   objects = {} |   objects = {} | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function DebugColisions() | function DebugColisions() | ||||||
|   objects.DrawCollisions() |   LoadedObjects.DrawCollisions() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function DebugEntities() | function DebugEntities() | ||||||
|  |  | ||||||
|  | @ -13,6 +13,18 @@ function EditorStep() | ||||||
|       selecting_tile = 51 |       selecting_tile = 51 | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |   if love.keyboard.isDown('a',"left") then | ||||||
|  |     Camera.pos.x = Camera.pos.x - 3*game.scale | ||||||
|  |   end | ||||||
|  |   if love.keyboard.isDown('d',"right") then | ||||||
|  |   	Camera.pos.x = Camera.pos.x + 3*game.scale | ||||||
|  |   end | ||||||
|  |   if love.keyboard.isDown("up", "w") then | ||||||
|  |   	Camera.pos.y = Camera.pos.y - 3*game.scale | ||||||
|  |   end | ||||||
|  | 	if love.keyboard.isDown("down", "s") then | ||||||
|  | 		Camera.pos.y = Camera.pos.y + 3*game.scale | ||||||
|  | 	end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function EditorScroll(y) | function EditorScroll(y) | ||||||
|  | @ -29,12 +41,87 @@ function EditorScroll(y) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function EditorDraw() | function EditorDraw() | ||||||
|   GameworldDraw() |   GameworldDrawPrepare() | ||||||
|  |   GameworldDrawBackground() | ||||||
|  |   GridDisplay() | ||||||
|  |   GameworldDrawForeground() | ||||||
|  |   GameworldDrawEnd() | ||||||
|  | 
 | ||||||
|  |   DrawSelectingPaletteTile() | ||||||
|   if palette then |   if palette then | ||||||
|     EditorDoPalette() |     EditorDoPalette() | ||||||
|   end |   end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | function EditorDoEdit() | ||||||
|  |   if love.mouse.isDown(1) then | ||||||
|  |     local vertical = 1+math.floor((mouse.pos.y+Camera.pos.y)/(tileProperties.scale*tileProperties.height)) | ||||||
|  |     local horizontal = 1+math.floor((mouse.pos.x+Camera.pos.x)/(tileProperties.scale*tileProperties.width)) | ||||||
|  |     local h, v = GetCanvasSize() | ||||||
|  | 
 | ||||||
|  |     local expand_h = 0 | ||||||
|  |     local expand_v = 0 | ||||||
|  | 
 | ||||||
|  |     if horizontal > h then | ||||||
|  |   	   expand_h = horizontal-h | ||||||
|  |     elseif horizontal <= 0 then | ||||||
|  |   	   expand_h = horizontal-1 | ||||||
|  |   	end | ||||||
|  | 
 | ||||||
|  |   	if vertical > v then | ||||||
|  |   	   expand_v = math.sign(vertical-v) | ||||||
|  |   	elseif vertical <= 0 then | ||||||
|  |   	   expand_v = math.sign(vertical-1) | ||||||
|  |   	end | ||||||
|  | 
 | ||||||
|  |   	if 	Level[vertical] ~= nil | ||||||
|  |   	and Level[vertical][horizontal] ~= nil | ||||||
|  |   	and love.keyboard.isDown("lshift") ~= true | ||||||
|  |   	and love.keyboard.isDown("lctrl") ~= true | ||||||
|  |   	then | ||||||
|  |   	   Level[vertical][horizontal] = tile_carrying | ||||||
|  |     elseif love.keyboard.isDown("lshift") and not expanded then | ||||||
|  |   	   expanded = true | ||||||
|  |   	    ExpandCanvas(math.sign(expand_h),math.sign(expand_v)) | ||||||
|  | 
 | ||||||
|  |     	if expand_h < 0 then | ||||||
|  |   	   Camera.pos.x = Camera.pos.x - expand_h*tileProperties.scale*tileProperties.width | ||||||
|  |     	end | ||||||
|  |     	if expand_v < 0 then | ||||||
|  |   	   Camera.pos.y = Camera.pos.y - expand_v*tileProperties.scale*tileProperties.height | ||||||
|  |     	end | ||||||
|  | 
 | ||||||
|  |     elseif love.keyboard.isDown("lctrl") and not expanded then | ||||||
|  |       expanded = true | ||||||
|  |       ReduceCanvas(math.sign(expand_h),math.sign(expand_v)) | ||||||
|  | 
 | ||||||
|  |       if expand_h < 0 then | ||||||
|  |     	   Camera.pos.x = Camera.pos.x - expand_h*tileProperties.scale*tileProperties.width | ||||||
|  |     	end | ||||||
|  |     	if expand_v < 0 then | ||||||
|  |     		Camera.pos.y = Camera.pos.y - expand_v*tileProperties.scale*tileProperties.height | ||||||
|  |     	end | ||||||
|  |     end | ||||||
|  |   elseif love.mouse.isDown(1) ~= true then | ||||||
|  |     expanded = false | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function DrawSelectingPaletteTile() | ||||||
|  |   if selecting_tile ~= nil then | ||||||
|  | 
 | ||||||
|  |     local mouse_x = tileProperties.width * math.floor((love.mouse.getX()/game.scale) / tileProperties.width) - Camera.pos.x % tileProperties.width | ||||||
|  |     local mouse_y = tileProperties.height * math.floor((love.mouse.getY()/game.scale) / tileProperties.height) - Camera.pos.y % tileProperties.height | ||||||
|  | 
 | ||||||
|  |     love.graphics.draw( | ||||||
|  |   		LevelData.tileset, | ||||||
|  |       TileIndex[selecting_tile], | ||||||
|  |       mouse_x, | ||||||
|  |       mouse_y | ||||||
|  |     ) | ||||||
|  |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
| function EditorDoPalette() | function EditorDoPalette() | ||||||
| 
 | 
 | ||||||
|   local width = LevelData.tileset:getPixelWidth()/tileProperties.width |   local width = LevelData.tileset:getPixelWidth()/tileProperties.width | ||||||
|  | @ -71,17 +158,17 @@ function EditorDoPalette() | ||||||
|       local mouse_x = love.mouse.getX() |       local mouse_x = love.mouse.getX() | ||||||
|     	local mouse_y = love.mouse.getY() |     	local mouse_y = love.mouse.getY() | ||||||
| 
 | 
 | ||||||
|     	if 	mouse_x > tile_x |     	if 	mouse_x > (tile_x) * game.scale | ||||||
|       and mouse_x < tile_x + tileProperties.width + 1 |       and mouse_x < (tile_x + tileProperties.width) * game.scale | ||||||
|       and mouse_y > tile_y |       and mouse_y > (tile_y) * game.scale | ||||||
|       and mouse_y < tile_y + tileProperties.height + 1 |       and mouse_y < (tile_y + tileProperties.height) * game.scale | ||||||
|       then |       then | ||||||
|         selecting_tile = position_x + (position_y * width) |         selecting_tile = position_x + ((position_y-1) * width) | ||||||
| 
 | 
 | ||||||
|         love.graphics.print(selecting_tile .. " | " .. tile_x .. ", " .. tile_y) |         love.graphics.print(selecting_tile .. " | " .. tile_x .. ", " .. tile_y) | ||||||
|       end |  | ||||||
|       else |       else | ||||||
|       selecting_tile = 0 |         --selecting_tile = nil | ||||||
|  |       end | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     if selecting_tile ~= nil and i == selecting_tile then |     if selecting_tile ~= nil and i == selecting_tile then | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ function Arrow:DoPhysics() | ||||||
|       while not isThereObjectAt( |       while not isThereObjectAt( | ||||||
|         self.pos.x + math.sign(self.vel.x), |         self.pos.x + math.sign(self.vel.x), | ||||||
|         self.pos.y, |         self.pos.y, | ||||||
|         objects.collisions |         LoadedObjects.Collisions | ||||||
|       ) do |       ) do | ||||||
|         self.pos.x = self.pos.x + math.sign(self.vel.x) |         self.pos.x = self.pos.x + math.sign(self.vel.x) | ||||||
|       end |       end | ||||||
|  | @ -57,7 +57,7 @@ function Arrow:DoPhysics() | ||||||
|       while not isThereObjectAt( |       while not isThereObjectAt( | ||||||
|         self.pos.x, |         self.pos.x, | ||||||
|         self.pos.y + math.sign(self.vel.y), |         self.pos.y + math.sign(self.vel.y), | ||||||
|         objects.collisions |         LoadedObjects.Collisions | ||||||
|       ) do |       ) do | ||||||
|         self.pos.y = self.pos.y + math.sign(self.vel.y) |         self.pos.y = self.pos.y + math.sign(self.vel.y) | ||||||
|       end |       end | ||||||
|  |  | ||||||
|  | @ -66,10 +66,5 @@ function Fairy:DoPhysics() | ||||||
|   self.vel.x = self.vel.x + random_x |   self.vel.x = self.vel.x + random_x | ||||||
|   self.vel.y = self.vel.y + random_y |   self.vel.y = self.vel.y + random_y | ||||||
|   -- move |   -- move | ||||||
|   if not self:isCollidingAt(self.pos.x + self.vel.x, self.pos.y, objects.collisions) then |   self:CollisionMove() | ||||||
|     self.pos.x = self.pos.x + self.vel.x |  | ||||||
|   end |  | ||||||
|   if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, objects.collisions) then |  | ||||||
|     self.pos.y = self.pos.y + self.vel.y |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -73,10 +73,5 @@ function Particle:HandleAnimation() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function Particle:DoPhysics() | function Particle:DoPhysics() | ||||||
|   if not self:isCollidingAt(self.pos.x + self.vel.x, self.pos.y, objects.collisions) then |   self:Move() | ||||||
|     self.pos.x = self.pos.x + self.vel.x |  | ||||||
|   end |  | ||||||
|   if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, objects.collisions) then |  | ||||||
|     self.pos.y = self.pos.y + self.vel.y |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -144,13 +144,13 @@ function Player:DoPhysics() | ||||||
|     self.vel.y = self.vel.y + gravity |     self.vel.y = self.vel.y + gravity | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   if not self:isCollidingAt(self.pos.x + self.vel.x + self.move_x, self.pos.y, objects.collisions) then |   if not self:isCollidingAt(self.pos.x + self.vel.x + self.move_x, self.pos.y, LoadedObjects.Collisions) then | ||||||
|     self.pos.x = self.pos.x + self.vel.x + self.move_x |     self.pos.x = self.pos.x + self.vel.x + self.move_x | ||||||
|   else |   else | ||||||
|     self.vel.x = 0 |     self.vel.x = 0 | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, objects.collisions) then |   if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, LoadedObjects.Collisions) then | ||||||
|     self.pos.y = self.pos.y + self.vel.y |     self.pos.y = self.pos.y + self.vel.y | ||||||
|   else |   else | ||||||
|     if self.vel.y > 0 then |     if self.vel.y > 0 then | ||||||
|  |  | ||||||
|  | @ -31,6 +31,20 @@ end | ||||||
| function Entity:Smart() | function Entity:Smart() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | function Entity:Move() | ||||||
|  | 	self.pos.x = self.pos.x + self.vel.x | ||||||
|  | 	self.pos.y = self.pos.y + self.vel.y | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function Entity:CollisionMove() | ||||||
|  | 	if not self:isCollidingAt(self.pos.x + self.vel.x, self.pos.y, LoadedObjects.Collisions) then | ||||||
|  | 		self.pos.x = self.pos.x + self.vel.x | ||||||
|  | 	end | ||||||
|  | 	if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, LoadedObjects.Collisions) then | ||||||
|  | 		self.pos.y = self.pos.y + self.vel.y | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
| function Entity:Kill() | function Entity:Kill() | ||||||
| 	if self.light ~= nil then | 	if self.light ~= nil then | ||||||
| 		KillLight(self.light) | 		KillLight(self.light) | ||||||
|  |  | ||||||
|  | @ -17,8 +17,13 @@ end | ||||||
| 
 | 
 | ||||||
| function GameDraw() | function GameDraw() | ||||||
| 
 | 
 | ||||||
|   GameworldDraw() |   GameworldDrawPrepare() | ||||||
|   GameworldLighting() |   GameworldDrawBackground() | ||||||
|  |   GameworldDrawParticles() | ||||||
|  |   GameworldDrawEntities() | ||||||
|  |   GameworldDrawForeground() | ||||||
|  |   GameworldDrawEnd() | ||||||
|  |   GameworldDrawLighting() | ||||||
| 
 | 
 | ||||||
| 	-- hud | 	-- hud | ||||||
| 	textScale = 0.5 | 	textScale = 0.5 | ||||||
|  |  | ||||||
|  | @ -1,28 +1,72 @@ | ||||||
| function GameworldDraw() | function GameworldDrawPrepare() | ||||||
|   -- resize proof |  | ||||||
|   if game_resize then |   if game_resize then | ||||||
|     Camera.height = game.height |     Camera.height = game.height | ||||||
|     Camera.width = game.width |     Camera.width = game.width | ||||||
|   end |   end | ||||||
| 
 |   pcr, pcg, pcb, pca = love.graphics.getColor() | ||||||
|   local pcr, pcg, pcb, pca = love.graphics.getColor() |  | ||||||
| 
 |  | ||||||
| 	love.graphics.scale(game.scale,game.scale) | 	love.graphics.scale(game.scale,game.scale) | ||||||
| 	love.graphics.setColor(1,1,1,1) | 	love.graphics.setColor(1,1,1,1) | ||||||
| 	LevelDisplayBackground() | end | ||||||
| 
 | 
 | ||||||
|  | function GameworldDrawEnd() | ||||||
|  |   love.graphics.setColor(pcr, pcg, pcb, pca) | ||||||
|  |   pcr, pcg, pcb, pca = nil, nil, nil, nil | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function GameworldDrawBackground() | ||||||
|  |   -- obscure a bit | ||||||
|  | 	love.graphics.setColor(0.7,0.7,0.7) | ||||||
|  | 	for i = 1, #LevelTiles do | ||||||
|  | 		for j = 1, #LevelTiles[i] do | ||||||
|  | 			if LevelTiles[i][j].id ~= 0 then | ||||||
|  | 
 | ||||||
|  | 				local depth = TileGetDepth(LevelTiles[i][j]) | ||||||
|  | 				DrawTile( | ||||||
|  | 					LevelTiles[i][j], | ||||||
|  | 					tileProperties.scale * j * tileProperties.width	+ tileProperties.scale * (levelProperties.offset.x - tileProperties.width)	- Camera.pos.x, | ||||||
|  | 					tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, | ||||||
|  | 					"background" | ||||||
|  | 				) | ||||||
|  | 
 | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function GameworldDrawParticles() | ||||||
|  |   love.graphics.setColor(0.7,0.7,0.7) | ||||||
|   for _, particle in pairs(LoadedParticles) do |   for _, particle in pairs(LoadedParticles) do | ||||||
|   	particle:HandleAnimation() |   	particle:HandleAnimation() | ||||||
|   end |   end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function GameworldDrawEntities() | ||||||
|  |   love.graphics.setColor(1,1,1) | ||||||
| 	for _, enty in pairs(LoadedEntities) do | 	for _, enty in pairs(LoadedEntities) do | ||||||
| 		enty:HandleAnimation() | 		enty:HandleAnimation() | ||||||
| 	end | 	end | ||||||
| 	LevelDisplayForeground() |  | ||||||
| 
 |  | ||||||
|   love.graphics.setColor(pcr, pcg, pcb, pca) |  | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function GameworldLighting() | function GameworldDrawForeground() | ||||||
|  |   love.graphics.setColor(1,1,1) | ||||||
|  | 	for i = 1, #LevelTiles do | ||||||
|  | 		for j = 1, #LevelTiles[i] do | ||||||
|  | 			if LevelTiles[i][j].id ~= 0 then | ||||||
|  | 
 | ||||||
|  | 				local depth = TileGetDepth(LevelTiles[i][j]) | ||||||
|  | 				DrawTile( | ||||||
|  | 					LevelTiles[i][j], | ||||||
|  | 					tileProperties.scale * j * tileProperties.width	+ tileProperties.scale * (levelProperties.offset.x - tileProperties.width)	- Camera.pos.x, | ||||||
|  | 					tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, | ||||||
|  | 					"foreground" | ||||||
|  | 				) | ||||||
|  | 
 | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function GameworldDrawLighting() | ||||||
|   if game_resize then |   if game_resize then | ||||||
|     Canvas.Darkness:release() |     Canvas.Darkness:release() | ||||||
|     Canvas.Darkness = CreateDarkness() |     Canvas.Darkness = CreateDarkness() | ||||||
|  |  | ||||||
|  | @ -10,8 +10,13 @@ function LevelLoadTiles() | ||||||
| 		type = collision type | 		type = collision type | ||||||
| 	]] | 	]] | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |   -- Level data | ||||||
| 	LevelData = dofile("Mothback/data/levels/"..currLevel..".lua") | 	LevelData = dofile("Mothback/data/levels/"..currLevel..".lua") | ||||||
| 	Tiles = dofile("Mothback/data/tileset/library.lua") | 
 | ||||||
|  | 	-- tiles data | ||||||
|  | 	TileData = dofile("Mothback/data/tileset/library.lua") | ||||||
|  | 
 | ||||||
| 	LevelTiles = LevelData.tiles | 	LevelTiles = LevelData.tiles | ||||||
| 	LevelData.Width = LevelGetWidth() | 	LevelData.Width = LevelGetWidth() | ||||||
| 	LevelData.Height = LevelGetHeight() | 	LevelData.Height = LevelGetHeight() | ||||||
|  | @ -34,7 +39,7 @@ end | ||||||
| function LevelIndexTiles() | function LevelIndexTiles() | ||||||
| 	TileIndex = {} | 	TileIndex = {} | ||||||
| 
 | 
 | ||||||
| 	-- number of tiles in tileset! | 	-- index from tileset | ||||||
| 	local width = LevelData.tileset:getPixelWidth()/tileProperties.width | 	local width = LevelData.tileset:getPixelWidth()/tileProperties.width | ||||||
| 	local height = LevelData.tileset:getPixelHeight()/tileProperties.height | 	local height = LevelData.tileset:getPixelHeight()/tileProperties.height | ||||||
| 	for i = 0, height do | 	for i = 0, height do | ||||||
|  | @ -49,15 +54,15 @@ function LevelIndexTiles() | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| -- init animated tile properties | 	-- initialize tile data | ||||||
| 	for _, properties in pairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if properties.animation ~= nil then | 		if Properties.animation ~= nil then | ||||||
| 			properties.tileset = love.graphics.newImage("assets/terrain/"..properties.animation..".png") | 			Properties.tileset = love.graphics.newImage("assets/terrain/"..Properties.animation..".png") | ||||||
| 			properties.imgs = {} | 			Properties.imgs = {} | ||||||
| 			properties.current_image = 1 | 			Properties.current_image = 1 | ||||||
| 			properties.current_subimage = 1 | 			Properties.current_subimage = 1 | ||||||
| 
 | 
 | ||||||
| 			local tileset = properties.tileset | 			local tileset = Properties.tileset | ||||||
| 			local width = tileset:getPixelWidth()/tileProperties.width | 			local width = tileset:getPixelWidth()/tileProperties.width | ||||||
| 			local height = tileset:getPixelHeight()/tileProperties.height | 			local height = tileset:getPixelHeight()/tileProperties.height | ||||||
| 			local image_count = 0 | 			local image_count = 0 | ||||||
|  | @ -74,14 +79,14 @@ function LevelIndexTiles() | ||||||
| 						) | 						) | ||||||
| 					image_count = image_count + 1 | 					image_count = image_count + 1 | ||||||
| 
 | 
 | ||||||
| 					table.insert(properties.imgs,quad) | 					table.insert(Properties.imgs,quad) | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
| 			properties.image_count = image_count | 			Properties.image_count = image_count | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| -- instance level tiles according to the properties | -- instance level tiles according to the Properties | ||||||
| 	for i = 1, #LevelTiles do | 	for i = 1, #LevelTiles do | ||||||
| 		for j = 1, #LevelTiles[i] do | 		for j = 1, #LevelTiles[i] do | ||||||
| 			local id = LevelTiles[i][j] | 			local id = LevelTiles[i][j] | ||||||
|  | @ -89,18 +94,18 @@ function LevelIndexTiles() | ||||||
| 			local tile = LevelTiles[i][j] | 			local tile = LevelTiles[i][j] | ||||||
| 			tile.id = id | 			tile.id = id | ||||||
| 
 | 
 | ||||||
| 			for _, properties in pairs(Tiles) do | 			for _, Properties in pairs(TileData) do | ||||||
| 				if properties.id == tile.id then | 				if Properties.id == tile.id then | ||||||
| 					if type(properties.overlay) == "table" then | 					if type(Properties.overlay) == "table" then | ||||||
| 						tile.display_overlay = properties.overlay[math.random(#properties.overlay)] | 						tile.display_overlay = Properties.overlay[math.random(#Properties.overlay)] | ||||||
| 					else | 					else | ||||||
| 						tile.display_overlay = properties.overlay | 						tile.display_overlay = Properties.overlay | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
| 					if type(properties.force) == "table" then | 					if type(Properties.force) == "table" then | ||||||
| 						tile.display = properties.force[math.random(#properties.force)] | 						tile.display = Properties.force[math.random(#Properties.force)] | ||||||
| 					else | 					else | ||||||
| 						tile.display = properties.force | 						tile.display = Properties.force | ||||||
| 					end | 					end | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
|  | @ -109,64 +114,26 @@ function LevelIndexTiles() | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function LevelDisplayForeground() |  | ||||||
| 	for i = 1, #LevelTiles do |  | ||||||
| 		for j = 1, #LevelTiles[i] do |  | ||||||
| 			if LevelTiles[i][j].id ~= 0 then |  | ||||||
| 
 |  | ||||||
| 				local depth = TileGetDepth(LevelTiles[i][j]) |  | ||||||
| 				DrawTile( |  | ||||||
| 					LevelTiles[i][j], |  | ||||||
| 					tileProperties.scale * j * tileProperties.width	+ tileProperties.scale * (levelProperties.offset.x - tileProperties.width)	- Camera.pos.x, |  | ||||||
| 					tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, |  | ||||||
| 					"foreground" |  | ||||||
| 				) |  | ||||||
| 
 |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function LevelDisplayBackground() |  | ||||||
| 	love.graphics.setColor(0.7,0.7,0.7) |  | ||||||
| 	for i = 1, #LevelTiles do |  | ||||||
| 		for j = 1, #LevelTiles[i] do |  | ||||||
| 			if LevelTiles[i][j].id ~= 0 then |  | ||||||
| 
 |  | ||||||
| 				local depth = TileGetDepth(LevelTiles[i][j]) |  | ||||||
| 				DrawTile( |  | ||||||
| 					LevelTiles[i][j], |  | ||||||
| 					tileProperties.scale * j * tileProperties.width	+ tileProperties.scale * (levelProperties.offset.x - tileProperties.width)	- Camera.pos.x, |  | ||||||
| 					tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, |  | ||||||
| 					"background" |  | ||||||
| 				) |  | ||||||
| 
 |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end |  | ||||||
| 		love.graphics.setColor(1,1,1) |  | ||||||
| end |  | ||||||
| 
 |  | ||||||
| function TileGetType(tile) | function TileGetType(tile) | ||||||
| 	for _, properties in ipairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if properties.id == tile.id then | 		if Properties.id == tile.id then | ||||||
| 			return properties.type | 			return Properties.type | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function TileGetDepth(tile) | function TileGetDepth(tile) | ||||||
| 	for _, properties in ipairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if properties.id == tile.id then | 		if Properties.id == tile.id then | ||||||
| 			return properties.depth | 			return Properties.depth | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function TileGetLight(tile) | function TileGetLight(tile) | ||||||
| 	for _, properties in ipairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if properties.id == tile.id then | 		if Properties.id == tile.id then | ||||||
| 			return properties.light | 			return Properties.light | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  | @ -176,8 +143,8 @@ function GridDisplay() | ||||||
| 		for j = 1, #LevelTiles[i] do | 		for j = 1, #LevelTiles[i] do | ||||||
| 			love.graphics.rectangle( | 			love.graphics.rectangle( | ||||||
| 				"line", | 				"line", | ||||||
| 				tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.width) - Camera.pos.x, | 				tileProperties.scale * (j * tileProperties.width + (levelProperties.offset.x - tileProperties.width)) - Camera.pos.x, | ||||||
| 				tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, | 				tileProperties.scale * (i * tileProperties.height + (levelProperties.offset.y - tileProperties.height)) - Camera.pos.y, | ||||||
| 				tileProperties.scale * tileProperties.width, | 				tileProperties.scale * tileProperties.width, | ||||||
| 				tileProperties.scale * tileProperties.height | 				tileProperties.scale * tileProperties.height | ||||||
| 			) | 			) | ||||||
|  | @ -186,9 +153,9 @@ function GridDisplay() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function TileCreateObjects() | function TileCreateObjects() | ||||||
| 	objects.collisions = {} | 	LoadedObjects.Collisions = {} | ||||||
| 	objects.platforms = {} | 	LoadedObjects.Platforms = {} | ||||||
| 	objects.ladders = {} | 	LoadedObjects.Ladders = {} | ||||||
| 
 | 
 | ||||||
| 	for i = 1, #LevelTiles do | 	for i = 1, #LevelTiles do | ||||||
| 		for j = 1, #LevelTiles[i] do | 		for j = 1, #LevelTiles[i] do | ||||||
|  | @ -215,7 +182,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "half_bottom" then | 				elseif type == "half_bottom" then | ||||||
| 
 | 
 | ||||||
|  | @ -225,7 +192,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "half_top" then | 				elseif type == "half_top" then | ||||||
| 
 | 
 | ||||||
|  | @ -235,7 +202,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/2 * tileProperties.scale | 						base_y + tileProperties.height/2 * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "half_right" then | 				elseif type == "half_right" then | ||||||
| 
 | 
 | ||||||
|  | @ -245,7 +212,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "half_left" then | 				elseif type == "half_left" then | ||||||
| 
 | 
 | ||||||
|  | @ -255,7 +222,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.height/2 * tileProperties.scale, | 						base_x + tileProperties.height/2 * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "platform" then | 				elseif type == "platform" then | ||||||
| 					local plat = Collision:New( | 					local plat = Collision:New( | ||||||
|  | @ -264,7 +231,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.platforms,plat) | 					table.insert(LoadedObjects.Platforms,plat) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ramp2_bot_left_whole" then | 				elseif type == "ramp2_bot_left_whole" then | ||||||
| 					for k = 1, 8 do | 					for k = 1, 8 do | ||||||
|  | @ -275,7 +242,7 @@ function TileCreateObjects() | ||||||
| 							base_x + k * 2 * tileProperties.scale, | 							base_x + k * 2 * tileProperties.scale, | ||||||
| 							base_y + k * tileProperties.scale | 							base_y + k * tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 					-- fill lower half | 					-- fill lower half | ||||||
|  | @ -285,7 +252,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ramp2_bot_left_half" then | 				elseif type == "ramp2_bot_left_half" then | ||||||
| 					for k = 1, 8 do | 					for k = 1, 8 do | ||||||
|  | @ -296,7 +263,7 @@ function TileCreateObjects() | ||||||
| 							base_x + k * 2 * tileProperties.scale, | 							base_x + k * 2 * tileProperties.scale, | ||||||
| 							base_y + tileProperties.height/2 * tileProperties.scale + k * tileProperties.scale | 							base_y + tileProperties.height/2 * tileProperties.scale + k * tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
|  | @ -309,7 +276,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, | ||||||
| 							base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | 							base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 					-- fill higher half | 					-- fill higher half | ||||||
|  | @ -319,7 +286,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/2 * tileProperties.scale | 						base_y + tileProperties.height/2 * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ramp2_top_left_half" then | 				elseif type == "ramp2_top_left_half" then | ||||||
| 					for k = 1, 8 do | 					for k = 1, 8 do | ||||||
|  | @ -330,7 +297,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, | ||||||
| 							base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | 							base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
|  | @ -343,7 +310,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale, | ||||||
| 							base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | 							base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 					-- fill lower half | 					-- fill lower half | ||||||
|  | @ -353,7 +320,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ramp2_bot_right_half" then | 				elseif type == "ramp2_bot_right_half" then | ||||||
| 					for k = 1, 8 do | 					for k = 1, 8 do | ||||||
|  | @ -364,7 +331,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale, | ||||||
| 							base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | 							base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
|  | @ -377,7 +344,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale, | ||||||
| 							base_y + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale | 							base_y + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
|  | @ -390,7 +357,7 @@ function TileCreateObjects() | ||||||
| 							base_x + tileProperties.width * tileProperties.scale, | 							base_x + tileProperties.width * tileProperties.scale, | ||||||
| 							base_y + tileProperties.height/2 * tileProperties.scale + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale | 							base_y + tileProperties.height/2 * tileProperties.scale + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 					-- fill higher half | 					-- fill higher half | ||||||
|  | @ -400,7 +367,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/2 * tileProperties.scale | 						base_y + tileProperties.height/2 * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.collisions,col) | 					table.insert(LoadedObjects.Collisions,col) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ramp1_bot_left" then | 				elseif type == "ramp1_bot_left" then | ||||||
| 
 | 
 | ||||||
|  | @ -412,7 +379,7 @@ function TileCreateObjects() | ||||||
| 							base_x + k * tileProperties.scale, | 							base_x + k * tileProperties.scale, | ||||||
| 							base_y + k * tileProperties.scale | 							base_y + k * tileProperties.scale | ||||||
| 						) | 						) | ||||||
| 						table.insert(objects.collisions,slope) | 						table.insert(LoadedObjects.Collisions,slope) | ||||||
| 
 | 
 | ||||||
| 					end | 					end | ||||||
| 
 | 
 | ||||||
|  | @ -424,7 +391,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.ladders,ladder) | 					table.insert(LoadedObjects.Ladders,ladder) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ladder_platform_right" then | 				elseif type == "ladder_platform_right" then | ||||||
| 
 | 
 | ||||||
|  | @ -434,7 +401,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.ladders,ladder) | 					table.insert(LoadedObjects.Ladders,ladder) | ||||||
| 
 | 
 | ||||||
| 					local plat = Collision:New( | 					local plat = Collision:New( | ||||||
| 						base_x, | 						base_x, | ||||||
|  | @ -442,7 +409,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.platforms,plat) | 					table.insert(LoadedObjects.Platforms,plat) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ladder_left" then | 				elseif type == "ladder_left" then | ||||||
| 
 | 
 | ||||||
|  | @ -453,7 +420,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.scale * 4, | 						base_x + tileProperties.scale * 4, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.ladders,ladder) | 					table.insert(LoadedObjects.Ladders,ladder) | ||||||
| 
 | 
 | ||||||
| 				elseif type == "ladder_platform_left" then | 				elseif type == "ladder_platform_left" then | ||||||
| 
 | 
 | ||||||
|  | @ -464,7 +431,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.scale * 4, | 						base_x + tileProperties.scale * 4, | ||||||
| 						base_y + tileProperties.height * tileProperties.scale | 						base_y + tileProperties.height * tileProperties.scale | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.ladders,ladder) | 					table.insert(LoadedObjects.Ladders,ladder) | ||||||
| 
 | 
 | ||||||
| 					local plat = Collision:New( | 					local plat = Collision:New( | ||||||
| 						base_x, | 						base_x, | ||||||
|  | @ -472,7 +439,7 @@ function TileCreateObjects() | ||||||
| 						base_x + tileProperties.width * tileProperties.scale, | 						base_x + tileProperties.width * tileProperties.scale, | ||||||
| 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | 						base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 | ||||||
| 					) | 					) | ||||||
| 					table.insert(objects.platforms,plat) | 					table.insert(LoadedObjects.Platforms,plat) | ||||||
| 
 | 
 | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
|  | @ -481,42 +448,42 @@ function TileCreateObjects() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function AnimateTiles() | function AnimateTiles() | ||||||
| 	for _, properties in pairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if properties.animation ~= nil then | 		if Properties.animation ~= nil then | ||||||
| 		-- calculate subimage | 		-- calculate subimage | ||||||
| 			properties.current_subimage = properties.current_subimage + current_dt | 			Properties.current_subimage = Properties.current_subimage + current_dt | ||||||
| 			-- cycle image | 			-- cycle image | ||||||
| 			if properties.current_subimage >= properties.delay then | 			if Properties.current_subimage >= Properties.delay then | ||||||
| 				properties.current_subimage = properties.current_subimage - properties.delay | 				Properties.current_subimage = Properties.current_subimage - Properties.delay | ||||||
| 				properties.current_image = properties.current_image + 1 | 				Properties.current_image = Properties.current_image + 1 | ||||||
| 			end | 			end | ||||||
| 
 | 
 | ||||||
| 			if properties.current_image > properties.image_count then | 			if Properties.current_image > Properties.image_count then | ||||||
| 				properties.current_image = properties.current_image - properties.image_count | 				Properties.current_image = Properties.current_image - Properties.image_count | ||||||
| 			end | 			end | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function DrawTile(tile,x,y,depth) | function DrawTile(tile,x,y,depth) | ||||||
| 	for _, properties in pairs(Tiles) do | 	for _, Properties in pairs(TileData) do | ||||||
| 		if tile.id == properties.id then | 		if tile.id == Properties.id then | ||||||
| 
 | 
 | ||||||
| 			if properties.animation ~= nil then | 			if Properties.animation ~= nil then | ||||||
| 				if properties.imgs[properties.current_image] ~= nil | 				if Properties.imgs[Properties.current_image] ~= nil | ||||||
| 				and properties.depth == depth | 				and Properties.depth == depth | ||||||
| 				then love.graphics.draw( | 				then love.graphics.draw( | ||||||
| 					properties.tileset, | 					Properties.tileset, | ||||||
| 					properties.imgs[properties.current_image], | 					Properties.imgs[Properties.current_image], | ||||||
| 					x, | 					x, | ||||||
| 					y, | 					y, | ||||||
| 					0, | 					0, | ||||||
| 					tileProperties.scale, | 					tileProperties.scale, | ||||||
| 					tileProperties.scale | 					tileProperties.scale | ||||||
| 				)	end | 				)	end | ||||||
| 			elseif properties.depth == depth then | 			elseif Properties.depth == depth then | ||||||
| 				if properties.force ~= nil then | 				if Properties.force ~= nil then | ||||||
| 					if properties.force ~= 0 then | 					if Properties.force ~= 0 then | ||||||
| 					love.graphics.draw( | 					love.graphics.draw( | ||||||
| 						LevelData.tileset, | 						LevelData.tileset, | ||||||
| 						TileIndex[tile.display], | 						TileIndex[tile.display], | ||||||
|  | @ -530,7 +497,7 @@ function DrawTile(tile,x,y,depth) | ||||||
| 				else | 				else | ||||||
| 					love.graphics.draw( | 					love.graphics.draw( | ||||||
| 						LevelData.tileset, | 						LevelData.tileset, | ||||||
| 						TileIndex[properties.id], | 						TileIndex[Properties.id], | ||||||
| 						x, | 						x, | ||||||
| 						y, | 						y, | ||||||
| 						0, | 						0, | ||||||
|  | @ -540,11 +507,11 @@ function DrawTile(tile,x,y,depth) | ||||||
| 				end | 				end | ||||||
| 			end | 			end | ||||||
| 
 | 
 | ||||||
| 			if properties.overlay ~= nil then | 			if Properties.overlay ~= nil then | ||||||
| 				if properties.overlay_depth == depth or properties.overlay_depth == nil and properties.depth == depth then | 				if Properties.overlay_depth == depth or Properties.overlay_depth == nil and Properties.depth == depth then | ||||||
| 					if properties.overlay_animated then | 					if Properties.overlay_animated then | ||||||
| 						for _, overlay_properties in pairs(Tiles) do | 						for _, overlay_properties in pairs(TileData) do | ||||||
| 							if overlay_properties.id == properties.overlay then | 							if overlay_properties.id == Properties.overlay then | ||||||
| 								love.graphics.draw( | 								love.graphics.draw( | ||||||
| 									overlay_properties.tileset, | 									overlay_properties.tileset, | ||||||
| 									overlay_properties.imgs[overlay_properties.current_image], | 									overlay_properties.imgs[overlay_properties.current_image], | ||||||
|  |  | ||||||
|  | @ -1,23 +1,23 @@ | ||||||
| objects = { | LoadedObjects = { | ||||||
| 	entities = {}, | 	Entities = {}, | ||||||
| 
 | 
 | ||||||
| 	collisions = {}, | 	Collisions = {}, | ||||||
| 	platforms = {}, | 	Platforms = {}, | ||||||
| 	ladders = {} | 	Ladders = {} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| -- level functions | -- level functions | ||||||
| function objects.DrawCollisions() | function LoadedObjects.DrawCollisions() | ||||||
| 	for _, col in pairs(objects.collisions) do | 	for _, collision in pairs(LoadedObjects.Collisions) do | ||||||
| 		col:Draw(1) | 		collision:Draw(1) | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| 	for _, plat in pairs(objects.platforms) do | 	for _, platform in pairs(LoadedObjects.Platforms) do | ||||||
| 		if plat.disable == true  then plat:Draw(2) end | 		if platform.disable == true  then platform:Draw(2) end | ||||||
| 		if plat.disable == false then plat:Draw(1) end | 		if platform.disable == false then platform:Draw(1) end | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| 	for _, ladder in pairs(objects.ladders) do | 	for _, ladder in pairs(LoadedObjects.Ladders) do | ||||||
| 		ladder:Draw(2) | 		ladder:Draw(2) | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  | @ -25,48 +25,38 @@ end | ||||||
| -- returns true if theres a collision at that point. also marks collisioned tile as collision true | -- returns true if theres a collision at that point. also marks collisioned tile as collision true | ||||||
| function isThereObjectAt(x,y,objectType) | function isThereObjectAt(x,y,objectType) | ||||||
| 	local result = false | 	local result = false | ||||||
| 	for _, col in pairs(objectType) do | 	for _, collision in pairs(objectType) do | ||||||
| 		if  x >= col.from.x | 		if  x >= collision.from.x | ||||||
| 		and x <= col.to.x | 		and x <= collision.to.x | ||||||
| 		and y >= col.from.y | 		and y >= collision.from.y | ||||||
| 		and y <= col.to.y | 		and y <= collision.to.y | ||||||
| 		and col.disable ~= true then | 		and collision.disable ~= true then | ||||||
| 			result = true | 			result = true | ||||||
| 			col.collision = true | 			collision.collision = true | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| 	return result | 	return result | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function isThereAnyCollisionAt(x,y) | function isThereAnyCollisionAt(x,y) | ||||||
| 	local result = false |   return isThereObjectAt(x,y,LoadedObjects.Collisions) or isThereObjectAt(x,y,LoadedObjects.Ladders) or isThereObjectAt(x,y,LoadedObjects.Platforms) | ||||||
|   if not result then |  | ||||||
| 		result = isThereObjectAt(x,y,objects.collisions) |  | ||||||
| 	end |  | ||||||
| 	if not result then |  | ||||||
| 		result = isThereObjectAt(x,y,objects.ladders) |  | ||||||
|  	end |  | ||||||
|  	if not result then |  | ||||||
| 		result = isThereObjectAt(x,y,objects.platforms) |  | ||||||
| 	end |  | ||||||
|  	return result |  | ||||||
| end | end | ||||||
| -- flags | -- flags | ||||||
| function SetCollisionFlags(player) | function SetCollisionFlags(player) | ||||||
| 	for _, col in pairs(objects.collisions) do | 	for _, collision in pairs(LoadedObjects.Collisions) do | ||||||
| 		col.collision = false | 		collision.collision = false | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| 	for _, plat in pairs(objects.platforms) do | 	for _, platform in pairs(LoadedObjects.Platforms) do | ||||||
| 		plat.collision = false | 		platform.collision = false | ||||||
| 		if player.pos.y < plat.from.y then | 		if player.pos.y < platform.from.y then | ||||||
| 			plat.disable = false | 			platform.disable = false | ||||||
| 		else | 		else | ||||||
| 			plat.disable = true | 			platform.disable = true | ||||||
| 		end | 		end | ||||||
| 	end | 	end | ||||||
| 
 | 
 | ||||||
| 	for _, ladder in pairs(objects.ladders) do | 	for _, ladder in pairs(LoadedObjects.Ladders) do | ||||||
| 		ladder.collision = false | 		ladder.collision = false | ||||||
| 	end | 	end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -0,0 +1,82 @@ | ||||||
|  | Particle = Entity:New(x,y) | ||||||
|  | 
 | ||||||
|  |  function Particle:New(x,y,particle_data) | ||||||
|  |  	local o = Entity:New(x,y) | ||||||
|  | 
 | ||||||
|  |  	o.pos = {x = x, y = y} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   o.speed = particle_data.speed or 0 | ||||||
|  |   o.direction = particle_data.direction or o.direction | ||||||
|  |   o.sprite_rotation = particle_data.sprite_rotation or o.sprite_rotation | ||||||
|  |   o.sprite_offset = particle_data.sprite_offset or o.sprite_offset | ||||||
|  |   o.sprite_scale = particle_data.sprite_scale or o.sprite_scale | ||||||
|  |   o.sprite_tint = particle_data.sprite_tint or o.sprite_tint | ||||||
|  |   o.sprite_alpha = particle_data.sprite_alpha or o.sprite_alpha | ||||||
|  |   o.sprite_alpha_base = o.sprite_alpha | ||||||
|  | 
 | ||||||
|  |   o.sprite_flip = particle_data.sprite_flip or o.sprite_flip | ||||||
|  |   o.animation_active = particle_data.animation_active or false | ||||||
|  | 
 | ||||||
|  |   o.time = 0.5 | ||||||
|  |   o.timer = 0 | ||||||
|  | 
 | ||||||
|  |   o.vel = { | ||||||
|  |     x = o.speed * math.cos(o.direction), | ||||||
|  |     y = o.speed * math.sin(o.direction) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if particle_data.light ~= nil then | ||||||
|  |     o.lightRange = particle_data.light | ||||||
|  |     o.light = CreateLight(o.pos.x,o.pos.y,o.lightRange) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   -- animations | ||||||
|  |   o.body = Animation:New(particle_data.animation) | ||||||
|  |   o:centerOffset(o.body) | ||||||
|  |   if not o.animation_active then | ||||||
|  |     o.body.speed = 0 | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   table.insert(LoadedParticles,o) | ||||||
|  |   o.id = #LoadedParticles | ||||||
|  | 
 | ||||||
|  |  	setmetatable(o, self) | ||||||
|  |  	self.__index = self | ||||||
|  |  	return o | ||||||
|  |  end | ||||||
|  | 
 | ||||||
|  | function Particle:Kill() | ||||||
|  | 	if self.light ~= nil then | ||||||
|  | 		KillLight(self.light) | ||||||
|  | 	end | ||||||
|  | 	if self.id ~= nil then | ||||||
|  | 		for _, e in pairs(LoadedParticles) do | ||||||
|  | 			if e.id > self.id then | ||||||
|  | 				e.id = e.id - 1 | ||||||
|  | 			end | ||||||
|  | 		end | ||||||
|  | 		table.remove(LoadedParticles,self.id) | ||||||
|  | 	end | ||||||
|  | 	self = nil | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function Particle:HandleAnimation() | ||||||
|  |   self.body:Animate() | ||||||
|  |   self.timer = self.timer + current_dt | ||||||
|  |   self.sprite_alpha = self.sprite_alpha_base*(self.time-self.timer)/self.time | ||||||
|  |   if self.light ~= nil then | ||||||
|  |     self.light.range = self.lightRange * self.sprite_alpha/2 | ||||||
|  |   end | ||||||
|  |   if self.sprite_alpha < 0 then self:Kill() end | ||||||
|  |   self:Draw(self.body) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | function Particle:DoPhysics() | ||||||
|  |   if not self:isCollidingAt(self.pos.x + self.vel.x, self.pos.y, objects.collisions) then | ||||||
|  |     self.pos.x = self.pos.x + self.vel.x | ||||||
|  |   end | ||||||
|  |   if not self:isCollidingAt(self.pos.x, self.pos.y + self.vel.y, objects.collisions) then | ||||||
|  |     self.pos.y = self.pos.y + self.vel.y | ||||||
|  |   end | ||||||
|  | end | ||||||
		Loading…
	
		Reference in New Issue