diff options
Diffstat (limited to 'test-client')
-rw-r--r-- | test-client/main.ts | 12 | ||||
-rw-r--r-- | test-client/movement.ts | 5 | ||||
-rw-r--r-- | test-client/visual.ts | 18 |
3 files changed, 22 insertions, 13 deletions
diff --git a/test-client/main.ts b/test-client/main.ts index 7146a3d1..d3d1eb54 100644 --- a/test-client/main.ts +++ b/test-client/main.ts @@ -2,7 +2,7 @@ import { player_movement_update } from "./movement.ts"; import { Gamedata, ItemIndex, Message, PacketC, PacketS, PlayerID, TileIndex } from "./protocol.ts"; -import { V2, add_v2, lerp_exp_v2_mut, normalize, lerp_exp } from "./util.ts"; +import { V2, add_v2, lerp_exp_v2_mut, normalize, lerp_exp, sub_v2, length } from "./util.ts"; import { draw_ingame, draw_wait } from "./visual.ts"; export let ctx: CanvasRenderingContext2D; @@ -76,7 +76,7 @@ export const items_removed = new Set<ItemData>() export let data: Gamedata = { item_names: [], tile_names: [], spawn: [0, 0], tile_collide: [], tile_interact: [] } -let my_id: PlayerID = -1 +export let my_id: PlayerID = -1 export const camera: V2 = { x: 0, y: 0 } export const interact_target_anim: V2 = { x: 0, y: 0 } export let interact_possible_anim: number = 0 @@ -109,10 +109,12 @@ function packet(p: PacketC) { players.delete(p.id) break; case "position": { - if (p.player == my_id) return; // we know better where we are const pl = players.get(p.player)! - pl.x = p.pos[0] - pl.y = p.pos[1] + const pos = { x: p.pos[0], y: p.pos[1] } + const dist = length(sub_v2(pl, pos)); + if (p.player == my_id && dist < 1) return; // we know better where we are + pl.x = pos.x + pl.y = pos.y pl.rot = p.rot break; } diff --git a/test-client/movement.ts b/test-client/movement.ts index 88c47c33..cd5cc1d5 100644 --- a/test-client/movement.ts +++ b/test-client/movement.ts @@ -3,12 +3,13 @@ import { tiles, players, PlayerData } from "./main.ts"; import { V2, normalize, length, sub_v2, lerp_exp_v2_mut } from "./util.ts"; export const PLAYER_SIZE = 0.4; +export const PLAYER_SPEED = 25; export function player_movement_update(p: PlayerData, dt: number, input: V2) { if (length(input) > 0.1) lerp_exp_v2_mut(p.facing, input, dt * 10.) p.rot = Math.atan2(p.facing.x, p.facing.y) - p.vel.x += input.x * dt * 25 - p.vel.y += input.y * dt * 25 + p.vel.x += input.x * dt * PLAYER_SPEED + p.vel.y += input.y * dt * PLAYER_SPEED p.x += p.vel.x * dt p.y += p.vel.y * dt collide_player(p, dt) diff --git a/test-client/visual.ts b/test-client/visual.ts index 60d8e7a0..e23f0f01 100644 --- a/test-client/visual.ts +++ b/test-client/visual.ts @@ -1,4 +1,4 @@ -import { ItemData, MessageData, PlayerData, TileData, camera, canvas, ctx, data, get_interact_target, interact_active_anim, interact_possible_anim, interact_target_anim, items_removed, keys_down, players, tiles } from "./main.ts"; +import { ItemData, MessageData, PlayerData, TileData, camera, canvas, ctx, data, get_interact_target, interact_active_anim, interact_possible_anim, interact_target_anim, items_removed, keys_down, my_id, players, tiles } from "./main.ts"; import { PLAYER_SIZE } from "./movement.ts"; import { FALLBACK_TILE, ITEMS, TILES, FALLBACK_ITEM } from "./tiles.ts"; import { V2, ceil_v2, floor_v2 } from "./util.ts"; @@ -64,14 +64,20 @@ export function draw_ingame() { if (keys_down.has("KeyP")) { camera_zoom = 0.05 - ctx.fillStyle = "white" - ctx.textAlign = "left" - ctx.textBaseline = "bottom" - ctx.font = "20px sans-serif" - ctx.fillText(`interact = ${JSON.stringify(get_interact_target())}`, 10, 30) + draw_debug() } else { camera_zoom = 0.1 } } +function draw_debug() { + ctx.fillStyle = "white" + ctx.textAlign = "left" + ctx.textBaseline = "bottom" + ctx.font = "20px sans-serif" + ctx.fillText(`position = ${JSON.stringify(players.get(my_id)?.anim_position)}`, 10, 30) + ctx.fillText(`velocity = ${JSON.stringify(players.get(my_id)?.vel)}`, 10, 50) + ctx.fillText(`interact = ${JSON.stringify(get_interact_target())}`, 10, 70) +} + function draw_tile(tile: TileData) { ctx.save() ctx.translate(tile.x + 0.5, tile.y + 0.5) |