private static AnimalType <BoarState> CreateType(ContentManager content) { float baseSpeed = 1.3f; float slowSpeed = 0.2f; float fleeingDuration = RandomExt.GetRandomFloat(1f, 1.5f); float followingDuration = RandomExt.GetRandomFloat(1f, 1.5f); float size = RandomExt.GetRandomFloat(1.23f, 1.32f); return(AnimalTypeFactory.CreateAnimal(BoarState.Wandering) .WithAsset(content.LoadFromJson <AnimationDefintion>("Animations/boar_anim"), new Vector2(size, size)) .WithCollisionShape(new[] { new Vector2(0, 0.4f), new Vector2(-0.2f, 0.3f), new Vector2(-0.2f, -0.3f), new Vector2(0, -0.4f), new Vector2(0.2f, -0.3f), new Vector2(0.2f, 0.3f) }) .WithSensing() .WithBehaviour(() => new WanderingBehavior <BoarState>(BoarState.Wandering, 1.5f, new OutgoingState <BoarState>(0.4f, BoarState.Rootling), new OutgoingState <BoarState>(0.6f, BoarState.Wandering)) { CircleRadius = 4f, CircleCenterOffset = 2f, WanderingSpeedMin = baseSpeed, WanderingSpeedMax = baseSpeed * 1.1f }) .WithBehaviour(() => new WanderingBehavior <BoarState>(BoarState.Rootling, 1.5f, new OutgoingState <BoarState>(0.2f, BoarState.Rootling), new OutgoingState <BoarState>(0.8f, BoarState.Wandering)) { MaxTurningSpeed = 0.1f, WanderingSpeedMin = 0, WanderingSpeedMax = slowSpeed }) // Fleeing .WithBehaviour(() => new FleeingBehavior <BoarState>(BoarState.Fleeing, fleeingDuration, new OutgoingState <BoarState>(1f, BoarState.Wandering)) { Name = "fleeing", Speed = baseSpeed * 3f }) // Following .WithBehaviour(() => new FollowingBehavior <BoarState>(BoarState.Following, followingDuration, new OutgoingState <BoarState>(1f, BoarState.Wandering)) { Speed = baseSpeed }) // Being hit .WithBehaviour(() => new HitBehavior <BoarState>(BoarState.BeingHit, 1f, new OutgoingState <BoarState>(1f, BoarState.Fleeing)) { Name = "beinghit", Speed = 0.5f }) .WithBehaviour(() => new ObstacleAvoidanceBehaviour <BoarState>(EnumExt.GetValues <BoarState>(), new OutgoingState <BoarState> [0]) { Weight = 10f }) .WithBehaviour(() => new UnstuckBehavior <BoarState>(EnumExt.GetValues <BoarState>(), new OutgoingState <BoarState> [0])) .DefaultAnimation("walking").StateToAnimation(BoarState.Rootling, "neutral").StateToAnimation(BoarState.BeingHit, "hit")); }
private static AnimalType <ChickenState> CreateType(ContentManager content, int chickenType) { float baseSpeed = 2f; float slowSpeed = 0f; float fleeingDuration = RandomExt.GetRandomFloat(0.8f, 1.5f); float followingDuration = RandomExt.GetRandomFloat(1f, 1.5f); var asset = content.LoadFromJson <AnimationDefintion>("Animations/chicken_anim"); float size = RandomExt.GetRandomFloat(0.9f, 1.2f); if (chickenType == -1 && RandomExt.GetRandomFloat(0, 1) < 0.35f || chickenType == 1) { asset.AssetName = "chicken_walk-spritesheet_8x4_a512_orange"; size = RandomExt.GetRandomFloat(0.5f, 0.7f); } return(AnimalTypeFactory.CreateAnimal(ChickenState.Wandering) .WithAsset(asset, new Vector2(size, size)) .WithCollisionShape(size * 0.13f, 0.6f) .WithSensing() .WithBehaviour(() => new WanderingBehavior <ChickenState>(ChickenState.Wandering, 3f, new OutgoingState <ChickenState>(0.4f, ChickenState.Picking), new OutgoingState <ChickenState>(0.6f, ChickenState.Wandering)) { CircleRadius = 2f, CircleCenterOffset = 1f, WanderingSpeedMin = baseSpeed * 0.35f, WanderingSpeedMax = baseSpeed * 0.55f, MaxTurningSpeed = 5f }) .WithBehaviour(() => new WanderingBehavior <ChickenState>(ChickenState.Picking, 1.5f, new OutgoingState <ChickenState>(0.2f, ChickenState.Picking), new OutgoingState <ChickenState>(0.8f, ChickenState.Wandering)) { MaxTurningSpeed = 0.1f, WanderingSpeedMin = 0, WanderingSpeedMax = slowSpeed }) .WithBehaviour(() => new FleeingBehavior <ChickenState>(ChickenState.Fleeing, fleeingDuration, new OutgoingState <ChickenState>(1f, ChickenState.Wandering)) { Weight = 10f, Speed = baseSpeed * 1.5f, MaxTurningSpeed = 10f }) .WithBehaviour(() => new FollowingBehavior <ChickenState>(ChickenState.Following, followingDuration, new OutgoingState <ChickenState>(1f, ChickenState.Wandering)) { Weight = 30f, Speed = baseSpeed * 0.7f }) .WithBehaviour(() => new ObstacleAvoidanceBehaviour <ChickenState>(EnumExt.GetValues <ChickenState>(), new OutgoingState <ChickenState> [0]) { Weight = 50f, AvoidingDistance = 1f }) .WithBehaviour(() => new CohesionBehavior <ChickenState>(EnumExt.GetValues <ChickenState>(), new OutgoingState <ChickenState> [0]) { Weight = 1f }) .WithBehaviour(() => new SeparationBehavior <ChickenState>(EnumExt.GetValues <ChickenState>(), new OutgoingState <ChickenState> [0]) { Name = "separation", Weight = 1f }) .WithBehaviour(() => new PlayerFleeingBehavior <ChickenState>(ChickenState.AvoidingPlayer, 0.5f, new OutgoingState <ChickenState>(1f, ChickenState.Wandering)) { Speed = 3f }) .WithBehaviour(() => new VelocityMatchBehavior <ChickenState>(EnumExt.GetValues <ChickenState>(), new OutgoingState <ChickenState> [0]) { Weight = 2f }) .WithBehaviour(() => new UnstuckBehavior <ChickenState>(EnumExt.GetValues <ChickenState>(), new OutgoingState <ChickenState> [0]) { Weight = 0.25f }) .DefaultAnimation("walking").StateToAnimation(ChickenState.Picking, "eating").StateToAnimation(ChickenState.AvoidingPlayer, "flapping") .StateToAnimation(ChickenState.Fleeing, "flapping")); }