コード例 #1
0
    /// <summary>
    /// Moves main camera
    /// </summary>
    /// <param name="delta"></param>
    /// <returns></returns>
    public bool Move_Camera(Map.Direction direction)
    {
        if (Game.Instance.State != Game.GameState.RUNNING)
        {
            return(false);
        }
        bool success = true;

        switch (direction)
        {
        case Map.Direction.North:
            Camera.main.transform.Translate(new Vector3(0.0f, speed, 0.0f));
            break;

        case Map.Direction.East:
            Camera.main.transform.Translate(new Vector3(speed, 0.0f, 0.0f));
            break;

        case Map.Direction.South:
            Camera.main.transform.Translate(new Vector3(0.0f, -speed, 0.0f));
            break;

        case Map.Direction.West:
            Camera.main.transform.Translate(new Vector3(-speed, 0.0f, 0.0f));
            break;

        default:
            success = false;
            break;
        }
        return(success);
    }
コード例 #2
0
ファイル: Tile.cs プロジェクト: hafewa/Iceland-Unity
    public Vector2 edgeForDirection(Map.Direction direction)
    {
        float x = -1.0f, y = -1.0f;

        switch (direction)
        {
        case Map.Direction.North:
            x = northX;
            y = northY;
            break;

        case Map.Direction.South:
            x = southX;
            y = southY;
            break;

        case Map.Direction.East:
            x = eastX;
            y = eastY;
            break;

        case Map.Direction.West:
            x = westX;
            y = westY;
            break;
        }

        return(new Vector2(x, y));
    }
コード例 #3
0
    public void Move(Map.Direction direction)
    {
        switch (direction)
        {
        case Map.Direction.Up:
            map.UpdateUnitPosition(this.gameObject, this.yPosition + 1, this.xPosition);
            this.yPosition += 1;
            break;

        case Map.Direction.Down:
            map.UpdateUnitPosition(this.gameObject, this.yPosition - 1, this.xPosition);
            this.yPosition -= 1;
            break;

        case Map.Direction.Left:
            map.UpdateUnitPosition(this.gameObject, this.yPosition, this.xPosition + 1);
            this.xPosition -= 1;
            break;

        case Map.Direction.Right:
            map.UpdateUnitPosition(this.gameObject, this.yPosition, this.xPosition + 1);
            this.xPosition -= 1;
            break;

        default:
            break;
        }
    }
コード例 #4
0
ファイル: Tile.cs プロジェクト: hafewa/Iceland-Unity
    public bool Walkable(Tile fromTile, Map.Direction directionOfTravel)
    {
        if (validDirections == ValidDirection.None || fromTile.validDirections == ValidDirection.None)
        {
            return(false);
        }

        ValidDirection toDirectionMask   = ValidDirection.None;
        ValidDirection fromDirectionMask = ValidDirection.None;

        switch (directionOfTravel)
        {
        case Map.Direction.North:
            toDirectionMask   = ValidDirection.South;
            fromDirectionMask = ValidDirection.North;
            break;

        case Map.Direction.South:
            toDirectionMask   = ValidDirection.North;
            fromDirectionMask = ValidDirection.South;
            break;

        case Map.Direction.East:
            toDirectionMask   = ValidDirection.West;
            fromDirectionMask = ValidDirection.East;
            break;

        case Map.Direction.West:
            toDirectionMask   = ValidDirection.East;
            fromDirectionMask = ValidDirection.West;
            break;
        }

        return(((validDirections & toDirectionMask) != ValidDirection.None) && ((fromTile.validDirections & fromDirectionMask) != ValidDirection.None));
    }
