]> jxnshi.xyz Git - jxnshi.xyz.git/commitdiff
Working on cattoland
authorjxnshi <jxnshi@cock.li>
Sun, 8 Dec 2024 16:12:23 +0000 (17:12 +0100)
committerjxnshi <jxnshi@cock.li>
Sun, 8 Dec 2024 16:12:23 +0000 (17:12 +0100)
public/404.html
public/cattoland/cattoland.js
src/main.zig

index 0f2abd24248498f316097fcf8aa27fbdc54a07fb..8d03dc19fd3f41b104759974f72c84163f7473b1 100644 (file)
@@ -1,14 +1 @@
-<!DOCTYPE html>
-<html>
-    <head>
-        <title>jxnshi.xyz</title>
-        <meta charset="UTF-8">
-        <meta content="width=device-width, initial-scale=1" name="viewport" />
-        <link rel="stylesheet" href="/style.css">
-    </head>
-    <body>
-        <main class="isle">
-            <p>Lost in outter space.</p>
-        </main>
-    </body>
-</html>
+<p>Lost in outter space.</p>
index c8cb6a64d1dd07e01f353e3079637baed3723f21..e447164e4f01bbd0a4e3d9c4965e8e8dd8bca99f 100644 (file)
@@ -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;
index e0a11d045d4229729e707575954f2bb4bd20a1b0..4c37fd463a9db10b41dc1814cce08a829d7aa1b9 100644 (file)
@@ -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);