From 99f0323635d9b1419081e8f50c79840bc158d191 Mon Sep 17 00:00:00 2001 From: Simon Kellet Date: Sun, 14 Jul 2024 20:56:04 +0100 Subject: [PATCH] making menu and subfolders --- DrawGame.lua => Game/DrawGame.lua | 6 +- KeyPressed.lua => Game/GameKeyPressed.lua | 2 +- UpdateGame.lua => Game/UpdateGame.lua | 0 Menu/DrawMenu.lua | 10 + Menu/MenuKeyPressed.lua | 10 + Menu/UpdateMenu.lua | 2 + bullet.lua | 38 +- game.love | Bin 45901 -> 94895 bytes main.lua | 53 +- maps/map.tmx | 6 +- maps/map1.lua | 1023 +++++++++++++++++++++ mapsloader.lua | 24 + player.lua | 10 +- 13 files changed, 1152 insertions(+), 32 deletions(-) rename DrawGame.lua => Game/DrawGame.lua (92%) rename KeyPressed.lua => Game/GameKeyPressed.lua (83%) rename UpdateGame.lua => Game/UpdateGame.lua (100%) create mode 100644 Menu/DrawMenu.lua create mode 100644 Menu/MenuKeyPressed.lua create mode 100644 Menu/UpdateMenu.lua create mode 100644 maps/map1.lua create mode 100644 mapsloader.lua diff --git a/DrawGame.lua b/Game/DrawGame.lua similarity index 92% rename from DrawGame.lua rename to Game/DrawGame.lua index d4f3e39..45cb9fd 100644 --- a/DrawGame.lua +++ b/Game/DrawGame.lua @@ -1,10 +1,10 @@ -function drawFPS() +local function drawFPS() love.graphics.setColor(1, 1, 1) -- RGB values for white are (1, 1, 1) love.graphics.setFont(DebugFont) love.graphics.print("FPS: " .. love.timer.getFPS(), 1520, 10) end -function drawHealth() +local function drawHealth() love.graphics.setFont(GameFont) local height = love.graphics.getHeight() local width = love.graphics.getWidth() @@ -15,6 +15,7 @@ end function DrawGame() --STI GameMap:draw() + -- WindField if DebugFlag then World:draw() @@ -27,6 +28,7 @@ function DrawGame() for _, v in ipairs(Bullets2) do v:draw() end + UserPlayer1:draw() UserPlayer2:draw() diff --git a/KeyPressed.lua b/Game/GameKeyPressed.lua similarity index 83% rename from KeyPressed.lua rename to Game/GameKeyPressed.lua index ccfd937..41194db 100644 --- a/KeyPressed.lua +++ b/Game/GameKeyPressed.lua @@ -1,4 +1,4 @@ -function KeyPressed(key) +function GameKeyPressed(key) if key == "escape" then love.event.quit() end diff --git a/UpdateGame.lua b/Game/UpdateGame.lua similarity index 100% rename from UpdateGame.lua rename to Game/UpdateGame.lua diff --git a/Menu/DrawMenu.lua b/Menu/DrawMenu.lua new file mode 100644 index 0000000..b2db24f --- /dev/null +++ b/Menu/DrawMenu.lua @@ -0,0 +1,10 @@ +function DrawMenu() + love.graphics.setFont(GameFont) + local height = love.graphics.getHeight() + local width = love.graphics.getWidth() + love.graphics.setColor(1,1,1) + love.graphics.rectangle("fill", 0, 0, width, height) + love.graphics.setColor(0,0,0) + love.graphics.print("MENU", 100,100) + +end \ No newline at end of file diff --git a/Menu/MenuKeyPressed.lua b/Menu/MenuKeyPressed.lua new file mode 100644 index 0000000..194f8e7 --- /dev/null +++ b/Menu/MenuKeyPressed.lua @@ -0,0 +1,10 @@ +function MenuKeyPressed(key) + if key == "escape" then + love.event.quit() + end + + if key == "space" then + --Change state to GAME! + GAMESTATE = "GAME" + end +end diff --git a/Menu/UpdateMenu.lua b/Menu/UpdateMenu.lua new file mode 100644 index 0000000..aa993fb --- /dev/null +++ b/Menu/UpdateMenu.lua @@ -0,0 +1,2 @@ +function UpdateMenu(dt) +end \ No newline at end of file diff --git a/bullet.lua b/bullet.lua index 049ecff..81f9da7 100644 --- a/bullet.lua +++ b/bullet.lua @@ -1,6 +1,7 @@ Bullet = Object:extend() cos = math.cos sin = math.sin --optimisation +pi = math.pi function Bullet:new(x, y, p, speed, rotation) self.image = love.graphics.newImage("assets/bullet.png") @@ -19,43 +20,44 @@ function Bullet:new(x, y, p, speed, rotation) self.originY = self.height / 2 self.collider = World:newCircleCollider(x, y, 10) + self.collider:setFixedRotation(true) self.collider:setPosition(self.x, self.y) -end - -function Bullet:update(dt) - --New bullets are set to New Collision Class - --this is to make sure the bullet doesn't collide with the player that shot it - if self.p == 1 or self.p == 2 then - self.collider:setCollisionClass("New") - end if self.p == 1 then self.collider:setCollisionClass("Bullet1") elseif self.p == 2 then self.collider:setCollisionClass("Bullet2") end +end +function Bullet:update(dt) + --If a bullet hits a wall, make it bounce off the wall and change its rotation if self.p == 1 then - local dx = cos(self.rotation) * self.speed * dt - local dy = sin(self.rotation) * self.speed * dt - self.collider:setLinearVelocity(dx, dy) - self.x = self.collider:getX() - self.y = self.collider:getY() - - --If a bullet hits a wall, make it bounce off the wall and change its rotation if self.collider:enter("Wall") then - self.rotation = self.rotation + math.pi + --calculate normal of the wall + --calculate the angle of reflection + local angle = (math.atan2(dx, dy)) + --get normal of the wall without using getNormal() + + ----TODO: fix this + + --set the new angle + self.rotation = angle self.collider:setAngle(self.rotation) end + dx = cos(self.rotation) * self.speed * dt + dy = sin(self.rotation) * self.speed * dt + self.collider:setLinearVelocity(dx, dy) end if self.p == 2 then local dx = cos(self.rotation) * self.speed * dt local dy = sin(self.rotation) * self.speed * dt self.collider:setLinearVelocity(dx, dy) - self.x = self.collider:getX() - self.y = self.collider:getY() end + + self.x = self.collider:getX() + self.y = self.collider:getY() end function Bullet:draw() diff --git a/game.love b/game.love index 31fb1f803d759f48ec495ac86418c5426b7dc36d..910bff435b3487fc6539c0285136e297e73bb004 100644 GIT binary patch delta 52558 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 t%BxBxjwXo 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 delta 4306 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 O@Gpx70E+MI{rew`RVya| diff --git a/main.lua b/main.lua index 79c072d..5d30b08 100644 --- a/main.lua +++ b/main.lua @@ -1,13 +1,22 @@ +GAMESTATE = "MENU" + function love.load() Object = require("classic") require("player") require("bullet") + require("menu") WF = require("libs/windfield") STI = require("libs/sti") require("UpdateGame") + require("UpdateMenu") + require("DrawGame") - require("KeyPressed") + require("DrawMenu") + + require("GameKeyPressed") + require("MenuKeyPressed") + require("mapsloader") --WindField World = WF.newWorld(0, 0) --no gravity @@ -21,7 +30,8 @@ function love.load() World:addCollisionClass("Wall") World:addCollisionClass("New") -- Used to make sure the bullet doesn't collide with the player that shot it - --STI + --STI Map + --Making the map have collision GameMap = STI("maps/map.lua") Walls = {} if GameMap.layers["Walls"] then @@ -38,8 +48,10 @@ function love.load() DebugFont = love.graphics.newFont("assets/Daydream.ttf", 12) love.graphics.setFont(GameFont) + --Game consts HEALTH = 3 DELAY = 0.5 + MAX = 6 --MAX number of bullets DebugFlag = false EnableKeyPress1 = true KeyPressTime1 = 0 @@ -56,18 +68,41 @@ function love.load() end function love.keypressed(key) - KeyPressed(key) + + if GAMESTATE == "MENU" then + MenuKeyPressed(key) + end + + if GAMESTATE == "GAME" then + GameKeyPressed(key) + end + end function love.update(dt) - UpdateGame(dt) + if GAMESTATE == "MENU" then + UpdateMenu(dt) + end + + if GAMESTATE == "GAME" then + UpdateGame(dt) + end end function love.draw() - DrawGame() - if DebugFlag then - love.graphics.setFont(DebugFont) - love.graphics.print("Debug Mode", 1200, 850) - --love.graphics.print(love.report or "Please wait...") + + --TODO: SWITCH/CASE this! + if GAMESTATE == "MENU" then + DrawMenu() end + + if GAMESTATE == "GAME" then + DrawGame() + if DebugFlag then + love.graphics.setFont(DebugFont) + love.graphics.print("Debug Mode", 1200, 850) + --love.graphics.print(love.report or "Please wait...") + end + end + end diff --git a/maps/map.tmx b/maps/map.tmx index 249f953..c566b29 100644 --- a/maps/map.tmx +++ b/maps/map.tmx @@ -1,5 +1,5 @@ - + @@ -54,5 +54,9 @@ + + + + diff --git a/maps/map1.lua b/maps/map1.lua new file mode 100644 index 0000000..b0b9a47 --- /dev/null +++ b/maps/map1.lua @@ -0,0 +1,1023 @@ +return { + version = "1.10", + luaversion = "5.1", + tiledversion = "1.10.2", + class = "", + orientation = "orthogonal", + renderorder = "right-down", + width = 25, + height = 15, + tilewidth = 64, + tileheight = 64, + nextlayerid = 5, + nextobjectid = 36, + properties = {}, + tilesets = { + { + name = "floor-tiles", + firstgid = 1, + class = "", + tilewidth = 64, + tileheight = 64, + spacing = 0, + margin = 0, + columns = 9, + image = "../assets/tileset.png", + imagewidth = 576, + imageheight = 384, + objectalignment = "unspecified", + tilerendersize = "tile", + fillmode = "stretch", + tileoffset = { + x = 0, + y = 0, + }, + grid = { + orientation = "orthogonal", + width = 64, + height = 64, + }, + properties = {}, + wangsets = {}, + tilecount = 54, + tiles = {}, + }, + }, + layers = { + { + type = "tilelayer", + x = 0, + y = 0, + width = 25, + height = 15, + id = 1, + name = "Floor + Outer Walls", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 6, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 13, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 15, + 22, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 23, + 24, + }, + }, + { + type = "tilelayer", + x = 0, + y = 0, + width = 25, + height = 15, + id = 2, + name = "Inner Walls", + class = "", + visible = true, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + encoding = "lua", + data = { + 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, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 8, + 8, + 8, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 26, + 26, + 26, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 27, + 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, + 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, + 7, + 8, + 9, + 0, + 0, + 7, + 8, + 8, + 8, + 8, + 8, + 9, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 8, + 17, + 17, + 18, + 0, + 0, + 16, + 17, + 17, + 17, + 17, + 17, + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 17, + 17, + 26, + 26, + 8, + 8, + 17, + 26, + 26, + 26, + 26, + 26, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 17, + 18, + 0, + 0, + 16, + 17, + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 17, + 18, + 0, + 0, + 25, + 26, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 8, + 8, + 8, + 9, + 0, + 0, + 0, + 0, + 16, + 17, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7, + 8, + 9, + 0, + 0, + 0, + 16, + 17, + 17, + 17, + 18, + 0, + 0, + 0, + 0, + 25, + 27, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 17, + 18, + 0, + 0, + 0, + 16, + 17, + 17, + 17, + 18, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25, + 26, + 27, + 0, + 0, + 0, + 25, + 26, + 26, + 26, + 27, + 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, + }, + }, + { + type = "objectgroup", + draworder = "topdown", + id = 4, + name = "Walls", + class = "", + visible = false, + opacity = 1, + offsetx = 0, + offsety = 0, + parallaxx = 1, + parallaxy = 1, + properties = {}, + objects = { + { + id = 10, + name = "", + type = "", + shape = "rectangle", + x = 512, + y = 128, + width = 320, + height = 128, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 11, + name = "", + type = "", + shape = "rectangle", + x = 1344, + y = 64, + width = 128, + height = 192, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 12, + name = "", + type = "", + shape = "rectangle", + x = 1152, + y = 640, + width = 320, + height = 256, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 13, + name = "", + type = "", + shape = "rectangle", + x = 768, + y = 704, + width = 192, + height = 192, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 19, + name = "", + type = "", + shape = "rectangle", + x = 576, + y = 384, + width = 448, + height = 192, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 20, + name = "", + type = "", + shape = "rectangle", + x = 448, + y = 512, + width = 192, + height = 192, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 21, + name = "", + type = "", + shape = "rectangle", + x = 256, + y = 384, + width = 192, + height = 192, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 22, + name = "", + type = "", + shape = "rectangle", + x = 128, + y = 448, + width = 192, + height = 320, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 23, + name = "", + type = "", + shape = "rectangle", + x = 128, + y = 768, + width = 128, + height = 64, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 30, + name = "", + type = "", + shape = "rectangle", + x = 0, + y = 0, + width = 16, + height = 960, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 31, + name = "", + type = "", + shape = "rectangle", + x = 1584, + y = 0, + width = 16, + height = 960, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 32, + name = "", + type = "", + shape = "rectangle", + x = 0, + y = 0, + width = 1600, + height = 16, + rotation = 0, + visible = true, + properties = {}, + }, + { + id = 33, + name = "", + type = "", + shape = "rectangle", + x = 0, + y = 944, + width = 1600, + height = 16, + rotation = 0, + visible = true, + properties = {}, + }, + }, + }, + }, +} diff --git a/mapsloader.lua b/mapsloader.lua new file mode 100644 index 0000000..dc25147 --- /dev/null +++ b/mapsloader.lua @@ -0,0 +1,24 @@ +function LoadMap(lvlnum) + --TODO: FINISH THIS + local mapfilelocation = "maps/" + local extention = ".lua" + + --unload the current map + if GameMap then + GameMap:removeLayer("Walls") + end + + --load the new map + GameMap = mapfilelocation .. "map" .. lvlnum .. extention + + --load the new map's walls + Walls = {} + if GameMap.layers["Walls"] then + for _, obj in ipairs(GameMap.layers["Walls"].objects) do + local wall = World:newRectangleCollider(obj.x, obj.y, obj.width, obj.height) + wall:setType("static") + table.insert(Walls, wall) + Walls[#Walls]:setCollisionClass("Wall") + end + end +end diff --git a/player.lua b/player.lua index c6dfb44..7c1f310 100644 --- a/player.lua +++ b/player.lua @@ -3,13 +3,14 @@ cos = math.cos sin = math.sin --optimisation -- Constructor for the Player class -function Player:new(p, x, y, health, image, speed) +function Player:new(p, x, y, health, image, speed, max) self.p = p self.image = love.graphics.newImage(image) self.x = x self.y = y self.health = health self.speed = speed + self.max = max self.width = self.image:getWidth() self.height = self.image:getHeight() @@ -65,6 +66,7 @@ function Player:update(dt) elseif love.keyboard.isDown("d") then self.rotation = self.rotation + (self.rotSpeed * dt) end + self.collider:setLinearVelocity(self.vx, self.vy) -- Check for collision with walls @@ -82,6 +84,12 @@ function Player:update(dt) end self.x = self.collider:getX() self.y = self.collider:getY() + + -- Handlle map changes + if love.keyboard.isDown("1") then + LoadMap("1") + print("Map 1 loaded") + end elseif self.p == 2 then -- Handle player 2 controls if love.keyboard.isDown("up") then