summaryrefslogtreecommitdiff
path: root/test-client
diff options
context:
space:
mode:
Diffstat (limited to 'test-client')
-rw-r--r--test-client/main.ts12
-rw-r--r--test-client/movement.ts5
-rw-r--r--test-client/visual.ts18
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)