From 61f7a91ccab1af11a6e39e79713e597ed04fb46e Mon Sep 17 00:00:00 2001 From: Arne van Iterson Date: Sun, 22 Mar 2020 15:54:55 +0100 Subject: [PATCH] Updated movement and added textures by Job --- package-lock.json | 6 +- package.json | 2 +- res/dungeon_tiles.png | Bin 14224 -> 0 bytes res/placeholder.png | Bin 243 -> 0 bytes res/tilemap.min.js | 42 ++++++++++++++ res/tilemap.png | Bin 0 -> 2329 bytes src/entities/player.js | 122 ++++++++++++++++++++++------------------- src/game.js | 12 ++-- src/levels/level.js | 62 ++++++++++----------- 9 files changed, 148 insertions(+), 98 deletions(-) delete mode 100644 res/dungeon_tiles.png delete mode 100644 res/placeholder.png create mode 100644 res/tilemap.min.js create mode 100644 res/tilemap.png diff --git a/package-lock.json b/package-lock.json index d572d77..9d4aef9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,9 +151,9 @@ } }, "asdf-games": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/asdf-games/-/asdf-games-1.0.1.tgz", - "integrity": "sha512-+7b+Na5rcAJg/zhLK+VuQ5WWtMxwGvYNdGSLLRbcNZai1Hdf2GDiXYV0xHi64WCxV4YdeRI0ymBOtyPME0OimA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/asdf-games/-/asdf-games-1.0.5.tgz", + "integrity": "sha512-dRjnLUvjd7umMShBOmitgJhyo9LA2pKgDa1if5Zshd9y6Exj0LcfY0f8WJpA8cxXYlMq3duiT3lE1bFrgtifow==" }, "astral-regex": { "version": "1.0.0", diff --git a/package.json b/package.json index b12baed..bd789f4 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "author": "McArn", "license": "ISC", "dependencies": { - "asdf-games": "^1.0.1" + "asdf-games": "^1.0.5" }, "devDependencies": { "electron": "^8.0.2", diff --git a/res/dungeon_tiles.png b/res/dungeon_tiles.png deleted file mode 100644 index 91b45700cc290a79e24df341e92cd6c57370a052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14224 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 diff --git a/res/placeholder.png b/res/placeholder.png deleted file mode 100644 index 506387a614d971ce948119703abe90af4c7aeaec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6-A0X`wF4h{}8XU;rx<_u7P7~mN7-5#ipv%n*=n1O-s2naJy)#j513i^1u zIEHAPzk1;yFM|RH^MO+=Eu5$Rd3#-PdChW*pI={N4K^x>KPgg&ebxsLQ0DP@ICjbBd diff --git a/res/tilemap.min.js b/res/tilemap.min.js new file mode 100644 index 0000000..0805a74 --- /dev/null +++ b/res/tilemap.min.js @@ -0,0 +1,42 @@ +/** ------------------------------------------------------------------- + * Tile map for caa-game + * Index for tilemap file + * + * 0. Corner top-left + * 1. normal top wall middle piece + * 2. Corner top -> left wall + * 3. Left wall + * 4. top wall before corner + * 5. corner top -> right wall + * 6. normal right wall piece + * 7. Corner right -> top + * 8. Corner right -> bottom + * 9. bottom wall piece before 8. + * 10. normal bottom wall piece + * 11. Corner bottom -> right + * 12. Corner right -> bottom + * 13. Corner bottom -> left + * 14. Bottom wall piece before 13. + * 15. Corner left -> bottom + * 16. Normal floor tile + * 17. +-shaped floor tile + * 18. Heavily cracked floor tile + * 19. Lightly cracked floor tile + * 20. Normal brick wall 1 + * 21. Normal brick wall 2 + * 22. Normal brick wall 3 + * 23. blood brick wall 1 + * 24. blood brick wall 2 + * 25. blood brick wall 3 + * 26. light vines brick wall 1 + * 27. light vines brick wall 2 + * 28. light vines brick wall 3 + * 29. heavy vines brick wall 1 + * 30. heavy vines brick wall 2 + * 31. heavy vines brick wall 3 + * 32. Chest closed + * 33. Chest opened + * 34. Rock 1 + * 35. Rock 2 +------------------------------------------------------------------- */ +module.exports=[{x:0,y:0,walkable:!1},{x:16,y:0,walkable:!1},{x:32,y:0,walkable:!1},{x:48,y:0,walkable:!1},{x:64,y:0,walkable:!1},{x:0,y:16,walkable:!1},{x:16,y:16,walkable:!1},{x:32,y:16,walkable:!1},{x:48,y:16,walkable:!1},{x:64,y:16,walkable:!1},{x:0,y:32,walkable:!1},{x:16,y:32,walkable:!1},{x:32,y:32,walkable:!1},{x:48,y:32,walkable:!1},{x:64,y:32,walkable:!1},{x:0,y:48,walkable:!1},{x:16,y:48,walkable:!0},{x:32,y:48,walkable:!0},{x:48,y:48,walkable:!0},{x:64,y:48,walkable:!0},{x:0,y:64,walkable:!1},{x:16,y:64,walkable:!1},{x:32,y:64,walkable:!1},{x:48,y:64,walkable:!1},{x:64,y:64,walkable:!1},{x:0,y:80,walkable:!1},{x:16,y:80,walkable:!1},{x:32,y:80,walkable:!1},{x:48,y:80,walkable:!1},{x:64,y:80,walkable:!1},{x:0,y:96,walkable:!1},{x:16,y:96,walkable:!1},{x:32,y:96,walkable:!1},{x:48,y:96,walkable:!1},{x:64,y:96,walkable:!1},{x:0,y:112,walkable:!1}]; \ No newline at end of file diff --git a/res/tilemap.png b/res/tilemap.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d0fc48a76d09e6f92c62bf8ac8b51d96814376 GIT binary patch literal 2329 zcmV+!3Fh{RP)Px-(@8`@RCt{2U2SL-M;Lz2t_W$0AQsPHq7o3UNK`DPe=Y$_o7z&OrL9(^qM@RH zt0-+Ph*m-6q(2IcN3~ahbi@+1cHh zeRprOmwh1I?aVwgv+vD3^S^<}^FyLzo( z&w$K$amBRPKq|t}K(Yb(Z6Shf6Q?#_^)Mc1{8Hg*C14W)QJ5d!t0an_LcR)!%YKOU7&|Z6!9s) zV*MCT>_fLc_8REdXhHE44J0Cog^7s021bq8Yhct!G?0iy1Bo!iSn{pc)@U8;VQ83` zHgk$e{meIL*tYPdkJp!Ve51H+xu6lb2F4wc$HFoR5MxiT@+gs_JQHZnv|4V$O{<*B zWqfLQ2ola?ex+#s5r%ox4!+b;r z9j=Ix(g5xa4gt_KV66`km6iAG(YWX7D|5<^t^N*MHgsvviH)^*(Lw;41`Ol3W>nl8 z95QdFmTpYlIMVH_S9$ueVIp!3q=KD@&6!rq=~ydFX${nYm+?-XI)%N<_6I&LSp%Ov z8uzt@*b4UIJGmaJd>(vTKYZEvTHhcLBN0ERSiK?j(TDGuMky8x$Y$GJ32tqI;BWn8 zyDPu@crMiOb@`D;A|h_xxgPZtv=DnYCTgS>%%3}DzTOr`7!=I`ymceYdKJw~9o%ES z|7*?L+T$<1@T)7|h@0k!aGO7W^Xyt?1PZ^dHBh`+9pkC;>s|x5jXlA)b6zlCgXa74 z1D$loOE0~~2*VE)x1H|%Wqh(97^ZI4LX(3Wqpmd&(APa(e%)(e*f1!XrCRT%Yg9ke z3t`W{Cb4im`d$Fk=7!@&K~-HWnib*R|8Y&dCWz!B^$V+BtD2%To*H z&n^4Shv{mL_(`%pRQ)sx--#>Ezk4``tu58E?&CSz*5>a% zW%Fm-I6Kjf?%`Z@Yr7Z^@bCkv`83&}6yy2ga|UqYvNCDAeAT!zuBQf4^J)BzShPe} z()yv}&_?c|5a#`n~;$?YkfKevq?>+`UT z;pqo1m6Yj1oKSY6U8_$S-w9&BSqNhlA$3&%0D0IB9GiZkVCl~@7FN+c(~t6rsQF@F z%wV#^M?`RbV3dAdP<%-G@X$|BKTs(?b#X0J{4_qcRPoh#@P3+~@%j17%GtJdYEKU3 zs4j|%o8hXL3VhZ1%gT!=$jc{R$@xHD8?=oFc=}mk^JUuRq!4F!*EJPd?1@ z>fqz?zL=<4_kX1Qf8VHKQ1f9jzRVZn9ax@s2ItY++gpC|(m^yfr0{gYz9AYLDmG?y z|Gcpa>(;Ha7=HWq?PUOHYio17*_$_S0swNkTwouXLCuFz`F=1wJZ!n{?d>hI@>#QH zS?XI_TFmQt^X35n4jnpF-nnyUAVxHbMNTL?fnr{87AO54%W0Gcik$_i&qU%AaBTNB z<+g8b`Ak~A`_s*?=fPJ;zPB0O060HqqH<%F)slBf>0|{zOOwwV_3qCV$EhtSyxw=$=|VKhpjyY{7S4uA`Y5l zZZWQ2^vr|c_Z15G@6TT_r(+|=`g$;@Vt!!v9U3;e5|hr&#idZ*2j}S zPFwhyOvdEToH^5z?-!QuNOyPU063(JCaOk|#+Ixe@?4+Uzra89^Lg_tX56}S9qbQzduXE-CgrQo6j-0^y;~xa2fN8qsf63NZ=+NyS<1uY z7jFzmjraG1r{*jBW3VL?#Dl;q9~LwpsNC$=iUtdV&kVGrsnJ#@qUr~BLh7^Gv`gme z1;L*p;0@(uG#-@|$h#U`Bq4hS093S07TY@UEt)C#io6C!4HbilFdQGyI6MPj<))@7 z@TKK~rczHv3cs(fF9kp+D`h&>;NKa95l6AC56nSvF$2LuwGW;5sp)6}E>;9UUF6ny8bxm=3TQFfook%utRuo>MUG$I+~J7=V1` zCB{;NO#@j<#|_C=uR{9Oj_k@-WLMUDD)B@mrB6sGPIp*VpxfcGq^U8{MG2%|E)uh@ ztSo^YHVxEGC{A}+R$yW ({ x, y: 0 })), this.rate.walking); + this.anims.add("run_n", [0, 1, 2, 3].map(x => ({ x, y: 0 })), this.rate.running); + // East + this.anims.add("walk_e", [0, 1, 2, 3].map(x => ({ x, y: 2 })), this.rate.walking); + this.anims.add("run_e", [0, 1, 2, 3].map(x => ({ x, y: 2 })), this.rate.running); + // South + this.anims.add("walk_s", [0, 1, 2, 3].map(x => ({ x, y: 1 })), this.rate.walking); + this.anims.add("run_s", [0, 1, 2, 3].map(x => ({ x, y: 1 })), this.rate.running); + // West + this.anims.add("walk_w", [0, 1, 2, 3].map(x => ({ x, y: 3 })), this.rate.walking); + this.anims.add("run_w", [0, 1, 2, 3].map(x => ({ x, y: 3 })), this.rate.running); + + this.anims.play("walk_s"); - this.pos.x = (this.window.w / 2) - (24 * this.scale.x / 2); - this.pos.y = (this.window.h / 2) - (24 * this.scale.y / 2); + this.pos.x = (level.w / 2) - (24 * this.scale.x / 2); + this.pos.y = (level.h / 2) - (24 * this.scale.y / 2); this.keys = keys; } update(dt) { - const { rate, frames } = this; - this.curTime += dt; - - // Change speed - if (this.keys.x || this.keys.y) { - // Walking - this.rate = 0.35; - } else { - // Standstill - this.curFrame = 0; - } - if (this.keys.action && (this.keys.x || this.keys.y)) { - // Running - this.rate = 0.08; - } - - // Change walking direction - if (this.keys.x == -1) { - // Left - this.direction = 3; - } - if (this.keys.x == 1) { - // Right - this.direction = 2; - } - if (this.keys.y == -1) { - // Down - this.direction = 0; - } - if (this.keys.y == 1) { - // Up - this.direction = 1; - } - - this.frames.forEach(element => { - element.y = this.direction; - }); + super.update(dt); // Animate - if (this.curTime > rate) { - this.frame = frames[this.curFrame++ % frames.length]; - this.curTime -= rate; + if (this.keys.x == -1) { + // Left + (this.keys.action) ? + this.anims.play("run_w") : this.anims.play("walk_w"); + } else if (this.keys.x == 1) { + // Right + (this.keys.action) ? + this.anims.play("run_e") : this.anims.play("walk_e"); + } else if (this.keys.y == -1) { + // Up + (this.keys.action) ? + this.anims.play("run_n") : this.anims.play("walk_n"); + } else if (this.keys.y == 1) { + // Down + (this.keys.action) ? + this.anims.play("run_s") : this.anims.play("walk_s"); + } else { + // Idle + this.anims.stop(); + } + + // Move + if (this.keys.x == -1) { + // Left + this.pos.x += this.keys.x * dt * (600 * (1 - (this.keys.action) ? + this.rate.running : this.rate.walking )); + } + if (this.keys.x == 1) { + // Right + this.pos.x += this.keys.x * dt * (600 * (1 - (this.keys.action) ? + this.rate.running : this.rate.walking )); + } + if (this.keys.y == -1) { + // Up + this.pos.y += this.keys.y * dt * (600 * (1 - (this.keys.action) ? + this.rate.running : this.rate.walking )); + } + if (this.keys.y == 1) { + // Down + this.pos.y += this.keys.y * dt * (600 * (1 - (this.keys.action) ? + this.rate.running : this.rate.walking )); } } } diff --git a/src/game.js b/src/game.js index 157adf4..ce2c0b9 100644 --- a/src/game.js +++ b/src/game.js @@ -1,7 +1,7 @@ const { ipcRenderer, remote } = require("electron"); var asdf = require("asdf-games"); -const { Game, KeyControls, MouseControls } = asdf; +const { Game, KeyControls, MouseControls, Camera } = asdf; const window = { w: 640, h: 320 }; @@ -16,11 +16,13 @@ var Level = require("./src/levels/level.js"); const mouseAim = new MouseControls(document.getElementById("board")); const keys = new KeyControls(); -var player = new Player(keys, window); -var level = new Level(window, keys, player); +var level = new Level(); +var player = new Player(keys, window, level); +const camera = new Camera(player, window, { w: level.w * level.scale.x, h: level.h * level.scale.y }); -scene.add(level); -scene.add(player); +scene.add(camera); +camera.add(level); +camera.add(player); game.run(() => { if (mouseAim.isDown) { diff --git a/src/levels/level.js b/src/levels/level.js index dc0de0d..db799d4 100644 --- a/src/levels/level.js +++ b/src/levels/level.js @@ -1,43 +1,41 @@ var asdf = require("asdf-games"); const { Texture, TileMap } = asdf; -const texture = new Texture("./res/placeholder.png"); +const texture = new Texture("./res/tilemap.png"); +const tiles = require("../../res/tilemap.min.js"); -const levelSize = { w: 640, h: 320 }; -var levelData = []; +const levelSize = { w: 480, h: 240 }; +var levelData = [ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, + 3, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 3, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 6, + 13, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 8 +]; -for (let index = 0; index < ((levelSize.w / 32) * (levelSize.h / 32)); index++) { - levelData.push({ x: 0, y: 0 }); -} +var levelTiles = levelData.map(function(e) { + return { x: (tiles[e].x / 16), y: (tiles[e].y / 16), walkable: tiles[e].walkeable }; +}); +console.log(levelTiles); class Level extends TileMap { - constructor (window, keys, player) { - super(levelData, levelSize.w / 32, levelSize.h / 32, 32, 32, texture); - this.pos.x = (window.w / 2) - (levelSize.w / 2); - this.pos.y = (window.h / 2) - (levelSize.h / 2); + constructor () { + super(levelTiles, levelSize.w / 16, levelSize.h / 16, 16, 16, texture); + this.pos = { x: 0, y: 0 }; + this.w = levelSize.w; + this.h = levelSize.h; + this.scale = { x: 2, y: 2 }; - this.keys = keys; - this.player = player; - } - - update(dt) { - // Change walking direction - if (this.keys.x == -1) { - // Left - this.pos.x = this.pos.x + dt * (1 / this.player.rate) * 10; - } - if (this.keys.x == 1) { - // Right - this.pos.x = this.pos.x - dt * (1 / this.player.rate) * 10; - } - if (this.keys.y == -1) { - // Down - this.pos.y = this.pos.y + dt * (1 / this.player.rate) * 10; - } - if (this.keys.y == 1) { - // Up - this.pos.y = this.pos.y - dt * (1 / this.player.rate) * 10; - } } }