Beispiel #1
0
        public override bool RunImpact(RoomScene room, GameObject actor, short gridX, short gridY, DirCardinal dir)
        {
            // Only Characters interact with doors.
            if (actor is Character == false)
            {
                return(false);
            }

            Character character = (Character)actor;

            // Display "Interaction" Prompt for Character (draws the 'interaction' hand icon above character head)
            //if(Systems.timer.frame16Modulus % 8 == 5) {
            //	StationaryParticle.SetParticle(character.room, Systems.mapper.atlas[(byte)AtlasGroup.Tiles], "Prompt/Hand", new Vector2(gridX * (byte)TilemapEnum.TileWidth, gridY * (byte)TilemapEnum.TileHeight - (byte)TilemapEnum.HalfHeight), Systems.timer.Frame + 8);
            //}

            // Make sure the character is overlapping the inner door.
            if (!CollideRect.IsTouchingRect(character, gridX * (byte)TilemapEnum.TileWidth + 16, gridX * (byte)TilemapEnum.TileWidth + (byte)TilemapEnum.TileWidth - 12, gridY * (byte)TilemapEnum.TileHeight, gridY * (byte)TilemapEnum.TileHeight + (byte)TilemapEnum.TileHeight * 2))
            {
                return(false);
            }

            // Make sure the Character is actually attempting to interact with the door.
            if (!character.input.isPressed(IKey.YButton))
            {
                return(false);
            }

            return(this.InteractWithDoor(character, room, gridX, gridY));
        }
Beispiel #2
0
        // An Inner Tile Impact checks for an additional, inner collision based on a designated rectangle.
        public static DirCardinal RunInnerImpact(GameObject actor, int x1, int x2, int y1, int y2)
        {
            // Check Overlap with Altered Border
            if (!CollideRect.IsTouchingRect(actor, x1, x2, y1, y2))
            {
                return(DirCardinal.None);
            }

            DirCardinal newDir = CollideRect.GetDirectionOfCollision(actor, x1, x2, y1, y2);

            if (newDir == DirCardinal.Down)
            {
                actor.CollidePosDown(y1 - actor.bounds.Bottom);
            }
            else if (newDir == DirCardinal.Right)
            {
                actor.CollidePosRight(x1 - actor.bounds.Right);
            }
            else if (newDir == DirCardinal.Left)
            {
                actor.CollidePosLeft(x2 - actor.bounds.Left);
            }
            else if (newDir == DirCardinal.Up)
            {
                actor.CollidePosUp(y2 - actor.bounds.Top);
            }

            return(newDir);
        }
Beispiel #3
0
 // Identical to RunInnerImpact, except it doesn't collide.
 public static DirCardinal RunOverlapTest(GameObject actor, int x1, int x2, int y1, int y2)
 {
     if (!CollideRect.IsTouchingRect(actor, x1, x2, y1, y2))
     {
         return(DirCardinal.None);
     }
     return(CollideRect.GetDirectionOfCollision(actor, x1, x2, y1, y2));
 }