Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
        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"));
        }