protected void InitializeCreatable() { List <UrbSpawnAction> WorkingList = new List <UrbSpawnAction>(); for (int i = 0; i < UrbSystemIO.Instance.AgentTypes.Count; i++) { UrbBody TestBody = UrbSystemIO.Instance.AgentTypes[i].GetComponent <UrbBody>(); if (TestBody == null || TestBody.BodyRecipe == null || TestBody.BodyRecipe.Length == 0) { continue; } var template = UrbSystemIO.Instance.AgentTypes[i]; var sprite = template.GetComponent <SpriteRenderer>().sprite; UrbSpawnAction CreateAction = new UrbSpawnAction { AgentTemplate = template, Icon = sprite, Name = template.gameObject.name, MapDisplaySprite = sprite }; WorkingList.Add(CreateAction); } Creatable = WorkingList.ToArray(); }
protected static float MobilityTest(UrbBody TestBody) { float Result = 0.0f; if (!TestBody.enabled) { return(Result); } float Muscle = TestBody.BodyComposition[UrbSubstanceTag.Muscle]; float Nerves = TestBody.BodyComposition[UrbSubstanceTag.Nerves]; Result = Mathf.Min(Muscle, Nerves) * 2; float mass = TestBody.BodyComposition.Mass; if (mass < 1) { return(0); } float BodyRatio = Muscle / mass; return(Result * BodyRatio); }
public override float TileEvaluateCheck(UrbTile Target, bool Contact = false) { if (Stomach == null || Target == null) { return(0); } s_TileEvaluateCheck_p.Begin(); float Evaluation = 0; for (int o = 0; o < Target.Occupants.Count; o++) { if (Target.Occupants[o] == mAgent) { continue; } UrbBody PossibleFood = Target.Occupants[o].mBody; if (PossibleFood != null) { for (int f = 0; f < FoodSubstances.Length; f++) { if (PossibleFood.BodyComposition == null) { break; } Evaluation += PossibleFood.BodyComposition[FoodSubstances[f]]; } } } s_TileEvaluateCheck_p.End(); return(Evaluation * Stomach.Emptiness); }
public override void RegisterTileForBehaviour(float Evaluation, UrbTile Target, int Index) { s_RegisterTileForBehaviour_p.Begin(); for (int o = 0; o < Target.Occupants.Count; o++) { if (Target.Occupants[o] == mAgent) { continue; } UrbBody PossibleFood = Target.Occupants[o].mBody; if (PossibleFood != null) { for (int f = 0; f < FoodSubstances.Length; f++) { if (PossibleFood.BodyComposition == null) { break; } if (PossibleFood.BodyComposition[FoodSubstances[f]] > 0) { DetectedFood.Add(PossibleFood); break; } } } } base.RegisterTileForBehaviour(Evaluation, Target, Index); s_RegisterTileForBehaviour_p.End(); }
public virtual float Test(UrbAgent target, float Modifier = 0.0f) { UrbBody TestBody = target.mBody; Debug.Log(this.GetType() + " Using Default Test"); float Result = Modifier; return(Result); }
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); }