Пример #1
0
        public override void CalculateDirection()
        {
            if ((mode == GhostMode.Chase || mode == GhostMode.Scatter) && mode != Game.ghostMode)
            {
                nextDirection = DirectionHelper.Opposite(direction);
                mode          = Game.ghostMode;
            }
            else
            {
                double d = 0;
                if (nodeFrom.neighbors[direction] != null)
                {
                    d = Helper.CalculateDistance(nodeFrom.x, nodeFrom.y, nodeFrom.neighbors[direction].node.x, nodeFrom.neighbors[direction].node.y);
                }

                if (Math.Abs(distance - d) < speed)
                {
                    CalculateTarget();
                    double minDistance = -1;

                    Node baseNode = nodeFrom;
                    if (baseNode.neighbors[direction] != null)
                    {
                        baseNode = baseNode.neighbors[direction].node;
                    }
                    foreach (Direction key in baseNode.neighbors.Keys)
                    {
                        if (baseNode.neighbors[key] != null)
                        {
                            double distanceBetween = Helper.CalculateDistance(baseNode.neighbors[key].node.x, baseNode.neighbors[key].node.y, targetX, targetY);
                            if ((distanceBetween < minDistance || minDistance == -1) && !DirectionHelper.IsOpposite(direction, key))
                            {
                                minDistance   = distanceBetween;
                                nextDirection = key;
                            }
                        }
                    }
                }
            }
        }