Centralize player initialization to single addPlayer() method
Moved all player scene/physics setup from Player constructor to GameScene.addPlayer() to create a single source of truth for adding players. This prevents players from auto-rendering when instantiated and gives better control over when/how players are added to the scene. Changes: - Remove scene.add.existing() and physics setup from Player constructor - Move physics body initialization to GameScene.addPlayer() - Comment out second test player for single-player debugging 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
71082f713a
commit
a8daedf53b
@ -91,17 +91,8 @@ export class Player extends Phaser.GameObjects.Container {
|
|||||||
// Listen for goal events
|
// Listen for goal events
|
||||||
this.scene.events.on('goal', this.onGoal, this);
|
this.scene.events.on('goal', this.onGoal, this);
|
||||||
|
|
||||||
// Add to scene
|
// Note: Player must be added to scene via scene.add.existing(player) and scene.physics.add.existing(player)
|
||||||
scene.add.existing(this);
|
// This is handled by GameScene.addPlayer() method, which also sets up the physics body
|
||||||
scene.physics.add.existing(this);
|
|
||||||
|
|
||||||
this.body = this.body as Phaser.Physics.Arcade.Body;
|
|
||||||
|
|
||||||
// Set physics body (circular, centered on container)
|
|
||||||
const radius = this.playerPosition === 'G' ? PLAYER_RADIUS_GOALIE : PLAYER_RADIUS_SKATER;
|
|
||||||
this.body.setCircle(radius);
|
|
||||||
this.body.setOffset(-radius, -radius); // Center the body on the container
|
|
||||||
this.body.setCollideWorldBounds(true);
|
|
||||||
|
|
||||||
this.createSprite();
|
this.createSprite();
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,8 @@ import {
|
|||||||
SHOT_SPEED,
|
SHOT_SPEED,
|
||||||
TACKLE_SUCCESS_MODIFIER,
|
TACKLE_SUCCESS_MODIFIER,
|
||||||
TACKLE_PUCK_LOOSE_CHANCE,
|
TACKLE_PUCK_LOOSE_CHANCE,
|
||||||
|
PLAYER_RADIUS_GOALIE,
|
||||||
|
PLAYER_RADIUS_SKATER,
|
||||||
TACKLE_MIN_SPEED,
|
TACKLE_MIN_SPEED,
|
||||||
TACKLE_ANGLE_HEAD_ON_THRESHOLD,
|
TACKLE_ANGLE_HEAD_ON_THRESHOLD,
|
||||||
TACKLE_ANGLE_SIDE_THRESHOLD,
|
TACKLE_ANGLE_SIDE_THRESHOLD,
|
||||||
@ -89,20 +91,20 @@ export class GameScene extends Phaser.Scene {
|
|||||||
{ speed: 70, skill: 75, tackling: 70, balance: 75, handling: 80 }
|
{ speed: 70, skill: 75, tackling: 70, balance: 75, handling: 80 }
|
||||||
);
|
);
|
||||||
|
|
||||||
// Create one away defender at (15, 0) - right side for defending
|
|
||||||
const awayDefender = new Player(
|
|
||||||
this,
|
|
||||||
'away-LD',
|
|
||||||
'away',
|
|
||||||
'LD',
|
|
||||||
-15,
|
|
||||||
0,
|
|
||||||
{ speed: 80, skill: 70, tackling: 85, balance: 80, handling: 65 }
|
|
||||||
);
|
|
||||||
|
|
||||||
// Add players to tracking array and physics group
|
// Add players to tracking array and physics group
|
||||||
this.addPlayer(homeCenter);
|
this.addPlayer(homeCenter);
|
||||||
this.addPlayer(awayDefender);
|
|
||||||
|
// Commented out for testing single player
|
||||||
|
// const awayDefender = new Player(
|
||||||
|
// this,
|
||||||
|
// 'away-LD',
|
||||||
|
// 'away',
|
||||||
|
// 'LD',
|
||||||
|
// -15,
|
||||||
|
// 0,
|
||||||
|
// { speed: 80, skill: 70, tackling: 85, balance: 80, handling: 65 }
|
||||||
|
// );
|
||||||
|
// this.addPlayer(awayDefender);
|
||||||
|
|
||||||
// Setup player-player collisions for entire group
|
// Setup player-player collisions for entire group
|
||||||
this.physics.add.collider(this.playerGroup, this.playerGroup, (obj1, obj2) => {
|
this.physics.add.collider(this.playerGroup, this.playerGroup, (obj1, obj2) => {
|
||||||
@ -114,6 +116,18 @@ export class GameScene extends Phaser.Scene {
|
|||||||
* Add a player to the scene (can be called at any time for debugging)
|
* Add a player to the scene (can be called at any time for debugging)
|
||||||
*/
|
*/
|
||||||
addPlayer(player: Player) {
|
addPlayer(player: Player) {
|
||||||
|
// Add to scene and enable physics
|
||||||
|
this.add.existing(player);
|
||||||
|
this.physics.add.existing(player);
|
||||||
|
|
||||||
|
// Setup physics body
|
||||||
|
player.body = player.body as Phaser.Physics.Arcade.Body;
|
||||||
|
const radius = player.playerPosition === 'G' ? PLAYER_RADIUS_GOALIE : PLAYER_RADIUS_SKATER;
|
||||||
|
player.body.setCircle(radius);
|
||||||
|
player.body.setOffset(-radius, -radius);
|
||||||
|
player.body.setCollideWorldBounds(true);
|
||||||
|
|
||||||
|
// Add to tracking arrays and groups
|
||||||
this.players.push(player);
|
this.players.push(player);
|
||||||
this.playerGroup.add(player);
|
this.playerGroup.add(player);
|
||||||
this.behaviorTrees.set(player.id, new BehaviorTree(player));
|
this.behaviorTrees.set(player.id, new BehaviorTree(player));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user