示例#1
0
        public void InitializeSnake(Canvas canvas)
        {
            mCanvas = canvas;

            Point initialPosition = new Point();

            initialPosition.X = Constants.CellWidth * 2;
            initialPosition.Y = 0;

            this.mLenght = 3;

            mSnake[0] = new SnakePart();
            Canvas.SetLeft(mSnake[0].mSnakePart, initialPosition.X);
            Canvas.SetTop(mSnake[0].mSnakePart, initialPosition.Y);

            for (int i = 1; i < this.mLenght; ++i)
            {
                mSnake[i] = new SnakePart();

                Canvas.SetLeft(mSnake[i].mSnakePart, initialPosition.X - Constants.CellWidth * i);
                Canvas.SetTop(mSnake[i].mSnakePart, initialPosition.Y);
            }

            for (int i = 0; i < this.mLenght; ++i)
            {
                canvas.Children.Add(mSnake[i].mSnakePart);
            }

            mDirection = Enumerations.Direction.Direction_Right;
        }
        public static void HandleCollision(IUsableItem item, IBlock block, Enumerations.CollisionSide collision)
        {
            Contract.Requires(block != null);
            Contract.Requires(item != null);

            block.IsDestructable = true;
            foreach (IDoorTrigger doorTrigger in Room.CurrentRoomDoorTriggers)
            {
                if (doorTrigger.GameObjectType == Enumerations.GameObjectType.DoorTriggerUp)
                {
                    doorTrigger.IsDestructable = true;
                }
            }

            IBlock newDoor = new BlockUpBombedOpening();

            newDoor.Position = block.Position;
            IDoorTrigger newTrigger = new BlockUpOverBombed();

            newTrigger.Position = new Vector2(Constant.UpOverBombedPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.UpOverBombedPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
            Room.CurrentRoomBlocks.Add(newDoor);
            Room.CurrentRoomDoorTriggers.Add(newTrigger);
            SoundManager.Instance.PlayFoundSecret();

            int oppositeRoom = GameObjects.Instance.LevelListPosition - Constant.DungeonGridWidth;

            Enumerations.Direction doorDirection = Enumerations.Direction.Down;
            Enumerations.DoorType  doorType      = Enumerations.DoorType.Bombed;
            ToolsXML toolsXml = new ToolsXML();

            toolsXml.ReplaceOppositeDoorNodeXML(oppositeRoom, doorType, doorDirection);
        }
示例#3
0
        //TODO don't allow the player to move to occupied tiles!
        public void Move(GameObject toTile, List <GameObject> allowedMovement)
        {
            GameObject tileTemp;
            var        index = 0;
            bool       activatedTrap;

            while (_myTile != toTile)
            {
                //            print(index);
                tileTemp = allowedMovement.ElementAt(index++);
                if (tileTemp.GetComponent <script_Tile>().occupied)
                {
                    myDirection = Enumerations.Direction.Choose;
                    break;
                }

                _hasMoved = true;
                _myTile.GetComponent <script_Tile>().occupied = false;
                _myTile.GetComponent <script_Tile>().occupier = null;
                _myTile = tileTemp;
                _myTile.GetComponent <script_Tile>().occupied = true;
                _myTile.GetComponent <script_Tile>().occupier = gameObject;
                transform.position = _myTile.transform.position;
                availableMovement--;
                _availableMovementField.text = availableMovement.ToString();
                //tile call method stepped on if not invisible
                activatedTrap = _myTile.GetComponent <script_Tile>().SteppedOn(gameObject);
                if (activatedTrap)
                {
                    break;
                }
            }
        }
示例#4
0
        public static void DrawSprite(Int32 spr, Enumerations.Direction dir, Int32 frame, Int32 x, Int32 y)
        {
            var sp = Graphics.GetSprite(spr);

            if (sp.Texture == null)
            {
                return;
            }
            Int32 yoffset = 0;
            Int32 xoffset = (Int32)(sp.Texture.Size.X / 4) * frame;

            switch (dir)
            {
            case Enumerations.Direction.Up:
                yoffset = (Int32)(sp.Texture.Size.Y / 4) * 3;
                break;

            case Enumerations.Direction.Right:
                yoffset = (Int32)(sp.Texture.Size.Y / 4) * 2;
                break;

            case Enumerations.Direction.Down:
                yoffset = 0;
                break;

            case Enumerations.Direction.Left:
                yoffset = (Int32)(sp.Texture.Size.Y / 4);
                break;
            }
            sp.TextureRect = new IntRect(new Vector2i(xoffset, yoffset), new Vector2i((Int32)sp.Texture.Size.X / 4, (Int32)sp.Texture.Size.Y / 4));
            sp.Position    = new Vector2f(Graphics.OffSet.X + (x - ((Int32)sp.Texture.Size.X / 4) / 2), Graphics.OffSet.Y + (y - ((Int32)sp.Texture.Size.X / 4)));
            Screen.Draw(sp);
        }
示例#5
0
 public Goriya()
 {
     Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyGoriyaWalkDown();
     Position        = Constant.EnemyStartPosition;
     Velocity        = Vector2.UnitY * EnemyConstants.GoriyaSpeed;
     facingDirection = Enumerations.Direction.Down;
     movementTimer   = 0;
     DamageAmount    = EnemyConstants.GoriyaDamageAmount;
 }
示例#6
0
文件: Rope.cs 项目: L0gan012/Zelda_V2
 public Rope()
 {
     Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyRopeLeft();
     Position        = Constant.EnemyStartPosition;
     Velocity        = Vector2.UnitX * EnemyConstants.RopeNormalSpeed;
     facingDirection = Enumerations.Direction.Left;
     movementTimer   = 0;
     DamageAmount    = EnemyConstants.RopeDamageAmount;
 }
 public void SelectedUpdate()
 {
     if (myDirection == Enumerations.Direction.Choose)
     {
         myDirection = Enumerations.ChooseDirection(_canvasDirections);
     }
     if (Input.GetKeyUp(KeyCode.R) && _hasMoved == false)
     {
         myDirection = Enumerations.Direction.Choose;
     }
 }
    public List <GameObject> GetAllowedMovement(GameObject myTile, ref Enumerations.Direction myDirection,
                                                int availableMovement)
    {
        var        tiles = new List <GameObject>();
        GameObject neighbor, tempTile = myTile;
        var        i = 0;

        while (i++ < availableMovement)
        {
            neighbor = script_BoardController.GetTileNeighbor(tempTile, myDirection);
            if (neighbor == null)
            {
                return(tiles);
            }
            if (myDirection != Enumerations.Direction.Choose)
            {
                var check = false;
                foreach (var tag in tagsOfMovementTiles)
                {
                    if (neighbor.tag == tag)
                    {
                        check    = true;
                        tempTile = neighbor;
                        tiles.Add(neighbor);
                    }
                }

                if (check == false)
                {
                    if (tiles.Count == 0)
                    {
                        myDirection = Enumerations.Direction.Choose;
                    }
                    return(tiles);
                }
            }
            else
            {
                return(tiles);
            }
        }

        if (i >= availableMovement)
        {
            return(tiles);
        }
        Debug.LogError("problem");
        return(null);
    }
示例#9
0
 private void MoveGoriya()
 {
     if (movementTimer == EnemyConstants.GoriyaMovementTimer)
     {
         Velocity = Vector2.UnitX * Constant.RNG.Next(-1, 2) * EnemyConstants.GoriyaSpeed;
         if (Velocity.X.Equals(0f))
         {
             while (Velocity.Equals(Vector2.Zero))
             {
                 Velocity = Vector2.UnitY * Constant.RNG.Next(-1, 2) * EnemyConstants.GoriyaSpeed;
             }
             if (Velocity.Y > 0)
             {
                 facingDirection = Enumerations.Direction.Down;
                 Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyGoriyaWalkDown();
             }
             else
             {
                 facingDirection = Enumerations.Direction.Up;
                 Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyGoriyaWalkUp();
             }
         }
         else
         {
             if (Velocity.X > 0)
             {
                 facingDirection = Enumerations.Direction.Right;
                 Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyGoriyaWalkRight();
             }
             else
             {
                 facingDirection = Enumerations.Direction.Left;
                 Sprite          = EnemySpriteFactory.Instance.CreateSpriteEnemyGoriyaWalkLeft();
             }
         }
         movementTimer = 0;
     }
     if (HasHitWall)
     {
         HasHitWall = false;
         TurnRight(EnemyConstants.GoriyaSpeed);
     }
     Position += Velocity;
     movementTimer++;
 }
        public static void HandleCollision(ILink link, IBlock block, Enumerations.CollisionSide collision)
        {
            Contract.Requires(link != null);
            Contract.Requires(block != null);

            if (InventoryAgrees(link))
            {
                block.IsDestructable = true;
                foreach (IDoorTrigger doorTrigger in Room.CurrentRoomDoorTriggers)
                {
                    if (doorTrigger.GameObjectType == Enumerations.GameObjectType.DoorTriggerLeft)
                    {
                        doorTrigger.IsDestructable = true;
                    }
                }

                foreach (IBlock blockDoor in Room.CurrentRoomBlocks)
                {
                    if (block.GameObjectType == Enumerations.GameObjectType.DoorLeft)
                    {
                        blockDoor.IsDestructable = true;
                    }
                }

                IBlock newDoor = new BlockLeftOpenDoor();
                newDoor.Position = new Vector2(Constant.LeftDoorPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.LeftDoorPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
                IDoorTrigger newTrigger = new BlockLeftOverDoor();
                newTrigger.Position = new Vector2(Constant.LeftOverDoorPositionNative.X * Game1.Instance.graphics.PreferredBackBufferWidth / Constant.OriginalNesWidth, (Constant.LeftOverDoorPositionNative.Y + HUDConstants.HUDHeight) * Game1.Instance.graphics.PreferredBackBufferHeight / Constant.OriginalNesHeight);
                Room.CurrentRoomBlocks.Add(newDoor);
                Room.CurrentRoomDoorTriggers.Add(newTrigger);
                SoundManager.Instance.PlayDoorStateChange();

                int oppositeRoom = GameObjects.Instance.LevelListPosition - 1;
                Enumerations.Direction doorDirection = Enumerations.Direction.Right;
                Enumerations.DoorType  doorType      = Enumerations.DoorType.Locked;
                ToolsXML toolsXml = new ToolsXML();
                toolsXml.ReplaceOppositeDoorNodeXML(oppositeRoom, doorType, doorDirection);
            }
        }
        public int Move(GameObject toTile, List <GameObject> allowedMovement)
        {
            GameObject tileTemp;
            var        index      = 0;
            var        tilesMoved = 0;
            bool       activatedTrap;

            while (myTile != toTile)
            {
                //            print(index);
                tileTemp = allowedMovement.ElementAt(index++);
                if (tileTemp.GetComponent <script_Tile>().occupied)
                {
                    myDirection = Enumerations.Direction.Choose;
                    break;
                }

                tilesMoved++;
                _hasMoved = true;
                myTile.GetComponent <script_Tile>().occupied = false;
                myTile.GetComponent <script_Tile>().occupier = null;
                myTile = tileTemp;
                myTile.GetComponent <script_Tile>().occupied = true;
                myTile.GetComponent <script_Tile>().occupier = gameObject;
                transform.position = myTile.transform.position;
                myRemainingMovement--;
                //tile call method stepped on if not invisible
                activatedTrap = myTile.GetComponent <script_Tile>().SteppedOn(gameObject);
                if (activatedTrap)
                {
                    break;
                }
            }

            return(tilesMoved);
        }
示例#12
0
        private void Update()
        {
            if (Input.GetKeyUp(KeyCode.Tab))
            {
                _healthBar.gameObject.SetActive(!_healthBar.gameObject.activeInHierarchy);
            }
            if (Input.GetKeyUp(KeyCode.N) && beginMyTurn == false && isMyTurn)
            {
                EndTurn();
            }
            if (beginMyTurn)
            {
                _canvasLocal.gameObject.SetActive(true);
                _canvasWorld.gameObject.SetActive(true);
                myDirection                  = Enumerations.Direction.Choose;
                availableMovement            = Utilities.RollDice(movementDice);
                _availableMovementField.text = availableMovement.ToString();
                beginMyTurn                  = false;
                _attackedThisTurn            = false;

                script_MovementPainter.RemoveAllowedMovementMarker(_allowedMovement);
                _allowedMovement =
                    _myScript_MovementParser.GetAllowedMovement(_myTile, ref myDirection, availableMovement);
                script_MovementPainter.AddAllowedMovementMarker(_allowedMovement);
            }
            else if (isMyTurn)
            {
                if (placed && _myScript_AffectedBy.isStunned == false)
                {
                    if (myDirection == Enumerations.Direction.Choose)
                    {
                        myDirection = Enumerations.ChooseDirection(_directions);
                        //script_MovementPainter.RemoveAllowedMovementMarker(allowedMovement);
                        _allowedMovement =
                            _myScript_MovementParser.GetAllowedMovement(_myTile, ref myDirection, availableMovement);
                        script_MovementPainter.AddAllowedMovementMarker(_allowedMovement);
                    }

                    if (Input.GetKeyUp(KeyCode.R) && _hasMoved == false)
                    {
                        myDirection = Enumerations.Direction.Choose;
                    }

                    if (Input.GetMouseButtonUp(1))
                    {
                        altSelected = script_SelectObject.ReturnAlternateClick();

                        if (_allowedMovement.Contains(altSelected))
                        {
                            if (script_BoardController.GetTileDistance(_myTile, altSelected) <= availableMovement)
                            {
                                Move(altSelected, _allowedMovement);
                            }
                        }
                        script_MovementPainter.RemoveAllowedMovementMarker(_allowedMovement);
                        _allowedMovement =
                            _myScript_MovementParser.GetAllowedMovement(_myTile, ref myDirection, availableMovement);
                        script_MovementPainter.AddAllowedMovementMarker(_allowedMovement);
                    }

                    if (Input.GetMouseButtonUp(0))
                    {
                        if (selected.tag == "Monster" &&
                            script_BoardController.GetTileDistance(_myTile, selected) <= range &&
                            _attackedThisTurn == false)
                        {
                            Attack(selected.GetComponent <ICombatant>(), Enumerations.DamageType.Physical);
                        }
                        if ((selected.tag == "Door" || selected.tag == "OpenDoor") &&
                            script_BoardController.GetTileDistance(_myTile, selected) <= 1)
                        {
                        }

                        //                            selected.GetComponent<scr_Door>().ToggleDoor();
                    }
                }

                if (Input.GetKeyUp(KeyCode.Space))
                {
                    if (placed == false)
                    {
                        if (selected.tag == "PlayerSpawn")
                        {
                            transform.position = selected.transform.position;
                            _myTile            = selected;
                            placed             = true;
                        }
                        else
                        {
                            Debug.Log("Select an eligible spawn tile");
                        }
                    }
                }
            }
        }
示例#13
0
 public void SetDirection(Enumerations.Direction direction)
 {
     mDirection = direction;
 }
示例#14
0
        public void ReplaceOppositeDoorNodeXML(int roomNumber, Enumerations.DoorType doorType, Enumerations.Direction direction)
        {
            string  currentDungeonFileName = ProjectPath + "\\Room\\CurrentDungeonState.xml";
            string  oldTrigger;
            string  oldDoor;
            string  newDoorTrigger;
            string  newDoor;
            string  stopBlock;
            Vector2 newOverDoorPosition;
            Vector2 newDoorPosition;


            switch (doorType)
            {
            case Enumerations.DoorType.Bombed:
                switch (direction)
                {
                case Enumerations.Direction.Left:
                    oldTrigger          = "BlockLeftOverWall";
                    oldDoor             = "BlockUpBreakableWall";
                    newDoorTrigger      = "BlockUpOverBombed";
                    newDoor             = "BlockUpBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.LeftOverBombedPosition;
                    newDoorPosition     = Constant.LeftDoorPositionNative;
                    break;

                case Enumerations.Direction.Right:
                    oldTrigger          = "BlockRightOverWall";
                    oldDoor             = "BlockRightBreakableWall";
                    newDoorTrigger      = "BlockRightOverBombed";
                    newDoor             = "BlockRightBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.RightOverBombedPositionNative;
                    newDoorPosition     = Constant.RightDoorPositionNative;
                    break;

                case Enumerations.Direction.Up:
                    oldTrigger          = "BlockUpOverWall";
                    oldDoor             = "BlockUpBreakableWall";
                    newDoorTrigger      = "BlockUpOverBombed";
                    newDoor             = "BlockUpBombedOpening";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.UpOverBombedPositionNative;
                    newDoorPosition     = Constant.UpDoorPositionNative;
                    break;

                case Enumerations.Direction.Down:
                    oldTrigger          = "BlockDownOverWall";
                    oldDoor             = "BlockDownBreakableWall";
                    newDoorTrigger      = "BlockDownOverBombed";
                    newDoor             = "BlockDownBombedDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;

                default:
                    oldTrigger          = "NoOldTrigger";
                    oldDoor             = "NoOldDoor";
                    newDoorTrigger      = "NoNewDoorTrigger";
                    newDoor             = "NoNewDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;
                }
                break;

            case Enumerations.DoorType.Locked:
                switch (direction)
                {
                case Enumerations.Direction.Left:
                    oldTrigger          = "BlockLeftOverDoor";
                    oldDoor             = "BlockLeftLockedDoor";
                    newDoorTrigger      = "BlockLeftOverDoor";
                    newDoor             = "BlockLeftOpenDoor";
                    stopBlock           = "BlockLeftLockedDoorStop";
                    newOverDoorPosition = Constant.LeftOverDoorPositionNative;
                    newDoorPosition     = Constant.LeftDoorPositionNative;
                    break;

                case Enumerations.Direction.Right:
                    oldTrigger          = "BlockRightOverDoor";
                    oldDoor             = "BlockRightLockedDoor";
                    newDoorTrigger      = "BlockRightOverDoor";
                    newDoor             = "BlockRightOpenDoor";
                    stopBlock           = "BlockRightLockedDoorStop";
                    newOverDoorPosition = Constant.RightOverDoorPositionNative;
                    newDoorPosition     = Constant.RightDoorPositionNative;
                    break;

                case Enumerations.Direction.Up:
                    oldTrigger          = "BlockUpOverDoor";
                    oldDoor             = "BlockUpLockedDoor";
                    newDoorTrigger      = "BlockUpOverDoor";
                    newDoor             = "BlockUpOpenDoor";
                    stopBlock           = "BlockUpLockedDoorStop";
                    newOverDoorPosition = Constant.UpOverDoorPositionNative;
                    newDoorPosition     = Constant.UpDoorPositionNative;
                    break;

                case Enumerations.Direction.Down:
                    oldTrigger          = "BlockDownOverDoor";
                    oldDoor             = "BlockDownLockedDoor";
                    newDoorTrigger      = "BlockDownOverDoor";
                    newDoor             = "BlockDownOpenDoor";
                    stopBlock           = "BlockDownLockedDoorStop";
                    newOverDoorPosition = Constant.DownOverDoorPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;

                default:
                    oldTrigger          = "NoOldTrigger";
                    oldDoor             = "NoOldDoor";
                    newDoorTrigger      = "NoNewDoorTrigger";
                    newDoor             = "NoNewDoor";
                    stopBlock           = "NoStopBlock";
                    newOverDoorPosition = Constant.DownOverBombedPositionNative;
                    newDoorPosition     = Constant.DownDoorPositionNative;
                    break;
                }
                break;

            default:
                oldTrigger          = "NoOldTrigger";
                oldDoor             = "NoOldDoor";
                newDoorTrigger      = "NoNewDoorTrigger";
                newDoor             = "NoNewDoor";
                stopBlock           = "NoStopBlock";
                newOverDoorPosition = Constant.DownOverBombedPositionNative;
                newDoorPosition     = Constant.DownDoorPositionNative;
                break;
            }

            XmlDocument document = new XmlDocument();

            document.Load(currentDungeonFileName);
            XmlNodeList nodes = document.SelectNodes("/Dungeon/Item[@Room='" + roomNumber.ToString() + "']");

            for (int i = nodes.Count - 1; i >= 0; i--)
            {
                for (int j = nodes[i].ChildNodes.Count - 1; j >= 0; j--)
                {
                    if (nodes[i].ChildNodes[j].InnerText == oldTrigger || nodes[i].ChildNodes[j].InnerText == oldDoor || nodes[i].ChildNodes[j].InnerText == stopBlock)
                    {
                        nodes[i].ParentNode.RemoveChild(nodes[i]);
                    }
                }
            }



            XmlElement newDoorNode = document.CreateElement("Item");

            newDoorNode.SetAttribute("Room", roomNumber.ToString());
            XmlElement newDoorNodeObjectType = document.CreateElement("ObjectType");

            newDoorNodeObjectType.InnerText = "IBlock";
            XmlElement newDoorNodeObjectName = document.CreateElement("ObjectName");

            newDoorNodeObjectName.InnerText = newDoor;
            XmlElement newDoorNodeLocation = document.CreateElement("Location");

            newDoorNodeLocation.InnerText = newDoorPosition.X.ToString() + " " + newDoorPosition.Y.ToString();
            newDoorNode.AppendChild(newDoorNodeObjectType);
            newDoorNode.AppendChild(newDoorNodeObjectName);
            newDoorNode.AppendChild(newDoorNodeLocation);
            document.DocumentElement.AppendChild(newDoorNode);


            XmlElement newOverDoorNode = document.CreateElement("Item");

            newOverDoorNode.SetAttribute("Room", roomNumber.ToString());
            XmlElement newOverDoorNodeObjectType = document.CreateElement("ObjectType");

            newOverDoorNodeObjectType.InnerText = "IDoorTrigger";
            XmlElement newOverDoorNodeObjectName = document.CreateElement("ObjectName");

            newOverDoorNodeObjectName.InnerText = newDoorTrigger;
            XmlElement newOverDoorNodeLocation = document.CreateElement("Location");

            newOverDoorNodeLocation.InnerText = newOverDoorPosition.X.ToString() + " " + newOverDoorPosition.Y.ToString();
            newOverDoorNode.AppendChild(newOverDoorNodeObjectType);
            newOverDoorNode.AppendChild(newOverDoorNodeObjectName);
            newOverDoorNode.AppendChild(newOverDoorNodeLocation);
            document.DocumentElement.AppendChild(newOverDoorNode);
            if (File.Exists(currentDungeonFileName))
            {
                File.Delete(currentDungeonFileName);
                document.Save(currentDungeonFileName);
            }
        }