コード例 #5
0
        public override void Update(GameTime gameTime)
        {
            if (pacman.Killed)
            {
                return;
            }

            KeyboardState keyboardState = Keyboard.GetState();

            mainDirection = lastDirection;

            Keys[] keys = lastKeyboardState.GetPressedKeys();

            if (keys.Length > 0)
            {
                Keys key = keys[0];

                if (lastKeyboardState.IsKeyDown(key))
                {
                    if (keyboardState.IsKeyUp(key))
                    {
                        switch (key)
                        {
                        case Keys.Right:
                            mainDirection = Map.Direction.Right;
                            break;

                        case Keys.Down:
                            mainDirection = Map.Direction.Down;
                            break;

                        case Keys.Left:
                            mainDirection = Map.Direction.Left;
                            break;

                        case Keys.Up:
                            mainDirection = Map.Direction.Up;
                            break;
                        }

                        secondDirection = mainDirection;
                    }
                }
            }

            if (mainDirection.Equals(secondDirection))
            {
                UpdatePacmanPosition(mainDirection);
            }
            else
            {
                UpdatePacmanPosition(mainDirection);
                UpdatePacmanPosition(secondDirection);
            }

            lastKeyboardState = keyboardState;

            base.Update(gameTime);
        }
コード例 #6
0
        public static int[] InDirectionFrom(int[] coord, Map.Direction direction)
        {
            int[] newCoord = new int[] { coord[0], coord[1] };
            switch (direction)
            {
            case Map.Direction.N:
                newCoord[1]--;
                break;

            case Map.Direction.NW:
                if (coord[0] % 2 == 0)
                {
                    newCoord[1]--;
                }
                newCoord[0]--;
                break;

            case Map.Direction.W:
                newCoord[0] -= 2;
                break;

            case Map.Direction.SW:
                if (coord[0] % 2 == 1)
                {
                    newCoord[1]++;
                }
                newCoord[0]--;
                break;

            case Map.Direction.S:
                newCoord[1]++;
                break;

            case Map.Direction.SE:
                if (coord[0] % 2 == 1)
                {
                    newCoord[1]++;
                }
                newCoord[0]++;
                break;

            case Map.Direction.E:
                newCoord[0] += 2;
                break;

            case Map.Direction.NE:
                if (coord[0] % 2 == 0)
                {
                    newCoord[1]--;
                }
                newCoord[0]++;
                break;
            }
            return(newCoord);
        }
コード例 #7
0
        /// <summary>
        /// Update the direction of the cahracter
        /// </summary>
        /// <param name="pDirection">The new direction</param>
        public void SetDirection(Map.Direction pDirection)
        {
            // Make sure it's not the same direction as it's already facing
            if (mDirection != pDirection)
            {
                mDirection = pDirection;

                // Update the animation
                UpdateAnimation(mIsIdle);
            }
        }
コード例 #8
0
ファイル: Tortle.cs プロジェクト: Al3x-x3lA/letsgetchecked
        public Tortle(Point startPosition, Map.Direction facing)
        {
            _Position = startPosition;
            Facing    = facing;

            DirectionInOrder = new[] {
                Map.Direction.North,
                Map.Direction.East,
                Map.Direction.South,
                Map.Direction.West
            };

            HealthPoint = 1;
        }
