コード例 #1
0
        public override GameObject GetGameObject()
        {
            GameObject prefab = GameObject.Instantiate(this.GameObject);

            prefab.name = this.ClassID;

            GameObject.DestroyImmediate(prefab.GetComponent <PickPrefab>());
            GameObject.DestroyImmediate(prefab.GetComponent <LiveMixin>());

            PrefabsHelper.AddNewGenericSeed(ref prefab);

            var model = prefab.FindChild("farming_plant_01_02");

            // Scale
            float scaleRatio = 0.75f;

            model.transform.localScale *= scaleRatio;

            // Update rigid body
            var rb = prefab.GetComponent <Rigidbody>();

            // Add EntityTag
            var entityTag = prefab.AddComponent <EntityTag>();

            entityTag.slotType = EntitySlot.Type.Small;

            // Add TechTag
            var techTag = prefab.AddComponent <TechTag>();

            techTag.type = this.TechType;

            // Update prefab identifier
            var prefabId = prefab.GetComponent <PrefabIdentifier>();

            prefabId.ClassId = this.ClassID;

            // Update large world entity
            var lwe = prefab.GetComponent <LargeWorldEntity>();

            lwe.cellLevel = LargeWorldEntity.CellLevel.Near;

            // Add world forces
            var worldForces = prefab.AddComponent <WorldForces>();

            worldForces.handleGravity     = true;
            worldForces.aboveWaterGravity = 9.81f;
            worldForces.underwaterGravity = 1.0f;
            worldForces.handleDrag        = true;
            worldForces.aboveWaterDrag    = 0.0f;
            worldForces.underwaterDrag    = 10.0f;
            worldForces.useRigidbody      = rb;

            // Add pickupable
            var pickupable = prefab.AddComponent <Pickupable>();

            pickupable.isPickupable   = true;
            pickupable.destroyOnDeath = true;
#if BELOWZERO
            pickupable.isLootCube = false;
#else
            pickupable.cubeOnPickup = false;
#endif
            pickupable.randomizeRotationWhenDropped = true;
            pickupable.usePackUpIcon = false;

            // Add eatable
            Eatable eatable = null;
            if (ConfigSwitcher.config_MarbleMelonTiny.Eatable)
            {
                eatable            = prefab.AddComponent <Eatable>();
                eatable.foodValue  = ConfigSwitcher.config_MarbleMelonTiny.FoodValue;
                eatable.waterValue = ConfigSwitcher.config_MarbleMelonTiny.WaterValue;
#if SUBNAUTICA
                eatable.stomachVolume = 10.0f;
                eatable.allowOverfill = false;
#endif
                eatable.decomposes   = ConfigSwitcher.config_MarbleMelonTiny.Decomposes;
                eatable.kDecayRate   = ConfigSwitcher.config_MarbleMelonTiny.KDecayRate;
                eatable.despawns     = ConfigSwitcher.config_MarbleMelonTiny.Despawns;
                eatable.despawnDelay = ConfigSwitcher.config_MarbleMelonTiny.DespawnDelay;
            }

            // Add plantable
            var plantable = prefab.AddComponent <Plantable>();
            plantable.aboveWater               = true;
            plantable.underwater               = false;
            plantable.isSeedling               = true;
            plantable.plantTechType            = this.TechType;
            plantable.size                     = Plantable.PlantSize.Small;
            plantable.pickupable               = pickupable;
            plantable.eatable                  = eatable;
            plantable.model                    = prefab; // prefab.FindChild("farming_plant_01_02");
            plantable.linkedGrownPlant         = new GrownPlant();
            plantable.linkedGrownPlant.seed    = plantable;
            plantable.linkedGrownPlant.seedUID = "MarbleMelonTinyFruit";

            // Add live mixin
            var liveMixin = prefab.AddComponent <LiveMixin>();
            liveMixin.health = ConfigSwitcher.config_MarbleMelonTiny.Health;
            liveMixin.data   = ScriptableObject.CreateInstance <LiveMixinData>();
            liveMixin.data.broadcastKillOnDeath = false;
            liveMixin.data.canResurrect         = false;
            liveMixin.data.destroyOnDeath       = true;
#if SUBNAUTICA
            liveMixin.data.explodeOnDestroy = false;
#endif
            liveMixin.data.invincibleInCreative  = false;
            liveMixin.data.minDamageForSound     = 10.0f;
            liveMixin.data.passDamageDataOnDeath = true;
            liveMixin.data.weldable  = false;
            liveMixin.data.knifeable = false;
            liveMixin.data.maxHealth = ConfigSwitcher.config_MarbleMelonTiny.Health;
            //liveMixin.startHealthPercent = 1.0f;

            // Adjust sky applier
            SkyApplier sa = prefab.GetComponent <SkyApplier>();
            sa.renderers = prefab.GetComponentsInChildren <MeshRenderer>();
            sa.anchorSky = Skies.Auto;
            sa.dynamic   = true;

            // Adjust colliders
            CapsuleCollider cc = prefab.GetComponentInChildren <CapsuleCollider>();
            cc.radius *= scaleRatio;
            cc.height *= scaleRatio;
            SphereCollider sc = prefab.GetComponentInChildren <SphereCollider>();
            sc.radius *= scaleRatio;

            // Add generic plant controller
            PlantGenericController plantController = prefab.AddComponent <PlantGenericController>();
            plantController.GrowthDuration = ConfigSwitcher.config_MarbleMelonTiny.GrowthDuration;
            plantController.Health         = ConfigSwitcher.config_MarbleMelonTiny.Health;
            plantController.Knifeable      = ConfigSwitcher.config_MarbleMelonTiny.Knifeable;

            CustomFloraSerializer customSerializer = prefab.AddComponent <CustomFloraSerializer>();

            // Hide plant and show seed
            PrefabsHelper.HidePlantAndShowSeed(prefab.transform, this.ClassID);

            return(prefab);
        }