update chess to use moth
Some checks failed
Build and Deploy / build-macos (push) Failing after 7s
Build and Deploy / build-windows (CLANG64) (push) Has been cancelled
Build and Deploy / package-dist (push) Has been cancelled
Build and Deploy / deploy-itch (push) Has been cancelled
Build and Deploy / deploy-gitea (push) Has been cancelled
Build and Deploy / build-linux (push) Has been cancelled

This commit is contained in:
2025-05-28 17:49:37 -05:00
parent 4eb592b740
commit 09f48d08b9
8 changed files with 88 additions and 214 deletions

View File

@@ -1,22 +1,18 @@
/* main.js runs the demo with your prototype-based grid */
var moth = use('moth', $_.delay)
var json = use('json')
var os = use('os')
var draw2d = use('draw2d')
var res = 160
var internal_res = 480
var input = use('input')
moth.initialize({ width:res, height:res, resolution_x:internal_res, resolution_y:internal_res, mode:'letterbox' });
var os = use('os');
var draw2d = use('draw2d');
var gfx = use('graphics');
input.watch($_)
/*──── import our pieces + systems ───────────────────────────────────*/
var Grid = use('grid'); // your new ctor
var MovementSystem = use('movement').MovementSystem;
var startingPos = use('pieces').startingPosition;
var rules = use('rules');
var Grid = use('examples/chess/grid'); // your new ctor
var MovementSystem = use('examples/chess/movement').MovementSystem;
var startingPos = use('examples/chess/pieces').startingPosition;
var rules = use('examples/chess/rules');
/*──── build board ───────────────────────────────────────────────────*/
var grid = new Grid(8, 8);
@@ -55,7 +51,7 @@ function updateTitle() {
break;
}
prosperon.window.title = title
console.log(title)
}
// Initialize title
@@ -70,7 +66,7 @@ var opponentMousePos = null;
var opponentHoldingPiece = false;
var opponentSelectPos = null;
prosperon.on('mouse_button_down', function(e) {
function handleMouseButtonDown(e) {
if (e.which !== 0) return;
// Don't allow piece selection unless we have an opponent
@@ -96,9 +92,9 @@ prosperon.on('mouse_button_down', function(e) {
} else {
selectPos = null;
}
})
}
prosperon.on('mouse_button_up', function(e) {
function handleMouseButtonUp(e) {
if (e.which !== 0 || !holdingPiece || !selectPos) return;
// Don't allow moves unless we have an opponent and it's our turn
@@ -139,9 +135,9 @@ prosperon.on('mouse_button_up', function(e) {
type: 'piece_drop'
});
}
})
}
prosperon.on('mouse_motion', function(e) {
function handleMouseMotion(e) {
var mx = e.pos.x;
var my = e.pos.y;
@@ -162,7 +158,18 @@ prosperon.on('mouse_motion', function(e) {
selectPos: selectPos
});
}
})
}
function handleKeyDown(e) {
// S key - start server
if (e.scancode === 22 && gameState === 'waiting') { // S key
startServer();
}
// J key - join server
else if (e.scancode === 13 && gameState === 'waiting') { // J key
joinServer();
}
}
/*──── drawing helpers ───────────────────────────────────────────────*/
/* ── constants ─────────────────────────────────────────────────── */
@@ -193,7 +200,8 @@ function drawBoard() {
draw2d.rectangle(
{ x: x*S, y: y*S, width: S, height: S },
{ thickness: 0, color: color }
{ thickness: 0 },
{ color: color }
);
}
}
@@ -235,7 +243,7 @@ function drawPieces() {
var r = { x: piece.coord[0]*S, y: piece.coord[1]*S,
width:S, height:S };
draw2d.image(piece.sprite, r, 0, [0,0], [0,0], {mode:"nearest"});
draw2d.image(piece.sprite, r);
});
// Draw the held piece at the mouse position if we're holding one
@@ -245,7 +253,7 @@ function drawPieces() {
var r = { x: hoverPos[0]*S, y: hoverPos[1]*S,
width:S, height:S };
draw2d.image(piece.sprite, r, 0, [0,0], [0,0], {mode:"nearest"});
draw2d.image(piece.sprite, r);
}
}
@@ -257,29 +265,25 @@ function drawPieces() {
width:S, height:S };
// Draw with slight transparency to show it's the opponent's piece
draw2d.image(opponentPiece.sprite, r, 0, [0,0], [0,0], {mode:"nearest", color: [1, 1, 1, 0.7]});
draw2d.image(opponentPiece.sprite, r);
}
}
}
var graphics = use('graphics')
function update(dt)
{
return {}
}
prosperon.on('draw', function() {
function draw()
{
draw2d.clear()
drawBoard()
drawPieces()
draw2d.text("HELL", [100,100])
})
draw2d.text("HELL", {x: 100, y: 100}, 'fonts/c64.ttf', 16, [1,1,1,1])
return draw2d.get_commands()
}
prosperon.on('key_down', function(e) {
// S key - start server
if (e.scancode === 22 && gameState === 'waiting') { // S key
startServer();
}
// J key - join server
else if (e.scancode === 13 && gameState === 'waiting') { // J key
joinServer();
}
})
function startServer() {
gameState = 'server_waiting';
@@ -327,17 +331,12 @@ function joinServer() {
var os = use('os')
var sdl = use('sdl')
var ioguy = sdl.ioguy()
send(ioguy, {
type: "subscribe",
actor: $_
});
$_.receiver(e => {
if (e.type === 'game_start' || e.type === 'move' || e.type === 'greet')
if (e.kind == 'update')
send(e, update(e.dt))
else if (e.kind == 'draw')
send(e, draw())
else if (e.type === 'game_start' || e.type === 'move' || e.type === 'greet')
console.log("Receiver got message:", e.type, e);
if (e.type === 'quit') os.exit()
@@ -392,7 +391,13 @@ $_.receiver(e => {
// Opponent dropped their piece
opponentHoldingPiece = false;
opponentSelectPos = null;
} else if (e.type === 'mouse_button_down') {
handleMouseButtonDown(e)
} else if (e.type === 'mouse_button_up') {
handleMouseButtonUp(e)
} else if (e.type === 'mouse_motion') {
handleMouseMotion(e)
} else if (e.type === 'key_down') {
handleKeyDown(e)
}
prosperon.dispatch(e.type, e)
})