Exemple #1
0
    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();
    }
Exemple #2
0
    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);
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    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();
    }
Exemple #5
0
    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);
    }