string TextSummary()
    {
        if (mAgent.WasDestroyed || !AgentAssigned)
        {
            TargetAgent = null;
            return("Lost");
        }

        sb.Clear();

        sb
        .Append("Name: ")
        .Append(mAgent.AgentLocalName)
        .AppendLine(((mAgent.Alive) ? "" : " (Deceased)"));
        sb
        .Append("Map: ")
        .AppendLine(mAgent.CurrentMap.gameObject.name);
        sb
        .AppendFormat("Mass: {0} / {1} | MassPerTile: {2}\n", mAgent.Mass, mAgent.MaxMass, mAgent.MassPerTile);

        //Will convert the rest of this to use stringbuilder later, as it annoys me - Zoru.
        string returnText = sb.ToString();

        if (mAgent.HasMetabolism && mAgent.Alive)
        {
            returnText += $"Energy: {mAgent.Metabolism.EnergyBudget}\n";
        }

        if (!mAgent.IsMindNull && mAgent.Alive)
        {
            UrbThinker Thinker  = mAgent.Mind;
            string     Thoughts = "Thoughts- \n";

            Thoughts += (Thinker.SafetyUrge > 0) ? "\tSafety Desire: " + Thinker.SafetyUrge + "\n" : "";
            Thoughts += (Thinker.BreedUrge > 0) ? "\tBreed Desire: " + Thinker.BreedUrge + "\n" : "";
            Thoughts += (Thinker.HungerUrge > 0) ? "\tHunger Desire: " + Thinker.HungerUrge + "\n" : "";
            Thoughts += (Thinker.RestUrge > 0) ? "\tRest Desire: " + Thinker.RestUrge + "\n" : "";

            returnText += Thoughts;
        }

        if (mAgent.HasBody)
        {
            UrbBody Body        = mAgent.mBody;
            string  BodyAnatomy = "Body- \n";
            if (Body.HasComposition)
            {
                UrbSubstance[] Ingredients = Body.BodyComposition.GetCompositionIngredients();

                for (int b = 0; b < Ingredients.Length; b++)
                {
                    BodyAnatomy += "\t" + Ingredients[b].Substance.ToString() + ":" + Ingredients[b].SubstanceAmount + "\n";
                }
                returnText += BodyAnatomy;
            }
        }

        if (mAgent.IsSmelly)
        {
            UrbSmellSource smellSource = mAgent.SmellSource;

            returnText += "EmittingSmells- \n";
            returnText += $"\t SmellStrength: {smellSource.SmellStrength} \n";
            returnText += $"\t Smells: [";

            for (int i = 0; i < smellSource.SmellTag.Length; i++)
            {
                var scentTag = smellSource.SmellTag[i];
                returnText += $"{scentTag.ToString()}";
                if (i + 1 < smellSource.SmellTag.Length)
                {
                    returnText += ", ";
                }
                else
                {
                    returnText += " ]\n";
                }
            }
        }

        if (mAgent.IsBreeder)
        {
            UrbBreeder Breeder = mAgent.Breeder;
            returnText += "Breeder- ";

            if (Breeder.Gestating)
            {
                returnText += $"\tPregnant: {Breeder.Gestating} - Cannot Breed\n";
            }
            else
            {
                returnText += $"\tCanBreed: {Breeder.CanBreed} - Not Gestating\n";
            }

            if (Breeder.Gestating || Breeder.CanBreed)
            {
                returnText += $"\t{Breeder.BreedReason()}\n";
            }
        }

        if (mAgent.IsEater)
        {
            UrbEater Eater        = mAgent.Eater;
            string   FavoriteFood = "Diet- \n";
            for (int f = 0; f < Eater.FoodSubstances.Length; f++)
            {
                FavoriteFood += "\t" + Eater.FoodSubstances[f].ToString() + "\n";
            }
            if (Eater.Stomach != null)
            {
                UrbSubstance[] Ingredients = Eater.Stomach.GetCompositionIngredients();

                string StomachContents = "Stomach Contents- \n";
                for (int b = 0; b < Ingredients.Length; b++)
                {
                    if (Ingredients[b].SubstanceAmount > 0)
                    {
                        StomachContents += "\t" + Ingredients[b].Substance.ToString() + ":" + Ingredients[b].SubstanceAmount + "\n";
                    }
                }
                returnText += FavoriteFood + StomachContents;
            }
        }

        return(returnText);
    }
Exemple #2
0
    public override void ExecuteTileBehaviour()
    {
        executeTileBehaviour.Begin();

        if (IsPaused || !mAgent.Alive)
        {
            _breedReason = "Game paused or agent is dead";
            executeTileBehaviour.End();
            return;
        }

        if (MateRequirement == 0 && CanBreed)
        {
            _breedReason = "MateRequirement is 0 and can breed";
            Gestating    = true;
            executeTileBehaviour.End();
            base.ExecuteTileBehaviour();
            return;
        }

        int MateCount = 0;

        for (int i = 0; i < RegisteredTiles.Length; i++)
        {
            if (RegisteredTiles[i] == null)
            {
                continue;
            }

            if (RegisteredTiles[i].Occupants == null)
            {
                continue;
            }

            for (int o = 0; o < RegisteredTiles[i].Occupants.Count; o++)
            {
                UrbAgent occupant = RegisteredTiles[i].Occupants[o];

                if (occupant.WasDestroyed)
                {
                    continue;
                }

                if (!occupant.IsBreeder || occupant.WasDestroyed || occupant == mAgent)
                {
                    continue;
                }

                UrbBreeder PossibleMate = occupant.Breeder;
                if (PossibleMate.BreedType != BreedType)
                {
                    continue;
                }

                float Result = LoveAction.Execute(mAgent, PossibleMate.mAgent, 0);
                if (Result <= 0)
                {
                    continue;
                }

                mAgent.Express(UrbDisplayFace.Expression.Joy);
                Result = LoveAction.Execute(PossibleMate.mAgent, mAgent, 0);

                if (Result <= 0)
                {
                    continue;
                }

                PossibleMate.mAgent.Express(UrbDisplayFace.Expression.Joy);
                if (++MateCount >= MateRequirement)
                {
                    Gestating = true;
                    break;
                }
            }
        }

        executeTileBehaviour.End();
        base.ExecuteTileBehaviour();
    }