Newer
Older
PixelPaintWar / apps / server / src / managers / GameManager.ts
// src/managers/GameManager.ts
import { Player } from "../entities/Player.js";

export class GameManager {
  // IDをキーにしてプレイヤーを保存する
  private players: Map<string, Player>;

  constructor() {
    this.players = new Map();
  }

  // プレイヤー追加
  addPlayer(id: string): Player {
    const player = new Player(id);
    player.x = 150; // 初期位置
    player.y = 150;
    this.players.set(id, player);
    return player;
  }

  // プレイヤー削除
  removePlayer(id: string) {
    this.players.delete(id);
  }
  // プレイヤー情報を取得
  getPlayer(id: string) {
    return this.players.get(id);
  }
  // プレイヤー移動
  movePlayer(id: string, x: number, y: number) {
    const player = this.players.get(id);
    if (player) {
      
      // ▼▼▼ デバッグ用ログ(何が送られてきてるか犯人探し) ▼▼▼
      // これでターミナルに "Move: x=null" とか出たら通信の問題です
      console.log(`Move Request -> ID:${id.slice(0,4)} x:${x} y:${y}`);

      
      if (typeof x !== "number" || typeof y !== "number" || isNaN(x) || isNaN(y)) {
        console.log("⚠️ 無効なデータなので無視しました");
        return;
      }
      

      const speed = 10.0; // スピード

      player.x += x * speed;
      player.y -= y * speed;

      // 画面端の制限
      if (player.x < 0) player.x = 0;
      if (player.x > 300) player.x = 300;
      if (player.y < 0) player.y = 0;
      if (player.y > 300) player.y = 300;
    }
  }

  // 全プレイヤーのリストを返す(通信で送るため)
  getAllPlayers() {
    // Mapを配列({id, x, y, color}[])に変換
    return Array.from(this.players.values());
  }
}