bootstrap lua
This commit is contained in:
parent
fbb14897bd
commit
61b773ac6d
|
@ -12,11 +12,14 @@
|
||||||
outputs = { self, nixpkgs, playdate-sdk }:
|
outputs = { self, nixpkgs, playdate-sdk }:
|
||||||
let system = "x86_64-linux";
|
let system = "x86_64-linux";
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
stdenv = pkgs.stdenv;
|
||||||
playdate-sdk-pkg = playdate-sdk.packages.${system}.default;
|
playdate-sdk-pkg = playdate-sdk.packages.${system}.default;
|
||||||
in {
|
in {
|
||||||
devShell.${system} = with pkgs;
|
devShell.${system} = with stdenv; with pkgs;
|
||||||
mkShell {
|
mkShell {
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
|
just
|
||||||
|
lua-language-server
|
||||||
playdate-sdk-pkg
|
playdate-sdk-pkg
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
9
justfile
Normal file
9
justfile
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
bin := "Rush.pdx"
|
||||||
|
|
||||||
|
alias b := build
|
||||||
|
build:
|
||||||
|
pdc src {{ bin }}
|
||||||
|
|
||||||
|
alias s := simu
|
||||||
|
simu: build
|
||||||
|
PlaydateSimulator {{ bin }}
|
95
src/main.lua
Normal file
95
src/main.lua
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
-- Name this file `main.lua`. Your game can use multiple source files if you wish
|
||||||
|
-- (use the `import "myFilename"` command), but the simplest games can be written
|
||||||
|
-- with just `main.lua`.
|
||||||
|
|
||||||
|
-- You'll want to import these in just about every project you'll work on.
|
||||||
|
|
||||||
|
import "CoreLibs/object"
|
||||||
|
import "CoreLibs/graphics"
|
||||||
|
import "CoreLibs/sprites"
|
||||||
|
import "CoreLibs/timer"
|
||||||
|
|
||||||
|
-- Declaring this "gfx" shorthand will make your life easier. Instead of having
|
||||||
|
-- to preface all graphics calls with "playdate.graphics", just use "gfx."
|
||||||
|
-- Performance will be slightly enhanced, too.
|
||||||
|
-- NOTE: Because it's local, you'll have to do it in every .lua source file.
|
||||||
|
|
||||||
|
local gfx <const> = playdate.graphics
|
||||||
|
|
||||||
|
-- Here's our player sprite declaration. We'll scope it to this file because
|
||||||
|
-- several functions need to access it.
|
||||||
|
|
||||||
|
local playerSprite = nil
|
||||||
|
|
||||||
|
-- A function to set up our game environment.
|
||||||
|
|
||||||
|
function myGameSetUp()
|
||||||
|
|
||||||
|
-- Set up the player sprite.
|
||||||
|
|
||||||
|
local playerImage = gfx.image.new("Images/playerImage")
|
||||||
|
assert( playerImage ) -- make sure the image was where we thought
|
||||||
|
|
||||||
|
playerSprite = gfx.sprite.new( playerImage )
|
||||||
|
playerSprite:moveTo( 200, 120 ) -- this is where the center of the sprite is placed; (200,120) is the center of the Playdate screen
|
||||||
|
playerSprite:add() -- This is critical!
|
||||||
|
|
||||||
|
-- We want an environment displayed behind our sprite.
|
||||||
|
-- There are generally two ways to do this:
|
||||||
|
-- 1) Use setBackgroundDrawingCallback() to draw a background image. (This is what we're doing below.)
|
||||||
|
-- 2) Use a tilemap, assign it to a sprite with sprite:setTilemap(tilemap),
|
||||||
|
-- and call :setZIndex() with some low number so the background stays behind
|
||||||
|
-- your other sprites.
|
||||||
|
|
||||||
|
local backgroundImage = gfx.image.new( "Images/background" )
|
||||||
|
assert( backgroundImage )
|
||||||
|
|
||||||
|
gfx.sprite.setBackgroundDrawingCallback(
|
||||||
|
function( x, y, width, height )
|
||||||
|
-- x,y,width,height is the updated area in sprite-local coordinates
|
||||||
|
-- The clip rect is already set to this area, so we don't need to set it ourselves
|
||||||
|
backgroundImage:draw( 0, 0 )
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Now we'll call the function above to configure our game.
|
||||||
|
-- After this runs (it just runs once), nearly everything will be
|
||||||
|
-- controlled by the OS calling `playdate.update()` 30 times a second.
|
||||||
|
|
||||||
|
myGameSetUp()
|
||||||
|
|
||||||
|
-- `playdate.update()` is the heart of every Playdate game.
|
||||||
|
-- This function is called right before every frame is drawn onscreen.
|
||||||
|
-- Use this function to poll input, run game logic, and move sprites.
|
||||||
|
|
||||||
|
function playdate.update()
|
||||||
|
|
||||||
|
-- Poll the d-pad and move our player accordingly.
|
||||||
|
-- (There are multiple ways to read the d-pad; this is the simplest.)
|
||||||
|
-- Note that it is possible for more than one of these directions
|
||||||
|
-- to be pressed at once, if the user is pressing diagonally.
|
||||||
|
|
||||||
|
if playdate.buttonIsPressed( playdate.kButtonUp ) then
|
||||||
|
playerSprite:moveBy( 0, -2 )
|
||||||
|
end
|
||||||
|
if playdate.buttonIsPressed( playdate.kButtonRight ) then
|
||||||
|
playerSprite:moveBy( 2, 0 )
|
||||||
|
end
|
||||||
|
if playdate.buttonIsPressed( playdate.kButtonDown ) then
|
||||||
|
playerSprite:moveBy( 0, 2 )
|
||||||
|
end
|
||||||
|
if playdate.buttonIsPressed( playdate.kButtonLeft ) then
|
||||||
|
playerSprite:moveBy( -2, 0 )
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Call the functions below in playdate.update() to draw sprites and keep
|
||||||
|
-- timers updated. (We aren't using timers in this example, but in most
|
||||||
|
-- average-complexity games, you will.)
|
||||||
|
|
||||||
|
gfx.sprite.update()
|
||||||
|
playdate.timer.updateTimers()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in a new issue