const canvas_width = 600;
const canvas_height = 400;
-const tile_size = 48;
-
const camera_init = () => {
return {
x: 0,
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;
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")
};
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;
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);