// Copyright (c) Strange Loop Games. All rights reserved.
// See LICENSE file in the project root for full license information.
// <auto-generated />

namespace Eco.Mods.TechTree
{
    using System;
    using System.Collections.Generic;
    using Eco.Core.Items;
    using Eco.Gameplay.Animals;
    using Eco.Gameplay.GameActions;
    using Eco.Gameplay.Interactions;
    using Eco.Gameplay.Items;
    using Eco.Mods.Organisms;
    using Eco.Shared.Localization;
    using Eco.Shared.Math;
    using Eco.Shared.Networking;
    using Eco.Simulation.Agents;
    using Eco.Simulation.Types;
    using Range = Eco.Shared.Math.Range;

    /// <summary>Auto-generated class. All your changes will be wiped with next update!</summary>
    public class SnappingTurtle : AnimalEntity
    {
        public SnappingTurtle(Animal parent, Vector3 pos, bool corpse = false) : base(parent, pos, species, corpse) { }
        static AnimalSpecies species;

        [Ecopedia("Animals", "Reptiles", createAsSubPage: true, display: InPageTooltip.DynamicTooltip)]
        public class SnappingTurtleSpecies : AnimalSpecies
        {
            public SnappingTurtleSpecies() : base()
            {
                species = this;
                this.InstanceType = typeof(SnappingTurtle);

                // Info
                this.Name = "SnappingTurtle"; //noloc
                this.DisplayName = Localizer.DoStr("Snapping Turtle");
                // Lifetime
                this.MaturityAgeDays = 1;
                // Food
                this.FoodSources = new List<System.Type>()
                {
                    typeof(Clam),
                    typeof(PeatMoss),
                    typeof(Bullrush),
                    typeof(FilmyFern),
                    typeof(Buttonbush),
                };
                this.CalorieValue = 100;
                // Movement
                this.Swimming = true;
                this.FloatOnSurface = true;
                this.WanderingSpeed = 0.13f;
                this.Speed = 0.2f;
                this.ClimbHeight = 0;
                // Resources
                this.ResourceList = new List<SpeciesResource>()
                {
                    new SpeciesResource(typeof(SnappingTurtleCarcassItem), new Range(1, 1)),
                };
                this.ResourceBonusAtGrowth = 0.9f;
                // Behavior
                this.BrainType = typeof(AmphibiousBrain);
                this.Health = 2.5f;
                this.Damage = 3;
                this.DelayBetweenAttacksRangeSec = new Range(0.8f, 2.5f);
                this.FearFactor = 0;
                this.FleePlayers = true;
                this.AttackRange = 1;
                this.HeadDistance = 1;
                // Climate
                this.ReleasesCO2TonsPerDay = 0.02f;
            }

            // Snapping Turtles can spawn on land or water
            public override bool IsValidSpawnPathPos(Vector3i pos) { return true; }

        }

        public override GameActionPack TryApplyDamage(GameActionPack pack, INetObject damager, float damage, InteractionContext context, Item tool, Type damageDealer = null, float experienceMultiplier = 1f)
        {
            damage = Tortoise.BlockDamage(damager, damage, this);
            return base.TryApplyDamage(pack, damager, damage, context, tool, damageDealer, experienceMultiplier);
        }

    }
}
