private ForvardVectorMovingRange GetForwardForGost(AbstractGhost ghost) { ForvardVectorMovingRange res; if (ghost.Path == null) { res.VectorType = "Y"; res.range = 0; ghost.Dispose(); GC.Collect(); return(res); } if (ghost.Path.Count < 2) { res.VectorType = "Y"; res.range = 0; return(res); } if (ghost.Path.Count <= _pathIndex) { Grid.SetRow(ghost.Model, ghost.FieldPointNow.X); Grid.SetColumn(ghost.Model, ghost.FieldPointNow.Y); _pathIndex = 1; } double range = 50 * ImageCreator._scale; var tmp = ghost.FieldPointNow - ghost.Path[_pathIndex]; if (tmp.Y == -1)//right { res.VectorType = "X"; res.range = -range; } else if (tmp.Y == 1)//left { res.VectorType = "X"; res.range = range; } else if (tmp.X == 1)//up { res.VectorType = "Y"; res.range = range; } else if (tmp.X == -1)//down { res.VectorType = "Y"; res.range = -range; } else { res.VectorType = "Y"; res.range = range; } ghost.FieldPointNow = ghost.Path[_pathIndex]; _pathIndex++; Grid.SetRow(ghost.Model, ghost.FieldPointNow.X); Grid.SetColumn(ghost.Model, ghost.FieldPointNow.Y); return(res); }
private void GhostAnimationCoplete(AbstractGhost ghost, double time) { if (_pathIndex == 0)//ExitPoint { return; } var pacman = PacmanPosition?.Invoke(ghost); if (ghost.Path == null) { ghost.Dispose(); GC.Collect(); } if (_pathIndex < ghost.Path.Count) { MoveGost(ghost, ghost.Speed); } else { ghost.Behavior.Think(ghost, pacman); _pathIndex = 1; PointAnimationHelperNotify?.Invoke(ghost); } }