コード例 #9
0
        internal List <Result> MoveDirection(Battle b, Map.Direction direction)
        {
            var results = new List <Result>();

            if (direction == Map.Direction.Up) //only swimming
            {
                var blockIn    = b.map.BlockAt(this.Position);
                var blockAbove = b.map.BlockAt(this.Position + new Vector3Int(0, 0, 1));
                if (blockIn.Flugen && blockAbove.Flugen)
                {
                    MoveTo(b, this.Position + new Vector3Int(0, 0, 1), 1);
                    return(results);
                }
            }
            else
            {
                var blockIn          = b.map.BlockAt(this.Position);
                var blockOn          = b.map.StandingOn(this);
                var destinationBlock = b.map.BlockAt(this.Position + Map.VectorFromDirection(direction));
                if (destinationBlock.Solid)
                {
                    //check for climbing
                    var blockAbove = b.map.BlockAt(this.Position + Map.VectorFromDirection(direction) +
                                                   new Vector3Int(0, 0, 1));
                    if (blockAbove.Solid)
                    {
                        results.Add(new Result(Result.ResultType.InvalidAction, "blocked", "cannot move there", null));
                    }
                    else
                    {
                        MoveTo(b, this.Position + Map.VectorFromDirection(direction) +
                               new Vector3Int(0, 0, 1), blockOn.MoveCost + 1);
                        return(results);
                    }
                }

                MoveTo(b, this.Position + Map.VectorFromDirection(direction), blockOn.MoveCost);
                //check for falling
                var newBlockOn = b.map.BlockAt(this.Position + new Vector3Int(0, 0, -1));
                var newBlockIn = b.map.BlockAt(this.Position);
                if (!newBlockOn.Solid && !newBlockIn.Flugen)
                {
                    results.AddRange(Fall(b, 0));
                }
                return(results);
            }

            throw new NotImplementedException();
        }
コード例 #10
0
        private Vector2 SetPosition(Map.Direction direction, int velocity)
        {
            Vector2 position = Vector2.Zero;

            switch (direction)
            {
            case Map.Direction.Right: position.X += velocity; break;

            case Map.Direction.Down: position.Y += velocity; break;

            case Map.Direction.Left: position.X -= velocity; break;

            case Map.Direction.Up: position.Y -= velocity; break;
            }

            return(position);
        }
コード例 #11
0
        public List <Result> MakeMove(Guid unitID, Map.Direction direction)
        {
            var unit = units.First(u => u.ID == unitID);

            if (unit.SideID != currentSide.ID)
            {
                return(null); //TODO: better message
            }

            if (unit.IsDead)
            {
                var results = new List <Result>();
                results.Add(new Result(Result.ResultType.InvalidAction, "dead", unit.Name + " is dead", null));
                return(results);
            }

            return(unit.MoveDirection(this, direction));
        }
コード例 #12
0
ファイル: NPC.cs プロジェクト: hafewa/Iceland-Unity
    public void CreateFromJSON(JSONNode node)
    {
        name             = node["name"];
        description      = node["description"];
        id               = node["id"];
        position         = NPC.MapPointFromJSON(node["position"]);
        initialDirection = NPC.DirectionFromString(node["direction"]);

        var triggersJSON = node["triggers"];

        if (triggersJSON != null)
        {
            for (int i = 0; i < triggersJSON.Count; i++)
            {
                ActionTrigger trigger = new ActionTrigger(triggersJSON[i]);
                triggers[trigger.type] = trigger;
            }
        }
    }
コード例 #13
0
        private Map.Direction GetDirection(Vector2 difference)
        {
            Map.Direction direction = Map.Direction.Right;

            switch (difference.X)
            {
            case -1: direction = Map.Direction.Left; break;

            case 1: direction = Map.Direction.Right; break;
            }

            switch (difference.Y)
            {
            case -1: direction = Map.Direction.Up; break;

            case 1: direction = Map.Direction.Down; break;
            }

            return(direction);
        }
コード例 #14
0
        //! Convert Map.Direction to LookDirection.
        public static LookDirection Convert(Map.Direction Dir)
        {
            LookDirection direction = LookDirection.EAST;

            switch (Dir)
            {
            case ja2.Map.Direction.EAST:
                direction = LookDirection.EAST;
                break;

            case ja2.Map.Direction.NORTH:
                direction = LookDirection.NORTH;
                break;

            case ja2.Map.Direction.NORTH_EAST:
                direction = LookDirection.NORTHEAST;
                break;

            case ja2.Map.Direction.NORTH_WEST:
                direction = LookDirection.NORTHWEST;
                break;

            case ja2.Map.Direction.SOUTH:
                direction = LookDirection.SOUTH;
                break;

            case ja2.Map.Direction.SOUTH_EAST:
                direction = LookDirection.SOUTHEAST;
                break;

            case ja2.Map.Direction.SOUTH_WEST:
                direction = LookDirection.SOUTHWEST;
                break;

            case ja2.Map.Direction.WEST:
                direction = LookDirection.WEST;
                break;
            }

            return(direction);
        }
