public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(entity.TechType, false); if (prefabForTechType == null && !PrefabDatabase.TryGetPrefab(entity.ClassId, out prefabForTechType)) { return(Optional <GameObject> .Of(Utils.CreateGenericLoot(entity.TechType))); } GameObject gameObject = Utils.SpawnFromPrefab(prefabForTechType, null); gameObject.transform.position = entity.Position; gameObject.transform.localScale = entity.Scale; if (parent.IsPresent()) { gameObject.transform.SetParent(parent.Get().transform, true); } gameObject.transform.localRotation = entity.Rotation; GuidHelper.SetNewGuid(gameObject, entity.Guid); gameObject.SetActive(true); // Makes movable objects movable... we can probably do this before the server sends the spawner packet? if (gameObject.GetComponent <Rigidbody>() == null) { gameObject.AddComponent <Rigidbody>(); } LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, entity.TechType); return(Optional <GameObject> .Of(gameObject)); }
public static void SpawnPrefab(string objectGuid, ChildGuid[] children, TechType tech, Vector3 position, Quaternion rotation) { if (tech == TechType.None) { return; } if (tech == TechType.Cyclops) { SpawnSub(objectGuid, children, position, rotation); return; } var prefab = CraftData.GetPrefabForTechType(tech); if (prefab == null) { return; } var gameObject = UnityEngine.Object.Instantiate <GameObject>(prefab, position, rotation); gameObject.SetActive(true); GuidHelper.Set(gameObject, objectGuid); GuidHelper.SetChildGuids(gameObject, children); LargeWorldEntity.Register(gameObject); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); CrafterLogic.NotifyCraftEnd(gameObject, tech); SyncedObject.ApplyTo(gameObject); }
public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent) { TechType techType = entity.TechType.Enum(); GameObject prefab; IPrefabRequest prefabRequest = PrefabDatabase.GetPrefabAsync(entity.ClassId); if (!prefabRequest.TryGetPrefab(out prefab)) // I realize its more code but Sorry couldnt stand all the warnings { prefab = CraftData.GetPrefabForTechType(techType, false); if (prefab == null) { return(Optional <GameObject> .Of(Utils.CreateGenericLoot(techType))); } } GameObject gameObject = Utils.SpawnFromPrefab(prefab, null); gameObject.transform.position = entity.Position; gameObject.transform.localScale = entity.Scale; if (parent.IsPresent()) { gameObject.transform.SetParent(parent.Get().transform, true); } gameObject.transform.localRotation = entity.Rotation; gameObject.SetActive(true); NitroxIdentifier.SetNewId(gameObject, entity.Id); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, techType); return(Optional <GameObject> .Of(gameObject)); }
public static void LargeWorldEntityLoad(LargeWorldEntity reference) { foreach (var item in plugins) { item.LargeWorldEntityLoaded(reference.gameObject); } }
public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent) { TechType techType = entity.TechType.Enum(); GameObject prefab; if (!PrefabDatabase.TryGetPrefab(entity.ClassId, out prefab)) { prefab = CraftData.GetPrefabForTechType(techType, false); if (prefab == null) { return(Optional <GameObject> .Of(Utils.CreateGenericLoot(techType))); } } GameObject gameObject = Utils.SpawnFromPrefab(prefab, null); gameObject.transform.position = entity.Position; gameObject.transform.localScale = entity.Scale; if (parent.IsPresent()) { gameObject.transform.SetParent(parent.Get().transform, true); } gameObject.transform.localRotation = entity.Rotation; GuidHelper.SetNewGuid(gameObject, entity.Guid); gameObject.SetActive(true); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, techType); return(Optional <GameObject> .Of(gameObject)); }
public static void Postfix(LargeWorldEntity __instance) { foreach (Renderer rend in __instance.fadeRenderers) { ErrorMessage.AddMessage($"Destroying {rend.name}"); Object.Destroy(rend); } }
private new void RegisterEntity(LargeWorldEntity entity) { orig_RegisterEntity(entity); if (EventManager.TriggerEvent(new EntitySpawnEvent(entity.gameObject)).IsCancelled) { UnregisterEntity(entity); } }
public static bool OnConsoleCommand_spawn_Prefix(NotificationCenter.Notification n) { if (n != null && n.data != null && n.data.Count > 0) { string text = (string)n.data[0]; if (UWE.Utils.TryParseEnum <TechType>(text, out TechType techType) && techType != TechType.None) { if (CraftData.IsAllowed(techType)) { foreach (IDecorationItem item in DecorationsMod.DecorationItems) { // If item being spawned is one of our decoration items. if (techType == item.TechType) { // If item being spawned is one of our new flora. if (!string.IsNullOrEmpty(item.ClassID) && CustomFlora.AllPlants.Contains(item.ClassID)) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(techType, true); if (prefabForTechType != null) { int num = 1; int num2; if (n.data.Count > 1 && int.TryParse((string)n.data[1], out num2)) { num = num2; } float maxDist = 12f; if (n.data.Count > 2) { maxDist = float.Parse((string)n.data[2]); } Debug.LogFormat("Spawning {0} {1}", new object[] { num, techType }); for (int i = 0; i < num; i++) { GameObject gameObject = global::Utils.CreatePrefab(prefabForTechType, maxDist, i > 0); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, techType); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); // Hide plant, show seed and enable pickupable PrefabsHelper.HidePlantAndShowSeed(gameObject.transform, item.ClassID); } } else { ErrorMessage.AddDebug("Could not find prefab for TechType = " + techType); } // Dont call original function if item being spawned is one of our new flora. return(false); } break; } } } } } // Give back execution to original function. return(true); }
public override void Process(VehicleSpawned packet) { vehicles.AddVehicle(packet.VehicleModel); GameObject gameObject = SerializationHelper.GetGameObject(packet.SerializedData); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject)); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); }
// Token: 0x0600000B RID: 11 RVA: 0x00002A8C File Offset: 0x00000C8C private void OnSubPrefabLoaded(GameObject prefab) { GameObject gameObject = global::Utils.SpawnPrefabAt(prefab, null, this.spawnPosition); gameObject.transform.localScale = new Vector3(this.x, this.y, this.z); gameObject.transform.rotation = this.spawnRotation; gameObject.SetActive(true); gameObject.SendMessage("StartConstruction", 1); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject)); }
private void DropShinyTarget(GameObject target) { target.transform.parent = null; UWE.Utils.SetCollidersEnabled(target, true); UWE.Utils.SetIsKinematic(target.GetComponent <Rigidbody>(), false); LargeWorldEntity component = target.GetComponent <LargeWorldEntity>(); if (component && LargeWorldStreamer.main) { LargeWorldStreamer.main.cellManager.RegisterEntity(component); } target.gameObject.SendMessage("OnShinyDropped", base.gameObject, SendMessageOptions.DontRequireReceiver); }
// Token: 0x06002BA8 RID: 11176 RVA: 0x00104A5C File Offset: 0x00102C5C public static bool CanDestroyObject(GameObject go) { Player componentInParent = go.GetComponentInParent <Player>(); if (componentInParent != null) { return(false); } LargeWorldEntity component = go.GetComponent <LargeWorldEntity>(); if (component != null && component.cellLevel >= LargeWorldEntity.CellLevel.Global) { return(false); } SubRoot componentInParent2 = go.GetComponentInParent <SubRoot>(); if (componentInParent2 != null) { return(false); } Constructable componentInParent3 = go.GetComponentInParent <Constructable>(); if (componentInParent3 != null) { return(false); } IObstacle component2 = go.GetComponent <IObstacle>(); if (component2 != null) { return(false); } Pickupable component3 = go.GetComponent <Pickupable>(); if (component3 != null && component3.attached) { return(false); } PlaceTool component4 = go.GetComponent <PlaceTool>(); return(!(component4 != null)); }
public void Start() { string classID = Guid.NewGuid().ToString(); GameObject StarshipMonitor = new GameObject(); GameObject StarshipMonitor_ref = Resources.Load("Submarine/Build/StarshipMonitor") as GameObject; //copy start GameObject UNITYID_63300 = StarshipMonitor_ref.transform.GetChild(0).gameObject; //Starship_wall_monitor_01_03 GameObject UNITYID_32295 = StarshipMonitor_ref.transform.GetChild(1).gameObject; //Cube GameObject UNITYID_35434 = StarshipMonitor_ref.transform.GetChild(2).gameObject; //Cube (1) //copy end PrefabIdentifier sc_prefabIdentifier = StarshipMonitor.AddComponent <PrefabIdentifier>(); sc_prefabIdentifier.ClassId = classID; LargeWorldEntity sc_largeWorldEntity = StarshipMonitor.AddComponent <LargeWorldEntity>(); sc_largeWorldEntity.cellLevel = LargeWorldEntity.CellLevel.Far; Constructable sc_constructable = StarshipMonitor.AddComponent <Constructable>(); sc_constructable.allowedOnWall = true; sc_constructable.allowedOnGround = false; sc_constructable.allowedOnCeiling = false; sc_constructable.allowedInSub = false; sc_constructable.forceUpright = false; sc_constructable.deconstructionAllowed = true; sc_constructable.rotationEnabled = false; sc_constructable.techType = TechType.id_6289; sc_constructable.model = null; StarshipMonitor.AddComponent <TechTag>().type = TechType.id_6289; ConstructableBounds sc_constructableBounds = new ConstructableBounds(); sc_constructableBounds.bounds = new OrientedBounds(new Vector3(0f, 0f, 0f), new Quaternion(0f, 0f, 0f, 1f), new Vector3(1.5f, 0.5f, 1.5f)); Texture2D lightoff = Texture2DFromData(Properties.Resources.testlight_png); GameObject I_UNITYID_63300 = Instantiate(UNITYID_63300); GameObject I_UNITYID_32295 = Instantiate(UNITYID_32295); GameObject I_UNITYID_35434 = Instantiate(UNITYID_35434); I_UNITYID_63300.transform.parent = StarshipMonitor.transform; I_UNITYID_32295.transform.parent = StarshipMonitor.transform; I_UNITYID_35434.transform.parent = StarshipMonitor.transform; I_UNITYID_63300.GetComponent <Renderer>().materials[1].SetTexture("_MainTex", lightoff); I_UNITYID_63300.GetComponent <Renderer>().materials[1].SetTexture("_Illum", lightoff); StarshipMonitor.AddComponent <BaseLightScript>(); StarshipMonitor.AddComponent <DontDestroyBaseLight>(); sc_constructable.model = I_UNITYID_63300; TechTypeItems.registerCustomTechType(6289, classID, "Light switch", "Turn the lights off and on!", EquipmentType.None, StarshipMonitor, "nesraksmods/baseswitch"); }
public static bool Prefix(ref SpawnConsoleCommand __instance, NotificationCenter.Notification n) { if (n != null && n.data != null && n.data.Count > 0) { string text = (string)n.data[0]; TechType techType; if (UWE.Utils.TryParseEnum <TechType>(text, out techType)) { if (techType == TechType.Seamoth && n.data.Count <= 2) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(techType, true); if (prefabForTechType != null) { int num = 1; int num2; if (n.data.Count > 1 && int.TryParse((string)n.data[1], out num2)) { num = num2; } float maxDist = 12f; if (n.data.Count > 2) { maxDist = float.Parse((string)n.data[2]); } Debug.LogFormat("Spawning {0} {1}", new object[] { num, techType }); for (int i = 0; i < num; i++) { GameObject gameObject = global::Utils.CreatePrefab(prefabForTechType, maxDist, i > 0); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, techType); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); } } return(false); } return(true); } else { return(true); } } return(true); }
public static Transform SetParent(GameObject builtObject) { LargeWorldEntity largeWorldEntity = builtObject.GetComponent <LargeWorldEntity>(); if (largeWorldEntity is null) { largeWorldEntity = builtObject.AddComponent <LargeWorldEntity>(); largeWorldEntity.cellLevel = LargeWorldEntity.CellLevel.Medium; } else if (builtObject.name.Contains("Transmitter")) { largeWorldEntity.cellLevel = LargeWorldEntity.CellLevel.Global; } return(builtObject.transform); }
public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent, EntityCell cellRoot) { TechType techType = entity.TechType.Enum(); GameObject prefab; IPrefabRequest prefabRequest = PrefabDatabase.GetPrefabAsync(entity.ClassId); if (!prefabRequest.TryGetPrefab(out prefab)) // I realize its more code but Sorry couldnt stand all the warnings { prefab = CraftData.GetPrefabForTechType(techType, false); if (prefab == null) { return(Optional.Of(Utils.CreateGenericLoot(techType))); } } GameObject gameObject = Utils.SpawnFromPrefab(prefab, null); gameObject.transform.position = entity.Transform.Position; gameObject.transform.rotation = entity.Transform.Rotation; gameObject.transform.localScale = entity.Transform.LocalScale; NitroxEntity.SetNewId(gameObject, entity.Id); CrafterLogic.NotifyCraftEnd(gameObject, techType); if (parent.HasValue) { gameObject.transform.SetParent(parent.Value.transform, true); } if (parent.HasValue && !parent.Value.GetComponent <LargeWorldEntityCell>()) { LargeWorldEntity.Register(gameObject); // This calls SetActive on the GameObject } else { gameObject.SetActive(true); } Optional <EntityMetadataProcessor> metadataProcessor = EntityMetadataProcessor.FromMetaData(entity.Metadata); if (metadataProcessor.HasValue) { metadataProcessor.Value.ProcessMetadata(gameObject, entity.Metadata); } return(Optional.Of(gameObject)); }
private void SpawnEntity(Entity entity) { if (entity.TechType != TechType.None) { GameObject gameObject = CraftData.InstantiateFromPrefab(entity.TechType); gameObject.transform.position = entity.Position; gameObject.transform.localRotation = entity.Rotation; GuidHelper.SetNewGuid(gameObject, entity.Guid); gameObject.SetActive(true); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, entity.TechType); Log.Debug("Received cell entity: " + entity.Guid + " at " + entity.Position + " of type " + entity.TechType); } alreadySpawnedGuids.Add(entity.Guid); }
public static void SetDefaultLargeWorldEntity(GameObject gameObj, LargeWorldEntity.CellLevel cellLevel = LargeWorldEntity.CellLevel.Near, int updaterIndex = 0) { if (gameObj == null) { return; } LargeWorldEntity lwe = gameObj.GetComponent <LargeWorldEntity>(); if (lwe == null) { lwe = gameObj.AddComponent <LargeWorldEntity>(); } lwe.cellLevel = cellLevel; lwe.updaterIndex = updaterIndex; lwe.hideFlags = HideFlags.None; lwe.useGUILayout = true; lwe.enabled = true; }
private void Process(ClientItemDropped msg) { var gameObject = ObjectSerializer.GetGameObject(msg.data); gameObject.transform.position = msg.position; GuidHelper.Set(gameObject, msg.itemGuid); var waterParkObject = GuidHelper.Find(msg.waterParkGuid); if (waterParkObject != null) { var waterPark = waterParkObject.GetComponent <WaterPark>(); if (waterPark != null) { var pickupable = gameObject.GetComponent <Pickupable>(); if (pickupable != null) { waterPark.AddItem(pickupable); } } } var rigidbody = gameObject.GetComponent <Rigidbody>(); if (rigidbody != null) { rigidbody.isKinematic = false; } SyncedObject.ApplyTo(gameObject); var constructor = gameObject.GetComponent <Constructor>(); if (constructor != null) { var method = typeof(Constructor).GetMethod("Deploy", BindingFlags.NonPublic | BindingFlags.Instance); method.Invoke(constructor, new object[] { true }); constructor.OnDeployAnimationStart(); LargeWorldEntity.Register(constructor.gameObject); Utils.PlayEnvSound(constructor.releaseSound, constructor.transform.position, 20f); } }
private static void OnSubLoaded(GameObject prefab) { var gameObject = Utils.SpawnPrefabAt(prefab, null, setPosition); gameObject.transform.rotation = setRotation; gameObject.SetActive(true); LargeWorldEntity.Register(gameObject); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject)); GuidHelper.Set(gameObject, setGuid); GuidHelper.SetChildGuids(gameObject, setChildren); setGuid = null; setChildren = null; SyncedObject.ApplyTo(gameObject); }
public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(entity.TechType, false); if (prefabForTechType == null && !PrefabDatabase.TryGetPrefab(entity.ClassId, out prefabForTechType)) { return(Optional <GameObject> .Of(Utils.CreateGenericLoot(entity.TechType))); } GameObject gameObject = Utils.SpawnFromPrefab(prefabForTechType, null); gameObject.transform.position = entity.Position; gameObject.transform.localRotation = entity.Rotation; GuidHelper.SetNewGuid(gameObject, entity.Guid); gameObject.SetActive(true); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, entity.TechType); return(Optional <GameObject> .Of(gameObject)); }
public Optional <GameObject> Spawn(Entity entity, Optional <GameObject> parent, EntityCell cellRoot) { TechType techType = entity.TechType.ToUnity(); GameObject gameObject = CreateGameObject(techType, entity.ClassId); gameObject.transform.position = entity.Transform.Position.ToUnity(); gameObject.transform.rotation = entity.Transform.Rotation.ToUnity(); gameObject.transform.localScale = entity.Transform.LocalScale.ToUnity(); NitroxEntity.SetNewId(gameObject, entity.Id); CrafterLogic.NotifyCraftEnd(gameObject, techType); if (parent.HasValue && !parent.Value.GetComponent <LargeWorldEntityCell>()) { LargeWorldEntity.Register(gameObject); // This calls SetActive on the GameObject } else if (gameObject.GetComponent <LargeWorldEntity>() != null && gameObject.transform.parent == null) { gameObject.transform.SetParent(cellRoot.liveRoot.transform, true); LargeWorldEntity.Register(gameObject); } else { gameObject.SetActive(true); } if (parent.HasValue) { gameObject.transform.SetParent(parent.Value.transform, true); } Optional <EntityMetadataProcessor> metadataProcessor = EntityMetadataProcessor.FromMetaData(entity.Metadata); if (metadataProcessor.HasValue) { metadataProcessor.Value.ProcessMetadata(gameObject, entity.Metadata); } return(Optional.Of(gameObject)); }
public static void ConstructorCraft(ConstructorInput input, TechType tech) { if (!CrafterLogic.ConsumeResources(tech)) { return; } uGUI.main.craftingMenu.Close(input); input.cinematicController.DisengageConstructor(); Transform spawn = input.constructor.GetItemSpawnPoint(tech); var position = spawn.position; var rotation = spawn.rotation; GameObject gameObject; if (tech == TechType.Cyclops) { SubConsoleCommand.main.SpawnSub("cyclops", position, rotation); gameObject = SubConsoleCommand.main.GetLastCreatedSub(); } else { gameObject = CraftData.InstantiateFromPrefab(tech, false); Transform component = gameObject.GetComponent <Transform>(); component.position = position; component.rotation = rotation; } LargeWorldEntity.Register(gameObject); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); CrafterLogic.NotifyCraftEnd(gameObject, CraftData.GetTechType(gameObject)); Story.ItemGoalTracker.OnConstruct(tech); Commands.SendSpawn(gameObject, tech); }
public override GameObject GetPrefab() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject container = GameObject.Instantiate(this.CargoCrateContainer); GameObject model = prefab.FindChild("submarine_locker_05"); prefab.name = this.ClassID; // Update container renderers GameObject cargoCrateModel = container.FindChild("model"); Renderer[] cargoCrateRenderers = cargoCrateModel.GetComponentsInChildren <Renderer>(); container.transform.parent = prefab.transform; foreach (Renderer rend in cargoCrateRenderers) { rend.enabled = false; } container.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); container.transform.localScale = new Vector3(0.001f, 0.001f, 0.001f); container.transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f); container.SetActive(true); // Update colliders GameObject builderTrigger = container.FindChild("Builder Trigger"); GameObject objectTrigger = container.FindChild("Collider"); BoxCollider builderCollider = builderTrigger.GetComponent <BoxCollider>(); builderCollider.isTrigger = false; builderCollider.enabled = false; BoxCollider objectCollider = objectTrigger.GetComponent <BoxCollider>(); objectCollider.isTrigger = false; objectCollider.enabled = false; // Delete constructable bounds ConstructableBounds cb = container.GetComponent <ConstructableBounds>(); GameObject.DestroyImmediate(cb); // Update TechTag var techTag = prefab.AddComponent <TechTag>(); techTag.type = this.TechType; // Update prefab ID var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Remove rigid body Rigidbody rb = prefab.GetComponent <Rigidbody>(); GameObject.DestroyImmediate(rb); // Add collider BoxCollider collider = model.AddComponent <BoxCollider>(); collider.size = new Vector3(0.4f, 2.0f, 0.5f); collider.center = new Vector3(0.0f, 1.0f, 0.0f); // Update large world entity LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>(); lwe.cellLevel = LargeWorldEntity.CellLevel.Near; // Set as constructible Constructable constructible = prefab.AddComponent <Constructable>(); constructible.techType = this.TechType; constructible.allowedOnWall = false; constructible.allowedInBase = true; constructible.allowedInSub = true; constructible.allowedOutside = ConfigSwitcher.AllowBuildOutside; constructible.allowedOnCeiling = false; constructible.allowedOnGround = true; constructible.allowedOnConstructables = false; constructible.rotationEnabled = true; constructible.deconstructionAllowed = true; constructible.controlModelState = true; constructible.model = model; // Add constructable bounds ConstructableBounds bounds = prefab.AddComponent <ConstructableBounds>(); return(prefab); }
internal static IEnumerator PostPatchCoroutine() { foreach (TechType tt in new HashSet <TechType>() { TechType.Exosuit, #if SUBNAUTICA_STABLE TechType.Seamoth, TechType.Cyclops, #elif BELOWZERO TechType.SeaTruck, TechType.Hoverbike #endif }) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(tt); yield return(task); GameObject prefab = task.GetResult(); if (prefab != null) { LiveMixin mixin = prefab.GetComponent <LiveMixin>(); if (mixin?.data != null) { Main.defaultHealth.Add(tt, mixin.data.maxHealth); Log.LogDebug($"For TechType {tt.AsString()}, got default health of {mixin.data.maxHealth}"); } else { Log.LogDebug($"Failed to get LiveMixin for TechType {tt.AsString()}"); } } else { Log.LogDebug($"Failed to get prefab for TechType {tt.AsString()}"); } } foreach (TechType tt in new HashSet <TechType>() { TechType.DrillableAluminiumOxide, TechType.DrillableCopper, TechType.DrillableDiamond, TechType.DrillableGold, TechType.DrillableKyanite, TechType.DrillableLead, TechType.DrillableLithium, TechType.DrillableMagnetite, TechType.DrillableMercury, TechType.DrillableNickel, TechType.DrillableQuartz, TechType.DrillableSalt, TechType.DrillableSilver, TechType.DrillableSulphur, TechType.DrillableTitanium, TechType.DrillableUranium }) { Log.LogInfo($"Fixing Cell Level for TechType {tt.AsString()}"); var classid = CraftData.GetClassIdForTechType(tt); if (WorldEntityDatabase.TryGetInfo(classid, out var worldEntityInfo)) { worldEntityInfo.cellLevel = LargeWorldEntity.CellLevel.VeryFar; WorldEntityDatabase.main.infos[classid] = worldEntityInfo; } CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(tt); yield return(task); GameObject prefab = task.GetResult(); if (prefab != null) { LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>(); if (lwe != null) { lwe.cellLevel = LargeWorldEntity.CellLevel.VeryFar; Log.LogDebug($"CellLevel for TechType {tt.AsString()} updated to Far"); } else { Log.LogWarning($"Could not find LargeWorldEntity component in prefab for TechType {tt.AsString()}"); } #if SUBNAUTICA_STABLE // Since we're here, make kyanite less troll-tastic. Drillable drillable = prefab.GetComponent <Drillable>(); if (drillable != null && drillable.kChanceToSpawnResources < DWConstants.newKyaniteChance) { drillable.kChanceToSpawnResources = DWConstants.newKyaniteChance; } #endif } else { Log.LogWarning($"Could not get prefab for TechType {tt.AsString()}"); } } yield break; }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); GameObject model = prefab.FindChild("discovery_lab_cart_01"); prefab.name = this.ClassID; // Set TechTag TechTag techTag = prefab.AddComponent <TechTag>(); techTag.type = this.TechType; // Update prefab identifier PrefabIdentifier prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; GameObject cube = prefab.FindChild("Cube"); GameObject.DestroyImmediate(cube); // Remove rigid body Rigidbody rb = prefab.GetComponent <Rigidbody>(); GameObject.DestroyImmediate(rb); // Add box collider BoxCollider collider = model.AddComponent <BoxCollider>(); collider.size = new Vector3(1.026103f, 0.6288151f, 0.91f); // -90X: Y<=>Z collider.center = new Vector3(0.005f, 0.001f, 0.455f); // -90X: Y<=>Z // Update large world entity LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>(); lwe.cellLevel = LargeWorldEntity.CellLevel.Near; // Get renderers Renderer[] rend = prefab.GetComponentsInChildren <Renderer>(); if (!ConfigSwitcher.LabCart_asBuildable) { // Set proper shaders for crafting animation foreach (Renderer renderer in rend) { renderer.material.shader = Shader.Find("MarmosetUBER"); } // We can pick this item Pickupable pickupable = prefab.AddComponent <Pickupable>(); pickupable.isPickupable = true; pickupable.randomizeRotationWhenDropped = true; // We can place this item prefab.AddComponent <CustomPlaceToolController>(); var placeTool = prefab.AddComponent <GenericPlaceTool>(); placeTool.allowedInBase = true; placeTool.allowedOnBase = true; placeTool.allowedOnCeiling = false; placeTool.allowedOnConstructable = false; placeTool.allowedOnGround = true; placeTool.allowedOnRigidBody = true; placeTool.allowedOnWalls = false; placeTool.allowedOutside = ConfigSwitcher.AllowPlaceOutside; placeTool.rotationEnabled = true; placeTool.enabled = true; placeTool.hasAnimations = false; placeTool.hasBashAnimation = false; placeTool.hasFirstUseAnimation = false; placeTool.mainCollider = collider; placeTool.pickupable = pickupable; // Add fabricating animation VFXFabricating fabricating = model.AddComponent <VFXFabricating>(); fabricating.localMinY = -0.1f; fabricating.localMaxY = 0.9f; fabricating.posOffset = new Vector3(0f, 0f, 0.04f); fabricating.eulerOffset = new Vector3(-90f, 0f, 0f); fabricating.scaleFactor = 0.5f; } else { // Set as constructible Constructable constructible = prefab.AddComponent <Constructable>(); constructible.techType = this.TechType; constructible.allowedOnWall = false; constructible.allowedInBase = true; constructible.allowedInSub = true; constructible.allowedOutside = ConfigSwitcher.AllowBuildOutside; constructible.allowedOnCeiling = false; constructible.allowedOnGround = true; constructible.allowedOnConstructables = false; constructible.deconstructionAllowed = true; constructible.controlModelState = true; constructible.model = model; // Add constructible bounds ConstructableBounds bounds = prefab.AddComponent <ConstructableBounds>(); } // Update sky applier SkyApplier applier = prefab.GetComponent <SkyApplier>(); applier.anchorSky = Skies.Auto; applier.renderers = rend; return(prefab); }
public extern void orig_RegisterEntity(LargeWorldEntity entity);
private void DrawHostilesMenu() { if (reaper == null) { if (GUILayout.Button("Spawn Reaper")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.ReaperLeviathan, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.ReaperLeviathan); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); reaper = gameObject.GetComponentInChildren <ReaperLeviathan>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Reaper Components")) { foreach (Component c in reaper.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Reaper")) { Destroy(reaper.gameObject); } if (GUILayout.Button("AttackCyclops information")) { AttackCyclops ac = reaper.GetComponent <AttackCyclops>(); Log.Print("LastTarget: " + ac.lastTarget); Log.Print("aggressPerSecond: " + ac.aggressPerSecond); Log.Print("attackAggressionThreshold: " + ac.attackAggressionThreshold); Log.Print("attackPause: " + ac.attackPause); Log.Print("maxDistToLeash: " + ac.maxDistToLeash); Log.Print("swimVelocity: " + ac.swimVelocity); Log.Print("swimInterval: " + ac.swimInterval); Log.Print("aggressiveToNoise Falloff: " + ac.aggressiveToNoise.Falloff); Log.Print("aggressiveToNoise Value: " + ac.aggressiveToNoise.Value); } GUILayout.Space(10); } if (crabsquid == null) { if (GUILayout.Button("Spawn Crabsquid")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.CrabSquid, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.CrabSquid); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); crabsquid = gameObject.GetComponentInChildren <CrabSquid>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Crabsquid Components")) { foreach (Component c in crabsquid.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Crabsquid")) { Destroy(crabsquid.gameObject); } GUILayout.Space(10); } if (ghostlevi == null) { if (GUILayout.Button("Spawn Ghost Levi")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.GhostLeviathan, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.GhostLeviathan); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); ghostlevi = gameObject.GetComponentInChildren <GhostLeviathan>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Ghost Levi Components")) { foreach (Component c in ghostlevi.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Ghost Levi")) { Destroy(ghostlevi.gameObject); } GUILayout.Space(10); } if (seaDragon == null) { if (GUILayout.Button("Spawn Seadragon")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.SeaDragon, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.SeaDragon); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); seaDragon = gameObject.GetComponentInChildren <SeaDragon>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Seadragon Components")) { foreach (Component c in seaDragon.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Seadragon")) { Destroy(seaDragon.gameObject); } GUILayout.Space(10); } if (warper == null) { if (GUILayout.Button("Spawn warper")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.Warper, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.Warper); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); warper = gameObject.GetComponentInChildren <Warper>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Warper Components")) { foreach (Component c in warper.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Warper")) { Destroy(warper.gameObject); } GUILayout.Space(10); } }
public override GameObject GetGameObject() { GameObject prefab = GameObject.Instantiate(this.GameObject); prefab.name = this.ClassID; // Update TechTag var techTag = prefab.GetComponent <TechTag>(); techTag.type = this.TechType; // Update prefab ID var prefabId = prefab.GetComponent <PrefabIdentifier>(); prefabId.ClassId = this.ClassID; // Remove rigid body Rigidbody rb = prefab.GetComponent <Rigidbody>(); GameObject.DestroyImmediate(rb); // Update large world entity LargeWorldEntity lwe = prefab.GetComponent <LargeWorldEntity>(); lwe.cellLevel = LargeWorldEntity.CellLevel.Near; // Adjust collider BoxCollider collider = prefab.GetComponentInChildren <BoxCollider>(); collider.size = new Vector3(collider.size.x, collider.size.y - 0.022f, collider.size.z); collider.center = new Vector3(collider.center.x, collider.center.y - 0.011f, collider.center.z); if (!ConfigSwitcher.EmptyDesk_asBuildable) { // We can pick this item Pickupable pickupable = prefab.AddComponent <Pickupable>(); pickupable.isPickupable = true; pickupable.randomizeRotationWhenDropped = true; // We can place this item prefab.AddComponent <CustomPlaceToolController>(); var placeTool = prefab.AddComponent <GenericPlaceTool>(); placeTool.allowedInBase = true; placeTool.allowedOnBase = false; placeTool.allowedOnCeiling = false; placeTool.allowedOnConstructable = false; placeTool.allowedOnGround = true; placeTool.allowedOnRigidBody = true; placeTool.allowedOnWalls = false; placeTool.allowedOutside = ConfigSwitcher.AllowPlaceOutside; placeTool.rotationEnabled = true; placeTool.enabled = true; placeTool.hasAnimations = false; placeTool.hasBashAnimation = false; placeTool.hasFirstUseAnimation = false; placeTool.mainCollider = collider; placeTool.pickupable = pickupable; // Add fabricating animation VFXFabricating fabricating = prefab.FindChild("Starship_work_desk_01_empty").AddComponent <VFXFabricating>(); fabricating.localMinY = -0.1f; fabricating.localMaxY = 0.9f; fabricating.posOffset = new Vector3(-0.06f, 0f, 0.04f); fabricating.eulerOffset = new Vector3(-90f, 0f, 0f); fabricating.scaleFactor = 0.35f; } else { // Set as constructible Constructable constructible = prefab.AddComponent <Constructable>(); constructible.techType = this.TechType; constructible.allowedOnWall = false; constructible.allowedInBase = true; constructible.allowedInSub = true; constructible.allowedOutside = ConfigSwitcher.AllowBuildOutside; constructible.allowedOnCeiling = false; constructible.allowedOnGround = true; constructible.allowedOnConstructables = false; constructible.deconstructionAllowed = true; constructible.controlModelState = true; constructible.model = prefab.FindChild("Starship_work_desk_01_empty"); } return(prefab); }
private void DrawHostilesMenu() { if (reaper == null) { if (GUILayout.Button("Spawn Reaper")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.ReaperLeviathan, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.ReaperLeviathan); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); reaper = gameObject.GetComponentInChildren <ReaperLeviathan>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Reaper Components")) { foreach (Component c in reaper.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Reaper")) { Destroy(reaper.gameObject); } GUILayout.Space(10); } if (crabsquid == null) { if (GUILayout.Button("Spawn Crabsquid")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.CrabSquid, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.CrabSquid); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); crabsquid = gameObject.GetComponentInChildren <CrabSquid>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Crabsquid Components")) { foreach (Component c in crabsquid.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Crabsquid")) { Destroy(crabsquid.gameObject); } GUILayout.Space(10); } if (ghostlevi == null) { if (GUILayout.Button("Spawn Ghost Levi")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.GhostLeviathan, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.GhostLeviathan); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); ghostlevi = gameObject.GetComponentInChildren <GhostLeviathan>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Ghost Levi Components")) { foreach (Component c in ghostlevi.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Ghost Levi")) { Destroy(ghostlevi.gameObject); } GUILayout.Space(10); } if (seaDragon == null) { if (GUILayout.Button("Spawn Seadragon")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.SeaDragon, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.SeaDragon); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); seaDragon = gameObject.GetComponentInChildren <SeaDragon>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Seadragon Components")) { foreach (Component c in seaDragon.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Seadragon")) { Destroy(seaDragon.gameObject); } GUILayout.Space(10); } if (warper == null) { if (GUILayout.Button("Spawn warper")) { GameObject prefabForTechType = CraftData.GetPrefabForTechType(TechType.Warper, true); GameObject gameObject = Utils.CreatePrefab(prefabForTechType); LargeWorldEntity.Register(gameObject); CrafterLogic.NotifyCraftEnd(gameObject, TechType.Warper); gameObject.SendMessage("StartConstruction", SendMessageOptions.DontRequireReceiver); warper = gameObject.GetComponentInChildren <Warper>(); gameObject.transform.position += 50f * gameObject.transform.forward; } } else { GUILayout.Space(10); if (GUILayout.Button("Warper Components")) { foreach (Component c in warper.GetComponentsInChildren(typeof(Component))) { Log.Print("Component: " + c + " on go: " + c.gameObject.name); } } if (GUILayout.Button("Delete Warper")) { Destroy(warper.gameObject); } GUILayout.Space(10); } }