From 56366e4db940036573fba4bdcc52c1f6b85b20bd Mon Sep 17 00:00:00 2001 From: Wally Hackenslacker Date: Sun, 28 Sep 2025 02:14:41 -0400 Subject: [PATCH] Started implementing game states and intro. --- README.md | 1 + imgs/cpu.png | Bin 0 -> 25391 bytes main.lua | 122 ++++++++++++++++++++++++++++++++++++++---------- src/classes.lua | 46 ++++++++++++++++++ src/gstate.lua | 58 +++++++++++++++++++++++ src/intro.lua | 66 ++++++++++++++++++++++++++ src/states.lua | 22 +++++++++ 7 files changed, 291 insertions(+), 24 deletions(-) create mode 100644 imgs/cpu.png create mode 100644 src/classes.lua create mode 100644 src/gstate.lua create mode 100644 src/intro.lua create mode 100644 src/states.lua diff --git a/README.md b/README.md index e33220a..29297b3 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ A dungeon crawler game made with LoveDOS for the DOSember Game Jam https://itch. - [Click.wav by frosty ham](https://opengameart.org/content/click-0) - [B&W Ornamental Cursor by qubodup](https://opengameart.org/content/bw-ornamental-cursor-19x19) - [Dogs of Cyberspace by congusbongus](https://modarchive.org/index.php?request=view_by_moduleid&query=207032) +- [Microchip texture by ZeptoBARS](https://opengameart.org/content/microchip-texture) diff --git a/imgs/cpu.png b/imgs/cpu.png new file mode 100644 index 0000000000000000000000000000000000000000..19adaf4ae214c2a5fa7bef9c09de67cec3536296 GIT binary patch literal 25391 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 1.0 then + Fade_out = 0.0 + Change_state = true + end + + -- If there is a fade in going then update it. + if Fade_in < 1.0 then + Fade_in = Fade_in + (dt / 2) + end + + -- If there is a fade out going then update it. + if Fade_out < 1.0 then + Fade_out = Fade_out + (dt / 2) + end + + -- Update the game state. + if game_states[new_state] == nil then + -- If the new state doesn't exist then wait for the fade out to end and quit. + if Fade_out >= 1.0 then + game_states[Current_state]:unload(dt) + love.event.quit() + end + else + -- If the new state exists then unload it's data and set the new state. + if Change_state and Fade_out >= 1.0 then + game_states[Current_state]:unload(dt) + Current_state = new_state + game_states[Current_state]:load() + Change_state = false + end + end end function love.draw() - love.graphics.draw(Bckg, 0, 0) - love.graphics.draw(Cursor, Mousex , Mousey) + -- Reset the drawing color and clear the screen. + love.graphics.clear() + + -- Render the current game state. + game_states[Current_state]:draw() + + -- If there is a fade in going then render it. + if Fade_in < 1.0 then + love.graphics.setColor(0, 0, 0) + love.graphics.circle('fill', -320, love.graphics.getHeight() / 2, lerp(0, 400 * 2, Fade_in)) + love.graphics.setColor() + end + + -- If there is a fade out going then render it. + if Fade_out < 1.0 then + love.graphics.setColor(0, 0, 0) + love.graphics.circle('fill', -320, love.graphics.getHeight() / 2, lerp(400 * 2, 0, Fade_out)) + love.graphics.setColor() + end end function love.keypressed(key) - if key == "escape" then - love.event.quit() - end + -- Send events to the active game state if there is no fade active. + if Fade_in >= 1.0 and Fade_out >= 1.0 then + game_states[Current_state]:keypressed(key) + end end function love.mousemoved(x, y) - Mousex = x - Mousey = y + -- Send events to the active game state if there is no fade active. + if Fade_in >= 1.0 and Fade_out >= 1.0 then + game_states[Current_state]:mousemoved(x, y) + end end -function love.mousepressed(x, y, button) - if button == 1 then - Click:play() - end +function love.mousepressed(x, y, btn) + -- Send events to the active game state if there is no fade active. + if Fade_in >= 1.0 and Fade_out >= 1.0 then + game_states[Current_state]:mousemoved(x, y, btn) + end end diff --git a/src/classes.lua b/src/classes.lua new file mode 100644 index 0000000..0923b10 --- /dev/null +++ b/src/classes.lua @@ -0,0 +1,46 @@ +------------------------------------------------------------------------------ +-- Methods +------------------------------------------------------------------------------ + +-- Single inheritance version of the sample code from +-- http://lua-users.org/wiki/ObjectOrientationTutorial +local function make_class(BaseClass) + -- "cls" is the new class + local cls = {} + + -- copy base class contents into the new class + if BaseClass ~= nil then + for k, v in pairs(BaseClass) do + cls[k] = v + end + end + + -- set the class's __index, and start filling an "is_a" table that contains this class and all of its bases + -- so you can do an "instance of" check using my_instance.is_a[MyClass] + cls.__index, cls.is_a = cls, {[cls] = true} + + if BaseClass ~= nil then + cls.is_a[BaseClass] = true + end + + -- the class's __call metamethod + setmetatable(cls, {__call = function (c, ...) + local instance = setmetatable({}, c) + + -- run the init method if it's there + local init = instance._init + + if init then init(instance, ...) end + return instance + end}) + + -- return the new class table, that's ready to fill with methods + return cls +end + + +------------------------------------------------------------------------------ +-- Module return +------------------------------------------------------------------------------ + +return make_class diff --git a/src/gstate.lua b/src/gstate.lua new file mode 100644 index 0000000..6523738 --- /dev/null +++ b/src/gstate.lua @@ -0,0 +1,58 @@ +------------------------------------------------------------------------------ +-- Imports +------------------------------------------------------------------------------ + +local make_class = require 'src.classes' + + +------------------------------------------------------------------------------ +-- Class definitions +------------------------------------------------------------------------------ + +local GameState = make_class() + + +------------------------------------------------------------------------------ +-- Class methods +------------------------------------------------------------------------------ + +function GameState:_init(name, index) + self.name = name + self.index = index + self.valid = false +end + + +function GameState:load() +end + + +function GameState:update(_) + return self.index +end + + +function GameState:draw() +end + + +function GameState:unload() +end + +function GameState:keypressed(_) +end + + +function GameState:mousemoved(_, _) +end + + +function GameState:mousepressed(_, _, _) +end + + +------------------------------------------------------------------------------ +-- Module return +------------------------------------------------------------------------------ + +return GameState diff --git a/src/intro.lua b/src/intro.lua new file mode 100644 index 0000000..c039805 --- /dev/null +++ b/src/intro.lua @@ -0,0 +1,66 @@ +------------------------------------------------------------------------------ +-- Imports +------------------------------------------------------------------------------ + +local love = require 'love' +local make_class = require 'src.classes' +local GameState = require 'src.gstate' + + +------------------------------------------------------------------------------ +-- Class definitions +------------------------------------------------------------------------------ + +local Intro = make_class(GameState) + + +------------------------------------------------------------------------------ +-- Class methods +------------------------------------------------------------------------------ + +function Intro:_init(name, index) + -- Call super-class constructor. + GameState._init(self, name, index) + + -- Attribute definitions + self.skip = false +end + + +function Intro:load() + self.background = love.graphics.newImage('imgs/cpu.png') + self.valid = true +end + + +function Intro:update(_) + if not self.skip then return self.index else return 0 end +end + + +function Intro:draw() + if self.valid then + love.graphics.draw(self.background, 0, 0) + love.graphics.print(string.format('OS: %s', love.system.getOS()), 5, 5) + love.graphics.print(string.format('Love version: %s', love.getVersion()), 5, 15) + love.graphics.print(string.format('Memory usage: %s KiB', love.system.getMemUsage()), 5, 25) + end +end + + +function Intro:unload() + self.background = nil + self.valid = false +end + + +function Intro:keypressed(_) + self.skip = true +end + + +------------------------------------------------------------------------------ +-- Module return +------------------------------------------------------------------------------ + +return Intro diff --git a/src/states.lua b/src/states.lua new file mode 100644 index 0000000..700e4f2 --- /dev/null +++ b/src/states.lua @@ -0,0 +1,22 @@ +------------------------------------------------------------------------------ +-- Imports +------------------------------------------------------------------------------ + +local Intro = require 'src.intro' + + +------------------------------------------------------------------------------ +-- Variables +------------------------------------------------------------------------------ + +-- Table of all valid game states. +local states = { + Intro('intro', 1), +} + + +------------------------------------------------------------------------------ +-- Module return +------------------------------------------------------------------------------ + +return states