コード例 #15
0
        private void UpdatePacmanPosition(Map.Direction direction)
        {
            position = Vector2.Zero;

            switch (direction)
            {
            case Map.Direction.Right: position.X += pacman.Velocity; rotation = 0f; break;

            case Map.Direction.Down: position.Y += pacman.Velocity; rotation = MathHelper.ToRadians(90f); break;

            case Map.Direction.Left: position.X -= pacman.Velocity; rotation = MathHelper.ToRadians(180f); break;

            case Map.Direction.Up: position.Y -= pacman.Velocity; rotation = MathHelper.ToRadians(270f); break;
            }

            pacman.UpdatePosition(position);

            if (pacman.IsIntersectsWithWalls())
            {
                pacman.UpdatePosition(-position);
            }
            else
            {
                if (pacman.IsIntersectsWithFood())
                {
                    pacman.Score += 10;

                    BallEated();

                    if (pacman.Map.FoodBlocks.Count == 0)
                    {
                    }
                }

                lastDirection   = direction;
                pacman.Rotation = rotation;
            }
        }
コード例 #16
0
ファイル: RangedUnit.cs プロジェクト: Ravphoen/POE_Task_1
        //implementing and overriding methods
        public override void Move(Map.Direction d)
        {
            switch (d)
            {
            case Map.Direction.North:
                ypos--;
                break;

            case Map.Direction.South:
                xpos++;
                break;

            case Map.Direction.East:
                ypos++;
                break;

            case Map.Direction.West:
                xpos--;
                break;

            default:
                break;
            }
        }
コード例 #17
0
    IEnumerator WalkAlongPath()
    {
        // currentPath could be replaced underneath us if the user
        // changes destination mid-walk.

        StopCoroutine("WalkToStep");
        while (currentPath.Count > 0)
        {
            MovementStep step = currentPath[0];
            currentPath.RemoveAt(0);

            animator.SetBool("Walking", true);

            Map.Direction newDirection = Map.CalculateDirectionTravelling(currentPosition, step.MapPoint);
            animator.SetInteger("Direction", (int)newDirection);

            MapPoint fromPoint = currentPosition;
            currentPosition = step.MapPoint;

            WalkingStep ws = new WalkingStep {
                fromPoint = fromPoint,
                step      = step,
                direction = newDirection
            };

            yield return(StartCoroutine("WalkToStep", ws));
        }

        animator.SetBool("Walking", false);
        walking = false;

        if (currentCompletionHandler != null)
        {
            currentCompletionHandler(true);
        }
    }
コード例 #18
0
ファイル: Map.cs プロジェクト: TheCombOvers/TowerDefense
 // assigns the x, y, and direction values
 public Intersection(int v1, int v2, Map.Direction dir)
 {
     x         = v1;
     y         = v2;
     direction = dir;
 }
