Fixed desync issue for PacMan moves

This commit is contained in:
2026-06-20 14:12:18 +02:00
parent a4733b33b8
commit cb975c24b2
12 changed files with 2024 additions and 2109 deletions

View File

@@ -50,9 +50,7 @@ namespace Marro.PacManUdon
private Ghost blinky;
private ScoreBonusDisplay scoreBonusDisplay;
private Vector3 startPosition;
private Quaternion startRotation;
private Vector2 startPosition;
private Vector2 homePosition;
private Vector2 idlePosition1;
private Vector2 idlePosition2;
@@ -110,7 +108,6 @@ namespace Marro.PacManUdon
scoreBonusDisplay = transform.Find("ScoreBonusDisplay").gameObject.GetComponent<ScoreBonusDisplay>();
scoreBonusDisplay.Initialize();
startPosition = startTransform.localPosition;
startRotation = startTransform.localRotation;
frozenState = PacManGhostFrozenState.Frozen;
@@ -124,7 +121,7 @@ namespace Marro.PacManUdon
public void Reset()
{
// Debug.Log($"{gameObject} Reset!");
transform.SetLocalPositionAndRotation(startPosition, startRotation);
SetPosition(startPosition);
offGrid = true;
isScared = false;
@@ -393,25 +390,26 @@ namespace Marro.PacManUdon
default:
return gridPosition;
case PacManGhostType.Blinky: // Chase PacMan directly
return PositionToGrid(pacMan.transform.localPosition);
return PositionToGrid(pacMan.GetPosition());
case PacManGhostType.Pinky: // Try to get ahead of PacMan
return GetTargetAheadOfPacMan(4);
case PacManGhostType.Inky: // Try to attack from the opposite side of Blinky
var blinkyPosition = PositionToGrid(blinky.transform.localPosition);
var blinkyPosition = PositionToGrid(blinky.GetPosition());
return ((GetTargetAheadOfPacMan(2) - blinkyPosition) * 2) + blinkyPosition;
case PacManGhostType.Clyde: // Chase PacMan, but retreat to corner if PacMan gets to close
if (Vector2.Distance(gridPosition, PositionToGrid(pacMan.transform.localPosition)) < 8)
var pacManPosition = PositionToGrid(pacMan.GetPosition());
if (Vector2.Distance(gridPosition, pacManPosition) < 8)
{
return cornerPosition;
}
return PositionToGrid(pacMan.transform.localPosition);
return pacManPosition;
}
}
private Vector2 GetTargetAheadOfPacMan(int tilesInFront)
{
var direction = pacMan.GetTargetDirection();
var result = PositionToGrid(pacMan.transform.localPosition) + directionVectors[(int)direction] * tilesInFront;
var result = PositionToGrid(pacMan.GetPosition()) + directionVectors[(int)direction] * tilesInFront;
if (direction == Direction.Up) // Reproducing a bug in the original game
{