public override bool isCollidingPosition(Microsoft.Xna.Framework.Rectangle position, xTile.Dimensions.Rectangle viewport, bool isFarmer, int damagesFarmer, bool glider, Character character, bool pathfinding, bool projectile = false, bool ignoreCharacterRequirement = false) { foreach (KeyValuePair <long, FarmAnimal> animal in (Dictionary <long, FarmAnimal>) this.animals) { if (character != null && !character.Equals((object)animal.Value) && position.Intersects(animal.Value.GetBoundingBox())) { animal.Value.farmerPushing(); return(true); } } return(base.isCollidingPosition(position, viewport, isFarmer, damagesFarmer, glider, character, pathfinding, false, false)); }
public override bool isCollidingPosition(Microsoft.Xna.Framework.Rectangle position, xTile.Dimensions.Rectangle viewport, bool isFarmer, int damagesFarmer, bool glider, Character character, bool pathfinding, bool projectile = false, bool ignoreCharacterRequirement = false) { foreach (KeyValuePair <long, FarmAnimal> kvp in animals.Pairs) { if (character != null && !character.Equals(kvp.Value) && position.Intersects(kvp.Value.GetBoundingBox()) && (!isFarmer || !Game1.player.GetBoundingBox().Intersects(kvp.Value.GetBoundingBox()))) { if (isFarmer && (character as Farmer).TemporaryPassableTiles.Intersects(position)) { break; } kvp.Value.farmerPushing(); return(true); } } return(base.isCollidingPosition(position, viewport, isFarmer, damagesFarmer, glider, character, pathfinding)); }
private void moveCharacter(GameTime time) { Rectangle rectangle = new Rectangle(this.pathToEndPoint.Peek().X *Game1.tileSize, this.pathToEndPoint.Peek().Y *Game1.tileSize, Game1.tileSize, Game1.tileSize); rectangle.Inflate(-2, 0); Rectangle boundingBox = this.character.GetBoundingBox(); if ((rectangle.Contains(boundingBox) || boundingBox.Width > rectangle.Width && rectangle.Contains(boundingBox.Center)) && rectangle.Bottom - boundingBox.Bottom >= 2) { this.timerSinceLastCheckPoint = 0; this.pathToEndPoint.Pop(); this.character.stopWithoutChangingFrame(); if (this.pathToEndPoint.Count != 0) { return; } this.character.Halt(); if (this.finalFacingDirection != -1) { this.character.faceDirection(this.finalFacingDirection); } if (this.NPCSchedule) { (this.character as NPC).DirectionsToNewLocation = (SchedulePathDescription)null; (this.character as NPC).endOfRouteMessage = (this.character as NPC).nextEndOfRouteMessage; } if (this.endBehaviorFunction == null) { return; } this.endBehaviorFunction(this.character, this.location); } else { if (this.character is Farmer) { (this.character as Farmer).movementDirections.Clear(); } else { foreach (NPC character in this.location.characters) { if (!character.Equals((object)this.character) && (character.GetBoundingBox().Intersects(boundingBox) && character.isMoving() && string.Compare(character.name, this.character.name) < 0)) { this.character.Halt(); return; } } } if (boundingBox.Left < rectangle.Left && boundingBox.Right < rectangle.Right) { this.character.SetMovingRight(true); } else if (boundingBox.Right > rectangle.Right && boundingBox.Left > rectangle.Left) { this.character.SetMovingLeft(true); } else if (boundingBox.Top <= rectangle.Top) { this.character.SetMovingDown(true); } else if (boundingBox.Bottom >= rectangle.Bottom - 2) { this.character.SetMovingUp(true); } this.character.MovePosition(time, Game1.viewport, this.location); if (!this.NPCSchedule) { return; } Warp warp = this.location.isCollidingWithWarpOrDoor(this.character.nextPosition(this.character.getDirection())); if (warp == null) { return; } if (this.character is NPC && (this.character as NPC).isMarried() && (this.character as NPC).followSchedule) { NPC character = this.character as NPC; if (this.location is FarmHouse) { warp = new Warp(warp.X, warp.Y, "BusStop", 0, 23, false); } if (this.location is BusStop && warp.X <= 0) { warp = new Warp(warp.X, warp.Y, character.getHome().name, (character.getHome() as FarmHouse).getEntryLocation().X, (character.getHome() as FarmHouse).getEntryLocation().Y, false); } if (character.temporaryController != null && character.controller != null) { character.controller.location = Game1.getLocationFromName(warp.TargetName); } } Game1.warpCharacter(this.character as NPC, warp.TargetName, new Vector2((float)warp.TargetX, (float)warp.TargetY), false, this.location.isOutdoors); this.location.characters.Remove(this.character as NPC); if (this.location.Equals((object)Game1.currentLocation) && Utility.isOnScreen(new Vector2((float)(warp.X * Game1.tileSize), (float)(warp.Y * Game1.tileSize)), Game1.tileSize * 6) && this.location.doors.ContainsKey(new Point(warp.X, warp.Y))) { Game1.playSound("doorClose"); } this.location = Game1.getLocationFromName(warp.TargetName); if (this.location.Equals((object)Game1.currentLocation) && Utility.isOnScreen(new Vector2((float)(warp.TargetX * Game1.tileSize), (float)(warp.TargetY * Game1.tileSize)), Game1.tileSize * 6) && this.location.doors.ContainsKey(new Point(warp.TargetX, warp.TargetY - 1))) { Game1.playSound("doorClose"); } if (this.pathToEndPoint.Count > 0) { this.pathToEndPoint.Pop(); } while (this.pathToEndPoint.Count > 0 && (Math.Abs(this.pathToEndPoint.Peek().X - this.character.getTileX()) > 1 || Math.Abs(this.pathToEndPoint.Peek().Y - this.character.getTileY()) > 1)) { this.pathToEndPoint.Pop(); } } }