Adds Game Jam Ready Templates & ReiLua API Updates
(Most of the code is Copilot Generated LOL)
This commit is contained in:
146
template/states/game.lua
Normal file
146
template/states/game.lua
Normal file
@@ -0,0 +1,146 @@
|
||||
--[[
|
||||
Game State - Main gameplay state
|
||||
Demonstrates:
|
||||
- GameState usage
|
||||
- Animation system
|
||||
- Object-oriented player
|
||||
- Basic game loop
|
||||
]]
|
||||
|
||||
local Object = require("lib.classic")
|
||||
local Animation = require("lib.animation")
|
||||
local GameState = Object:extend()
|
||||
|
||||
-- Player class
|
||||
local Player = Object:extend()
|
||||
|
||||
function Player:new(x, y)
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.speed = 200
|
||||
self.animation = nil
|
||||
end
|
||||
|
||||
function Player:update(dt)
|
||||
local moved = false
|
||||
|
||||
-- Movement
|
||||
if RL.IsKeyDown(RL.KEY_LEFT) or RL.IsKeyDown(RL.KEY_A) then
|
||||
self.x = self.x - self.speed * dt
|
||||
moved = true
|
||||
end
|
||||
if RL.IsKeyDown(RL.KEY_RIGHT) or RL.IsKeyDown(RL.KEY_D) then
|
||||
self.x = self.x + self.speed * dt
|
||||
moved = true
|
||||
end
|
||||
if RL.IsKeyDown(RL.KEY_UP) or RL.IsKeyDown(RL.KEY_W) then
|
||||
self.y = self.y - self.speed * dt
|
||||
moved = true
|
||||
end
|
||||
if RL.IsKeyDown(RL.KEY_DOWN) or RL.IsKeyDown(RL.KEY_S) then
|
||||
self.y = self.y + self.speed * dt
|
||||
moved = true
|
||||
end
|
||||
|
||||
-- Update animation
|
||||
if self.animation then
|
||||
if moved then
|
||||
self.animation:play("walk")
|
||||
else
|
||||
self.animation:play("idle")
|
||||
end
|
||||
self.animation:update(dt)
|
||||
end
|
||||
end
|
||||
|
||||
function Player:draw()
|
||||
if self.animation then
|
||||
self.animation:drawSimple(self.x, self.y)
|
||||
else
|
||||
-- Fallback: draw a simple rectangle
|
||||
RL.DrawRectangle({self.x, self.y, 32, 32}, RL.BLUE)
|
||||
end
|
||||
end
|
||||
|
||||
-- Game State
|
||||
function GameState:new()
|
||||
self.player = nil
|
||||
self.paused = false
|
||||
end
|
||||
|
||||
function GameState:enter(previous)
|
||||
print("Entered game state")
|
||||
|
||||
local screenSize = RL.GetScreenSize()
|
||||
|
||||
-- Create player
|
||||
self.player = Player(screenSize[1] / 2 - 16, screenSize[2] / 2 - 16)
|
||||
|
||||
-- TODO: Load player sprite sheet and create animation
|
||||
-- Example:
|
||||
-- local playerTexture = RL.LoadTexture("assets/player.png")
|
||||
-- self.player.animation = Animation.new(playerTexture, 32, 32, {
|
||||
-- idle = {frames = {1, 2, 3, 4}, fps = 8, loop = true},
|
||||
-- walk = {frames = {5, 6, 7, 8}, fps = 12, loop = true}
|
||||
-- })
|
||||
-- self.player.animation:play("idle")
|
||||
end
|
||||
|
||||
function GameState:update(dt)
|
||||
-- Pause/unpause
|
||||
if RL.IsKeyPressed(RL.KEY_ESCAPE) or RL.IsKeyPressed(RL.KEY_P) then
|
||||
self.paused = not self.paused
|
||||
end
|
||||
|
||||
if self.paused then
|
||||
return
|
||||
end
|
||||
|
||||
-- Update game objects
|
||||
if self.player then
|
||||
self.player:update(dt)
|
||||
end
|
||||
end
|
||||
|
||||
function GameState:draw()
|
||||
RL.ClearBackground({50, 50, 50, 255})
|
||||
|
||||
-- Draw game objects
|
||||
if self.player then
|
||||
self.player:draw()
|
||||
end
|
||||
|
||||
-- Draw pause overlay
|
||||
if self.paused then
|
||||
local screenSize = RL.GetScreenSize()
|
||||
local centerX = screenSize[1] / 2
|
||||
local centerY = screenSize[2] / 2
|
||||
|
||||
-- Semi-transparent overlay
|
||||
RL.DrawRectangle({0, 0, screenSize[1], screenSize[2]}, {0, 0, 0, 128})
|
||||
|
||||
-- Pause text
|
||||
local text = "PAUSED"
|
||||
local size = 40
|
||||
local width = RL.MeasureText(text, size)
|
||||
RL.DrawText(text, {centerX - width / 2, centerY - 20}, size, RL.WHITE)
|
||||
|
||||
local hint = "Press ESC or P to resume"
|
||||
local hintSize = 20
|
||||
local hintWidth = RL.MeasureText(hint, hintSize)
|
||||
RL.DrawText(hint, {centerX - hintWidth / 2, centerY + 30}, hintSize, RL.GRAY)
|
||||
end
|
||||
|
||||
-- Draw controls hint
|
||||
local hint = "WASD/ARROWS: Move | ESC: Pause"
|
||||
local hintSize = 16
|
||||
local screenSize = RL.GetScreenSize()
|
||||
RL.DrawText(hint, {10, screenSize[2] - 30}, hintSize, RL.LIGHTGRAY)
|
||||
end
|
||||
|
||||
function GameState:leave()
|
||||
print("Left game state")
|
||||
-- Cleanup game assets here
|
||||
end
|
||||
|
||||
return GameState
|
||||
Reference in New Issue
Block a user