コード例 #19
0
        public Outcome MoveCharacter(Character guy, Map.Direction dir)
        {
            var outcome = new Outcome();

            outcome.SideID = guy.SideID;

            if (!IsActiveAndControllable(guy))
            {
                outcome.Message.AppendLine(guy.Name + " cannot act at this time, is not activated");
                return(outcome);
            }

            if (guy.Incapacitated)
            {
                outcome.Message.AppendLine(guy.Name + " is incapacitated and cannot move");
                return(outcome);
            }

            var destination = guy.Pos + Map.DirectionToPosition[dir];

            if (!IsOpen(destination))
            {
                outcome.Message.AppendLine(guy.Name + " tried to move to " + destination +
                                           " but there is something there already");
                return(outcome); //blocked TODO: error
            }

            //has enough movement
            bool adjacentToOpponent = IsAdjacentToOpponent(guy.Pos, guy.SideID);

            if (adjacentToOpponent && guy.Stamina.Value < 1)
            {
                outcome.Message.AppendLine("Cannot move through threatened area without stamina");
                return(outcome);
            }

            int moveCost = map.GetTile(guy.Pos).MoveCostFor(guy);

            if (adjacentToOpponent)
            {
                moveCost++; //effective +1
            }
            if (moveCost > (guy.Move.Value + guy.Stamina.Value))
            {
                outcome.Message.AppendLine(guy.Name + " only has " + guy.Move.Value + " movement" +
                                           " remaining, but needs " + moveCost + " to move");
                return(outcome); //TODO: error
            }

            moveCost = map.GetTile(guy.Pos).MoveCostFor(guy);
            int staminaCost = adjacentToOpponent ? 1 : 0;

            guy.PayMovement(moveCost, staminaCost);

            var oldPos = guy.Pos;

            guy.Pos = destination;
            if (OnCharacterMoved != null)
            {
                OnCharacterMoved(this, new CharacterMovedEventArgs(guy.Name, guy.ID, oldPos, destination));
            }

            var steppedOn = map.GetTile(destination);

            steppedOn.CharacterEntered(this, guy); //TODO: better?

            outcome.Message.AppendLine(guy.Name + " moved to " + destination);
            outcome.UserID      = guy.ID;
            outcome.ActionTaken = "Move";
            outcome.PosTarget   = destination;
            return(outcome);
        }
コード例 #20
0
        private void UpdateEnemiesPositions()
        {
            foreach (Enemy enemy in enemies)
            {
                Stack <Vector2> roadPoints  = enemy.RoadPoints;
                Vector2         mapPosition = enemy.MapPosition;
                Map.Direction   direction   = enemy.Direction;

                if (mapPosition.Equals(roadPoints.Peek()))
                {
                    Vector2 point = roadPoints.Pop();

                    if (roadPoints.Count == 0)
                    {
                        enemy.DestinationPoint = map.FreeRandomPoint;
                        roadPoints             = roadSeeker.GetRoadPoints(enemy.MapPosition, enemy.DestinationPoint);

                        point = roadPoints.Pop();

                        enemy.RoadPoints = roadPoints;

                        if (enemy.Ghost)
                        {
                            EnemyRestored();

                            enemy.Velocity  = enemy.OriginalVelocity;
                            enemy.Ghost     = false;
                            enemy.Protected = isProtected;
                        }
                    }

                    Vector2 prePoint   = roadPoints.Pop();
                    Vector2 difference = prePoint - point;

                    enemy.Direction = GetDirection(difference);

                    enemy.UpdateTexture();

                    roadPoints.Push(prePoint);
                }

                if (enemy.IsIntersectsWithWalls())
                {
                    Vector2 basePosition = enemy.Position;

                    basePosition.X = mapPosition.X * enemy.Rectangle.Width;
                    basePosition.Y = mapPosition.Y * enemy.Rectangle.Height;

                    enemy.Position = basePosition;
                }

                Vector2 position = SetPosition(direction, enemy.Velocity);

                enemy.UpdatePosition(position);

                if (enemy.Rectangle.Intersects(map.Pacman.Rectangle))
                {
                    if (!enemy.Ghost)
                    {
                        if (!isProtected)
                        {
                            GhostEated();

                            map.Pacman.Score += 200;

                            enemy.RoadPoints = roadSeeker.GetRoadPoints(enemy.MapPosition, enemy.OriginalMapPosition);
                            enemy.Velocity   = 6;
                            enemy.Ghost      = true;
                            enemy.Protected  = true;

                            enemy.Position = new Vector2(
                                enemy.MapPosition.X * enemy.Rectangle.Width,
                                enemy.MapPosition.Y * enemy.Rectangle.Height);
                        }
                        else
                        {
                            map.Pacman.Killed = true;

                            PacmanDie();

                            foreach (Enemy en in enemies)
                            {
                                en.RoadPoints = roadSeeker.GetRoadPoints(en.OriginalMapPosition, map.FreeRandomPoint);
                            }
                        }
                    }
                }
            }
        }
