From 7b3d7c4dfd4292498282a09de8816868de0d2203 Mon Sep 17 00:00:00 2001 From: jxnshi Date: Sun, 8 Dec 2024 17:12:23 +0100 Subject: [PATCH] Working on cattoland --- public/404.html | 15 +--- public/cattoland/cattoland.js | 131 +++++++++++++++++++++++----------- src/main.zig | 31 +++++--- 3 files changed, 110 insertions(+), 67 deletions(-) diff --git a/public/404.html b/public/404.html index 0f2abd2..8d03dc1 100644 --- a/public/404.html +++ b/public/404.html @@ -1,14 +1 @@ - - - - jxnshi.xyz - - - - - -
-

Lost in outter space.

-
- - +

Lost in outter space.

diff --git a/public/cattoland/cattoland.js b/public/cattoland/cattoland.js index c8cb6a6..e447164 100644 --- a/public/cattoland/cattoland.js +++ b/public/cattoland/cattoland.js @@ -1,8 +1,6 @@ const canvas_width = 600; const canvas_height = 400; -const tile_size = 48; - const camera_init = () => { return { x: 0, @@ -12,10 +10,14 @@ const camera_init = () => { let context; +let events = new Map(); + let camera = camera_init(); let images = new Map(); let entities = []; +let player; + const image_load = (images, path) => { let image = new Image(); image.src = path; @@ -23,31 +25,31 @@ const image_load = (images, path) => { images.set(path, image); }; -const entity_init = () => { +const entity_init = (x, y, width, height, sheet_rect, image) => { return { - x: 0, - y: 0, - sheet_x: 0, - sheet_y: 0, - image: undefined, + x: x, + y: y, + width: width, + height: height, + sheet_rect: sheet_rect, + image: image, + speed: 3, }; }; -const entity_draw = () => { - -}; - const catto_init = () => { - let entity = entity_init(); - entity = images.get("cattoland/catto.png"); + let image = images.get("cattoland/catto.png"); + let entity = entity_init(0, 0, 48, 48, { x: 0, y: 0, width: 16, height: 16 }, image); return entity; }; const main = () => { image_load(images, "cattoland/catto.png"); + image_load(images, "cattoland/shadow.png"); - entities.push(catto_init()); + player = catto_init(); + entities.push(player); let canvas = document.createElement("canvas") @@ -69,46 +71,89 @@ const main = () => { }; const loop = (delta) => { - context.fillStyle = "#FFFFFF"; - context.fillRect(0, 0, 600, 400); - - for (let entity of entities) { - { // Draw shadow. - let anchor_x = tile_size / 2; - let anchor_y = tile_size - 3; + { // Events. + if (events.get("KeyW") === "down") { + player.y -= player.speed; + } - let x = entity.x + canvas_width / 2 + camera.x - anchor_x; - let y = entity.y + canvas_height / 2 + camera.y - anchor_y; + if (events.get("KeyA") === "down") { + player.x -= player.speed; + } - let sheet_x = 0 * sheet_tile_size; - let sheet_y = 0 * sheet_tile_size; + if (events.get("KeyS") === "down") { + player.y += player.speed; + } - context.drawImage( - catto_image, - sheet_x, sheet_y, sheet_tile_size, sheet_tile_size, - x, y, tile_size, tile_size, - ); + if (events.get("KeyD") === "down") { + player.x += player.speed; } + } + + { // Render. + let shadow_image = images.get("cattoland/shadow.png"); + + context.fillStyle = "#FFFFFF"; + context.fillRect(0, 0, 600, 400); + + for (let entity of entities) { + { // Draw shadow. + let width = 16 * 3; + let height = 3 * 3; - { // Draw catto. - let anchor_x = tile_size / 2; - let anchor_y = tile_size; + let anchor_x = width / 2; + let anchor_y = height - 3; - let x = catto.x + canvas_width / 2 + camera.x - anchor_x; - let y = catto.y + canvas_height / 2 + camera.y - anchor_y; + let x = entity.x + canvas_width / 2 + camera.x - anchor_x; + let y = entity.y + canvas_height / 2 + camera.y - anchor_y; - let sheet_x = catto.sheet_x * sheet_tile_size; - let sheet_y = catto.sheet_y * sheet_tile_size; + context.drawImage( + shadow_image, + 0, 0, 16, 3, + x, y, width, height, + ); + } - context.drawImage( - catto_image, - sheet_x, sheet_y, sheet_tile_size, sheet_tile_size, - x, y, tile_size, tile_size, - ); + { // Draw catto. + let anchor_x = entity.width / 2; + let anchor_y = entity.height; + + let x = entity.x + canvas_width / 2 + camera.x - anchor_x; + let y = entity.y + canvas_height / 2 + camera.y - anchor_y; + + context.drawImage( + entity.image, + entity.sheet_rect.x, entity.sheet_rect.y, entity.sheet_rect.width, entity.sheet_rect.height, + x, y, entity.width, entity.height, + ); + } + } + } + + for (let [event, state] of events) { + if (state === "pressed") { + events.set(event, "down"); + } + + if (state === "released") { + events.set(event, undefined); } } window.requestAnimationFrame(loop); }; +document.onkeydown = (event) => { + let old_event = events.get(event.code); + + if (old_event === "pressed" || old_event === "down") { + return; + } + + events.set(event.code, "pressed"); +}; + +document.onkeyup = (event) => { + events.set(event.code, "released"); +}; + window.onload = main; diff --git a/src/main.zig b/src/main.zig index e0a11d0..4c37fd4 100644 --- a/src/main.zig +++ b/src/main.zig @@ -127,21 +127,32 @@ fn handleClient(parent_allocator: std.mem.Allocator, connection: std.net.Server. const index_file_reader = index_file.reader(); try index_file_reader.readAllArrayList(&temp_buffer, std.math.maxInt(usize)); - } else { - var path_ext = std.ArrayList(u8).init(allocator); - defer path_ext.deinit(); + } else no_index_file: { + md_file: { + var path_ext = std.ArrayList(u8).init(allocator); + defer path_ext.deinit(); - try path_ext.appendSlice(route); - try path_ext.appendSlice(".md"); + try path_ext.appendSlice(route); + try path_ext.appendSlice(".md"); + + var md_file = public_dir.openFile(path_ext.items, .{}) catch break :md_file; + defer md_file.close(); - var md_file = public_dir.openFile(path_ext.items, .{}) catch break :blk; - defer md_file.close(); + const md_file_reader = md_file.reader(); + + const temp_buffer_writer = temp_buffer.writer(); + + try markdownToHtml(temp_buffer_writer.any(), md_file_reader.any()); + + break :no_index_file; + } - const md_file_reader = md_file.reader(); + var not_found_file = public_dir.openFile("404.html", .{}) catch break :blk; + defer not_found_file.close(); - const temp_buffer_writer = temp_buffer.writer(); + const not_found_file_reader = not_found_file.reader(); - try markdownToHtml(temp_buffer_writer.any(), md_file_reader.any()); + try not_found_file_reader.readAllArrayList(&temp_buffer, std.math.maxInt(usize)); } try send_buffer.resize(layout_buffer.items.len + temp_buffer.items.len - 3); -- 2.49.0