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)); }
// 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); }
// 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)); }