コード例 #21
0
        public static void WallSelect(int x, int y, Map.Direction direction)
        {
            switch (direction)
            {
            case Map.Direction.Omni:
                WallSelect(x, y, Map.Direction.N);
                WallSelect(x, y, Map.Direction.S);
                break;

            case Map.Direction.N:
                MapDisplay.CurrentMap.TileAt(x, y).SelectWalls(!Deselect);
                break;

            case Map.Direction.NW:
                MapDisplay.CurrentMap.TileAt(x, y).SelectWall(!Deselect, true);
                break;

            case Map.Direction.W:
                WallSelect(x, y, Map.Direction.NW);
                WallSelect(x, y, Map.Direction.SW);
                break;

            case Map.Direction.SW:
                if (x % 2 == 0)
                {
                    MapDisplay.CurrentMap.TileAt(x + 1, y).SelectWall(!Deselect, false);
                }
                else
                {
                    MapDisplay.CurrentMap.TileAt(x + 1, y + 1).SelectWall(!Deselect, false);
                }
                break;

            case Map.Direction.S:
                if (x % 2 == 0)
                {
                    MapDisplay.CurrentMap.TileAt(x + 1, y).SelectWall(!Deselect, false);
                    MapDisplay.CurrentMap.TileAt(x - 1, y).SelectWall(!Deselect, true);
                }
                else
                {
                    MapDisplay.CurrentMap.TileAt(x + 1, y + 1).SelectWall(!Deselect, false);
                    MapDisplay.CurrentMap.TileAt(x - 1, y + 1).SelectWall(!Deselect, true);
                }
                break;

            case Map.Direction.SE:
                if (x % 2 == 0)
                {
                    MapDisplay.CurrentMap.TileAt(x - 1, y).SelectWall(!Deselect, true);
                }
                else
                {
                    MapDisplay.CurrentMap.TileAt(x - 1, y + 1).SelectWall(!Deselect, true);
                }
                break;

            case Map.Direction.E:
                WallSelect(x, y, Map.Direction.NE);
                WallSelect(x, y, Map.Direction.SE);
                break;

            case Map.Direction.NE:
                MapDisplay.CurrentMap.TileAt(x, y).SelectWall(!Deselect, false);
                break;
            }
        }
コード例 #22
0
        public static void OutlineWallSelect(Map.Direction direction)
        {
            foreach (int[] coord in selectedTiles)
            {
                if (direction == Map.Direction.Omni || direction == Map.Direction.N || direction == Map.Direction.W || direction == Map.Direction.NW)
                {
                    if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NW))))
                    {
                        MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, false);

                        if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SW))))
                        {
                            MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SW)).SelectWall(!Deselect, true);
                        }

                        if (selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SE))))
                        {
                            if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NE))))
                            {
                                MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, true);
                            }
                        }
                    }
                }

                if (direction == Map.Direction.Omni || direction == Map.Direction.N || direction == Map.Direction.E || direction == Map.Direction.NE)
                {
                    if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NE))))
                    {
                        MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, true);

                        if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SE))))
                        {
                            MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SE)).SelectWall(!Deselect, false);
                        }

                        if (selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SW))))
                        {
                            if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NW))))
                            {
                                MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, false);
                            }
                        }
                    }
                }

                if (direction == Map.Direction.Omni || direction == Map.Direction.S || direction == Map.Direction.E || direction == Map.Direction.SE)
                {
                    if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SE))))
                    {
                        MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SE)).SelectWall(!Deselect, false);

                        if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NE))))
                        {
                            MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, true);
                        }

                        if (selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NW))))
                        {
                            if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SW))))
                            {
                                MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SW)).SelectWall(!Deselect, true);
                            }
                        }
                    }
                }

                if (direction == Map.Direction.Omni || direction == Map.Direction.S || direction == Map.Direction.W || direction == Map.Direction.SW)
                {
                    if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SW))))
                    {
                        MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SW)).SelectWall(!Deselect, true);

                        if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NW))))
                        {
                            MapDisplay.CurrentMap.TileAt(coord).SelectWall(!Deselect, false);
                        }

                        if (selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.NE))))
                        {
                            if (!selectedTiles.Exists(t => t.SequenceEqual(Tile.InDirectionFrom(coord, Map.Direction.SE))))
                            {
                                MapDisplay.CurrentMap.TileAt(Tile.InDirectionFrom(coord, Map.Direction.SE)).SelectWall(!Deselect, false);
                            }
                        }
                    }
                }
            }
        }
