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); }
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(); }