/// Modifies eggs as they are loaded
    /// missing parameters: override_prefix
    /// egg_mass: recipe is fixed in EntityFinish
    public static void PatchEggs(KPrefabID prefab, GameObject egg)
    {
        EggContainer setting = CustomizeCritterState.StateManager.State.egg_settings.Find(s => s.eggId == egg.name);

        if (setting == null)
        {
            return;
        }

        if (setting.eggName != null)
        {
            prefab.PrefabTag = TagManager.Create(setting.eggId, setting.eggName);
            egg.GetComponent <KSelectable>()?.SetName(setting.eggName);
            egg.AddOrGet <DecorProvider>().overrideName = setting.eggName;
        }

        if (setting.eggDesc != null)
        {
            egg.AddOrGet <InfoDescription>().description = setting.eggDesc;
        }

        if (setting.override_prefix != null && setting.anim_egg != null)
        {
            // THIS CODE ONLY WORKS ON CREATURES, NOT EGGS!
            //SymbolOverrideController symbol_override_controller = SymbolOverrideControllerUtil.AddToPrefab(egg);
            //string symbolPrefix = prefab.GetComponent<CreatureBrain>().symbolPrefix;
            //if (!string.IsNullOrEmpty(symbolPrefix))
            //{
            //    symbol_override_controller.ApplySymbolOverridesByAffix(Assets.GetAnim(setting.anim_egg), symbolPrefix, null, 0);
            //}
        }

        if (setting.anim_egg != null)
        {
            KBatchedAnimController kbatchedAnimController = egg.AddOrGet <KBatchedAnimController>();
            kbatchedAnimController.AnimFiles = new KAnimFile[] { Assets.GetAnim(setting.anim_egg) };
            //kbatchedAnimController.sceneLayer = sceneLayer;
            //kbatchedAnimController.initialAnim = initialAnim;
        }

        if (setting.egg_mass != null)
        {
            egg.AddOrGet <PrimaryElement>().MassPerUnit = setting.egg_mass.Value;
        }

        if (setting.babyId != null)
        {
            egg.AddOrGetDef <IncubationMonitor.Def>().spawnedCreature = setting.babyId;
        }

        if (setting.incubation_cycles != null)
        {
            float base_incubation_rate = 100f / (600f * setting.incubation_cycles.Value);
            egg.AddOrGetDef <IncubationMonitor.Def>().baseIncubationRate = base_incubation_rate;
        }

        if (setting.egg_sortorder != null)
        {
            egg.AddOrGet <Pickupable>().sortOrder = TUNING.SORTORDER.EGGS + setting.egg_sortorder.Value;
        }

        if (setting.is_fish != null)
        {
            if (setting.is_fish.Value)
            {
                egg.AddOrGetDef <FishOvercrowdingMonitor.Def>();
            }
            else
            {
                egg.RemoveDef <FishOvercrowdingMonitor.Def>();
            }
        }

        if (setting.egg_scale != null)
        {
            KBatchedAnimController component = egg.GetComponent <KBatchedAnimController>();
            component.animWidth  = setting.egg_scale.Value;
            component.animHeight = setting.egg_scale.Value;
        }
    }
Ejemplo n.º 2
0
        private void load(TextureStore textures, OsuColour colour)
        {
            Children = new Drawable[]
            {
                eggContainer = new EggContainer
                {
                    Name   = "Egg container",
                    Anchor = Anchor.Centre,
                    Origin = Anchor.Centre,
                    Size   = new Vector2(preview_width, preview_height),
                },
                new Container
                {
                    Anchor          = Anchor.Centre,
                    Origin          = Anchor.Centre,
                    Size            = new Vector2(preview_width, preview_height),
                    Masking         = true,
                    CornerRadius    = 15,
                    BorderThickness = 10f,
                    BorderColour    = colour.Gray6,
                    Children        = new Drawable[]
                    {
                        new Box
                        {
                            RelativeSizeAxes = Axes.Both,
                            Colour           = colour.Gray3,
                        },
                        textContainer = new FillFlowContainer <GenerateRowContainer>
                        {
                            Anchor       = Anchor.Centre,
                            Origin       = Anchor.Centre,
                            Width        = preview_width / (float)Math.Cos(Math.PI * angle / 180.0),
                            AutoSizeAxes = Axes.Y,
                            Spacing      = new Vector2(10),
                            Rotation     = -angle,
                            Children     = new[]
                            {
                                new GenerateRowContainer(GenerateDirection.LeftToRight),
                                new GenerateRowContainer(GenerateDirection.RightToLeft),
                                new GenerateRowContainer(GenerateDirection.LeftToRight),
                                new GenerateRowContainer(GenerateDirection.RightToLeft),
                                new GenerateRowContainer(GenerateDirection.LeftToRight),
                                new GenerateRowContainer(GenerateDirection.RightToLeft),
                                new GenerateRowContainer(GenerateDirection.LeftToRight),
                                new GenerateRowContainer(GenerateDirection.RightToLeft),
                            }
                        }
                    }
                }
            };

            foreach (var row in textContainer.Children)
            {
                row.ClickedText += text =>
                {
                    var(textureName, scale, yOffset) = getTexture(text);
                    if (string.IsNullOrEmpty(textureName))
                    {
                        return;
                    }

                    eggContainer.GenerateEgg(textureName, scale, yOffset);