コード例 #23
0
 public static void WallSelect(int[] coord, Map.Direction direction)
 {
     WallSelect(coord[0], coord[1], direction);
 }
コード例 #24
0
ファイル: Unit.cs プロジェクト: Ravphoen/POE_Task_1
 //method to move it around
 public abstract void Move(Map.Direction d);
コード例 #25
0
        public bool BackAwayFromCell(Cell cellToBackAwayFrom)
        {
            ArrayList directions = new ArrayList();

            Map.Direction targetDirection = Map.GetDirection(Owner.CurrentCell, cellToBackAwayFrom);

            switch (targetDirection)
            {
            case Map.Direction.East:
                directions.Add(Map.Direction.West.ToString());
                directions.Add(Map.Direction.Northwest.ToString());
                directions.Add(Map.Direction.Southwest.ToString());
                break;

            case Map.Direction.North:
                directions.Add(Map.Direction.South.ToString());
                directions.Add(Map.Direction.Southwest.ToString());
                directions.Add(Map.Direction.Southeast.ToString());
                break;

            case Map.Direction.Northeast:
                directions.Add(Map.Direction.South.ToString());
                directions.Add(Map.Direction.Southwest.ToString());
                directions.Add(Map.Direction.West.ToString());
                break;

            case Map.Direction.Northwest:
                directions.Add(Map.Direction.South.ToString());
                directions.Add(Map.Direction.Southeast.ToString());
                directions.Add(Map.Direction.East.ToString());
                break;

            case Map.Direction.South:
                directions.Add(Map.Direction.North.ToString());
                directions.Add(Map.Direction.Northwest.ToString());
                directions.Add(Map.Direction.Northeast.ToString());
                break;

            case Map.Direction.Southeast:
                directions.Add(Map.Direction.North.ToString());
                directions.Add(Map.Direction.Northwest.ToString());
                directions.Add(Map.Direction.West.ToString());
                break;

            case Map.Direction.Southwest:
                directions.Add(Map.Direction.North.ToString());
                directions.Add(Map.Direction.Northeast.ToString());
                directions.Add(Map.Direction.East.ToString());
                break;

            case Map.Direction.None:
                List <Cell> cList = Map.GetAdjacentCells(Owner.CurrentCell, Owner);
                if (cList != null)
                {
                    int  rand  = Rules.dice.Next(cList.Count);
                    Cell nCell = (Cell)cList[rand];
                    Owner.Brain.AIGotoXYZ(nCell.X, nCell.Y, nCell.Z);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            for (int a = 0; a < directions.Count; a++)
            {
                Cell cell = Map.GetCellRelevantToCell(Owner.CurrentCell, directions[a].ToString().ToLower(), true);
                if (Owner.GetCellCost(cell) <= 2)
                {
                    //Owner.AIGotoXYZ(cell.X, cell.Y, cell.Z);
                    return(true);
                }
            }
            return(false);
        }