From c11dcf9076e5c1d2d0c5f7a5aa85951b1f2a0e47 Mon Sep 17 00:00:00 2001 From: StrangeD0s Date: Sun, 19 Feb 2023 01:05:41 +0100 Subject: [PATCH] add vehicle test --- js/main.js | 1 + js/render.js | 20 ++++++++++++++++++++ js/setup.js | 8 ++++++++ js/update.js | 21 +++++++++++++++++++++ js/variables.js | 14 ++++++++++++++ levels/level1.js | 11 +++++++++++ levels/levelObjects.js | 9 +++++++++ 7 files changed, 84 insertions(+) diff --git a/js/main.js b/js/main.js index c5fd224..b4bb3d2 100644 --- a/js/main.js +++ b/js/main.js @@ -194,6 +194,7 @@ function main() { setup(currentLevel.levelData) // ! Was brauche ich hier, damit das variabel alle Level laden kann? //console.log('log monsters ', monsters) + console.log('log updateVehicle ', vehicles) frame() } diff --git a/js/render.js b/js/render.js index 0f42330..94e5284 100644 --- a/js/render.js +++ b/js/render.js @@ -26,6 +26,7 @@ function render(ctx, frame, dt, thiscurrentLevel) { renderMonsters(ctx, enemyAtlas, dt, frame) renderTreasure(ctx, itemsAtlas, dt, frame) renderPickups(ctx, itemsAtlas, dt, frame) + renderVehicless(ctx, enemyAtlas, dt, frame) renderForeground(ctx, thiscurrentLevel.foregroundAtlas, fgCells) renderLiquids(ctx, thiscurrentLevel.foregroundAtlas, fgCells) @@ -202,6 +203,25 @@ function renderPlayer(ctx, spriteAtlas, dt, frame) { ctx.globalAlpha = 1 } +function renderVehicless(ctx, spriteAtlas, dt, frame) { + ctx.fillStyle = COLOR.BRICK + var n, max, vehicle + for (n = 0, max = vehicles.length; n < max; n++) { + vehicle = vehicles[n] + + if (vehicle.sprites === undefined && !vehicle.dead) + ctx.fillRect( + vehicle.x + vehicle.dx * dt, + vehicle.y + vehicle.dy * dt, + 32, + 32 + ) + if (vehicle.sprites !== undefined && !vehicle.dead) { + //drawSprite(vehicle, spriteAtlas, dt, frame) + } + } +} + function renderHud(ctx, spriteAtlas, dt, frame) { var n, max const hudScaling = scalingFactor / 2 diff --git a/js/setup.js b/js/setup.js index 396fc6f..ac12923 100644 --- a/js/setup.js +++ b/js/setup.js @@ -38,6 +38,11 @@ function setup(map) { case 'player': player = entity break + + case 'vehicle': + vehicles.push(entity) + break + case 'monster': monsters.push(entity) break @@ -91,6 +96,8 @@ function setupEntity(obj, entityType, entityProperties, entityName) { ? health : entityName == 'extralife' ? extralife + : entityName == 'vehicle' + ? vehicle : entityName == 'door' ? null : null @@ -123,6 +130,7 @@ function setupEntity(obj, entityType, entityProperties, entityName) { entity.monster = entityType == 'monster' entity.slimeMonster = entityType == 'slimeMonster' entity.player = entityType == 'player' + entity.vehicle = entityType == 'vehicle' entity.treasure = entityType == 'treasure' entity.ammo = entityType == 'ammo' entity.health = entityType == 'health' diff --git a/js/update.js b/js/update.js index fc1c1ee..56c4908 100644 --- a/js/update.js +++ b/js/update.js @@ -6,6 +6,7 @@ function update(dt) { updatePlayer(dt) updateBullets(dt) updateMonsters(dt) + updateVehicles(dt) checkTreasure() checkPickups() checkLiquids() @@ -20,6 +21,23 @@ function updatePlayer(dt) { updateEntity(player, dt) } +function updateVehicles(dt) { + var n, max + for (n = 0, max = vehicles.length; n < max; n++) + updateVehicle(vehicles[n], dt) +} + +function updateVehicle(vehicle, dt) { + updateEntity(vehicle, dt) + if ( + overlap(player.x, player.y, TILE, TILE, vehicle.x, vehicle.y, TILE, TILE) + ) { + if (player.dy > 0 && vehicle.y - player.y > TILE / 2) + // ! Wie mache ich hier den collision check? Achtung, die height und width des Vehicles ist immer noch 16x16 + console.log('log collision vehicle!') + } +} + function updateMonsters(dt) { var n, max for (n = 0, max = monsters.length; n < max; n++) @@ -28,6 +46,7 @@ function updateMonsters(dt) { function updateMonster(monster, dt) { // monster.slimeMonster && console.log('log monster ', monster) + if (!monster.dead) { updateEntity(monster, dt) if ( @@ -332,6 +351,8 @@ function collectTreasure(t) { } function updateEntity(entity, dt) { + entity.vehicle && console.log('log entity ', entity) + var wasleft = entity.dx < 0, wasright = entity.dx > 0, falling = entity.falling, diff --git a/js/variables.js b/js/variables.js index 97b7921..43a40ad 100644 --- a/js/variables.js +++ b/js/variables.js @@ -230,6 +230,7 @@ let fps = 60, monsters = [], pickups = [], treasure = [], + vehicles = [], doors = [], // ! Hier sammel ich alle Door Objekte. liquids = [], // ! Alle Bereich, die mit Wasser gefüllt sind. bullets = [], @@ -334,6 +335,19 @@ let theme = { level1: new music('./audio/music/8BitCave.wav', musicVolume), } +let submarine = { + collected: 0, + killed: 0, + maxHitpoints: 5, + currentHitpoints: 3, + vul: true, + hurt: false, + interact: false, + shooting: false, + swimming: false, + diving: false, +} + let globalPlayer = { collected: 0, killed: 0, diff --git a/levels/level1.js b/levels/level1.js index ed97b55..7c102d2 100644 --- a/levels/level1.js +++ b/levels/level1.js @@ -818,6 +818,17 @@ const level1 = { x: 176, y: 351.375, }, + { + class: 'vehicle', + height: 32, + id: 30, + name: 'vehicle', + rotation: 0, + visible: true, + width: 32, + x: 95, + y: 590, + }, ], opacity: 1, type: 'objectgroup', diff --git a/levels/levelObjects.js b/levels/levelObjects.js index 47a0aeb..a5b6db8 100644 --- a/levels/levelObjects.js +++ b/levels/levelObjects.js @@ -36,6 +36,15 @@ let playerObject = { }, } +let vehicle = { + class: 'vehicle', + maxHitpoints: 5, + currentHitpoints: 5, + maxdx: 3, + vul: true, + hurt: false, +} + let bounderMonster = { class: 'monster', currentHitpoints: 2,