public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { Stillsuit s; if (prefab == null) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(TechType.ColdSuit, verbose: true); yield return(task); prefab = task.GetResult(); //prefab.SetActive(false); // Keep the prefab inactive until we're done editing it. // Editing prefab if (prefab.TryGetComponent <Stillsuit>(out s)) { GameObject.DestroyImmediate(s); } prefab.EnsureComponent <SurvivalsuitBehaviour>(); ModPrefabCache.AddPrefab(prefab, false); // This doesn't actually do any caching, but it does disable the prefab without "disabling" it - the prefab doesn't show up in the world [as with SetActive(false)] // but it can still be instantiated. [unlike with SetActive(false)] } // Despite the component being removed from the prefab above, testing shows that the Survival Suits still add the water packs when they should. // So we're going to force-remove it here, to be safe. GameObject go = GameObject.Instantiate(prefab); if (go.TryGetComponent <Stillsuit>(out s)) { GameObject.DestroyImmediate(s); } gameObject.Set(go); }
private IEnumerator ChooseRandomResourceAsync(IOut <GameObject> result) { for (int i = 0; i < drillable.resources.Length; i++) { Drillable.ResourceType resourceType = drillable.resources[i]; if (resourceType.chance >= 1f) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(resourceType.techType, true); yield return(task); result.Set(task.GetResult()); break; } if (Player.main.gameObject.GetComponent <PlayerEntropy>().CheckChance(resourceType.techType, resourceType.chance)) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(resourceType.techType, true); yield return(task); result.Set(task.GetResult()); break; } } yield break; }
private void OnCoroutineTaskFinishedEvent(CoroutineTask task, bool stoppedManually) { if (currentRunningTasks.ContainsKey(task.Enumerator)) { currentRunningTasks.Remove(task.Enumerator); } }
public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { GameObject go; if (processedPrefab != null) { go = GameObject.Instantiate(processedPrefab); go.SetActive(true); gameObject.Set(go); yield break; } CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(TypeToClone); yield return(task); GameObject prefab = task.GetResult(); if (prefab != null) { processedPrefab = GameObject.Instantiate(prefab); processedPrefab.SetActive(false); } go = GameObject.Instantiate(processedPrefab); go.SetActive(true); gameObject.Set(go); yield break; }
public IEnumerator GetModelCloneFromPrefabAsync(TechType techType, string model, Transform newParent, bool setActive, string newName, IOut <GameObject> result) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(techType); yield return(task); GameObject clone = null; try { clone = UnityEngine.Object.Instantiate(FindDeepChild(task.GetResult(), model)); } catch { result.Set(null); yield break; } clone.SetActive(setActive); clone.transform.SetParent(newParent, false); clone.name = newName; Utils.ZeroTransform(clone.transform); result.Set(clone); yield break; }
/// <summary> /// INTERNAL ARM SPAWNING METHOD, DON'T OVERRIDE! Use ModifyGameObject() instead! /// Initializes the visual appearance of the arm in the open world or in the inventory. /// </summary> public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { CoroutineTask <GameObject> request = CraftData.GetPrefabForTechTypeAsync(PrefabForClone); yield return(request); GameObject result = request.GetResult(); if (result == null) { BZLogger.Warn("API message: Cannot instantiate prefab from TechType!"); yield break; } PrefabClone = Object.Instantiate(result); PrefabClone.name = TechTypeName; if (ArmTemplate == ArmTemplate.ClawArm) { OverrideClawArm(); } PrefabClone.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f); PostModify(); gameObject.Set(PrefabClone); yield break; }
private static IEnumerator AddItemToAlterraGen(TechType parkCreatureTechType, IFCSStorage container) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(parkCreatureTechType, false); yield return(task); GameObject prefab = task.GetResult(); prefab.SetActive(false); while (!container.CanBeStored(1, parkCreatureTechType)) { yield return(new WaitForSecondsRealtime(1)); } GameObject gameObject = GameObject.Instantiate(prefab); Pickupable pickupable = gameObject.EnsureComponent <Pickupable>(); #if SUBNAUTICA_EXP TaskResult <Pickupable> taskResult = new TaskResult <Pickupable>(); yield return(pickupable.PickupAsync(taskResult, false)); pickupable = taskResult.Get(); #else pickupable.Pickup(false); #endif container.AddItemToContainer(new InventoryItem(pickupable)); yield break; }
public void StopCoroutine(CoroutineTask routineTask) { if (activeTaskList.Contains(routineTask)) { activeTaskList.Remove(routineTask); } }
private static IEnumerator SpawnCreature(WaterPark waterPark, WaterParkCreature parkCreature, ItemsContainer container) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(parkCreature.pickupable.GetTechType(), false); yield return(task); GameObject prefab = task.GetResult(); prefab.SetActive(false); GameObject gameObject = GameObject.Instantiate(prefab); Pickupable pickupable = gameObject.EnsureComponent <Pickupable>(); #if SUBNAUTICA_EXP TaskResult <Pickupable> taskResult = new TaskResult <Pickupable>(); yield return(pickupable.PickupAsync(taskResult, false)); pickupable = taskResult.Get(); #else pickupable.Pickup(false); #endif container.AddItem(pickupable); yield break; }
private static IEnumerator AddToVehicle(TechType techType, ItemsContainer itemsContainer) { CoroutineTask <GameObject> coroutineTask = CraftData.GetPrefabForTechTypeAsync(techType, false); yield return(coroutineTask); GameObject prefab = coroutineTask.GetResult(); if (prefab is null) { prefab = Utils.CreateGenericLoot(techType); } GameObject gameObject = GameObject.Instantiate(prefab, null); Pickupable pickupable = gameObject.EnsureComponent <Pickupable>(); #if SUBNAUTICA_EXP TaskResult <Pickupable> result1 = new TaskResult <Pickupable>(); yield return(pickupable.InitializeAsync(result1)); pickupable = result1.Get(); #else pickupable.Initialize(); #endif var item = new InventoryItem(pickupable); itemsContainer.UnsafeAdd(item); string name = Language.main.GetOrFallback(techType.AsString(), techType.AsString()); ErrorMessage.AddMessage(Language.main.GetFormat("VehicleAddedToStorage", name)); uGUI_IconNotifier.main.Play(techType, uGUI_IconNotifier.AnimationType.From, null); pickupable.PlayPickupSound(); yield break; }
/// <summary> /// 添加一个新任务 /// </summary> /// <param name="taskName"></param> /// <param name="iEnumer"></param> /// <param name="callBack"></param> /// <param name="autoStart"></param> public CoroutineTask AddTask(IEnumerator iEnumer, System.Action <bool> callBack = null, object bindObject = null, bool autoStart = true) { CoroutineTask task = new CoroutineTask(iEnumer, callBack, bindObject, autoStart); AddTask(task); return(task); }
public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(TechType.ReinforcedDiveSuit); yield return(task); gameObject.Set(task.GetResult()); }
public void Stop() { if (m_autoPlayTask != null) { m_autoPlayTask.Stop(); m_autoPlayTask = null; } }
private void OnTriggerEnter(Collider other) { if (other.gameObject.name == PlayerName) { this.messenger.Publish(EventsNames.UI_Score, 1); CoroutineTask coinStatusTask = new CoroutineTask(CoinStatusController()); } }
/// <summary> /// 当满足条件循环动作 /// </summary> /// <param name="callBack"></param> /// <param name="predicates"></param> /// <param name="loopTime"></param> /// <param name="startTime"></param> /// <returns></returns> public CoroutineTask LoopTodoByWhile(System.Action callBack, float interval, System.Func <bool> predicates, object bindObject = null, float startTime = 0) { CoroutineTask task = new CoroutineTask( DoLoopByWhile(interval, predicates, callBack, startTime), null, bindObject, true); AddTask(task); return(task); }
public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(TechType.ReinforcedGloves); yield return(task); gameObject.Set(ModifyAndInstantiateGameObject(task.GetResult())); }
void Start() { task1 = new CoroutineTask(IE_Test1(), true); task1.Finished += (manual) => { Debug.LogWarning("IE_Test1 Finished " + manual); }; }
/// <summary> /// 间隔时间进行多次动作 /// </summary> /// <param name="callBack"></param> /// <param name="interval"></param> /// <param name="loopTime"></param> /// <param name="startTime"></param> /// <returns></returns> public CoroutineTask LoopTodoByTime(System.Action callBack, float interval, float loopTime, object bindObject = null, float startTime = 0) { CoroutineTask task = new CoroutineTask( DoLoopByTime(interval, loopTime, callBack, startTime), null, bindObject, true); AddTask(task); return(task); }
public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(this.PrefabType); yield return(task); gameObject.Set(ModifyPrefab(task.GetResult())); }
public new CoroutineTask StartCoroutine(IEnumerator enumerator) { CoroutineTask task = new CoroutineTask(enumerator, this); task.FinishedEvent += OnCoroutineTaskFinishedEvent; currentRunningTasks.Add(enumerator, task); return(task); }
public virtual void Stop() { if (Task != null) { Task.Stop(); Task = null; } IsRunning = false; }
/// <summary> /// 每帧进行循环 /// </summary> /// <param name="callBack"></param> /// <param name="loopTime"></param> /// <param name="bindObject"></param> /// <param name="startTime"></param> /// <returns></returns> public CoroutineTask LoopByEveryFrame(System.Action callBack, int loopTime = -1 , object bindObject = null, float startTime = 0) { CoroutineTask task = new CoroutineTask( DoLoopByEveryFrame(loopTime, callBack, startTime), null, bindObject, true); AddTask(task); return(task); }
public CoroutineTask WaitSecondTodo(System.Action <bool> callBack, float time, object bindObject = null) { CoroutineTask task = new CoroutineTask( DoWaitTodo(time), callBack, bindObject, true); AddTask(task); return(task); }
/// <summary> /// 停止一个协程 /// </summary> /// <param name="id"></param> public void RemoveCoroutine(Int64 id) { CoroutineTask task = mCoroutines.get(id.ToString()); if (task != null) { task.Running = false; mCoroutines.remove(id.ToString()); } }
public CoroutineTask StartCoroutine(IEnumerator routine) { if (routine.MoveNext()) { CoroutineTask tempTask = new CoroutineTask(routine); activeTaskList.Add(tempTask); return tempTask; } return new CoroutineTask(); }
/// <summary> /// 停止一个协程 /// </summary> /// <param name="id"></param> public void stopCoroutine(long id) { CoroutineTask task = mCoroutines[id]; if (task != null) { task.Running = false; mCoroutines.Remove(id); } }
private void Init() { if (task != null) { return; } taskResult = new TaskResult <GameObject>(); task = new CoroutineTask <GameObject>(modPrefab.GetGameObjectInternalAsync(taskResult), taskResult); }
public CoroutineTask StartCoroutine(IEnumerator routine) { if (routine.MoveNext()) { CoroutineTask tempTask = new CoroutineTask(routine); activeTaskList.Add(tempTask); return(tempTask); } return(new CoroutineTask()); }
public override IEnumerator GetGameObjectAsync(IOut<GameObject> gameObject) { CoroutineTask<GameObject> task = CraftData.GetPrefabForTechTypeAsync(TechType.SmallLocker); yield return task; var smallLockerPrefab = task.GetResult(); GameObject prefab = GameObject.Instantiate(smallLockerPrefab); var storageAccess = prefab.EnsureComponent<VehicleStorageAccess>(); storageAccess.textPrefab = GameObject.Instantiate(smallLockerPrefab.GetComponentInChildren<TextMeshProUGUI>()); #endif var container = prefab.EnsureComponent<StorageContainer>(); container.width = Mod.config.LockerWidth; container.height = Mod.config.LockerHeight; container.container.Resize(Mod.config.LockerWidth, Mod.config.LockerHeight); var meshRenderers = prefab.GetComponentsInChildren<MeshRenderer>(); foreach (var meshRenderer in meshRenderers) { meshRenderer.material.color = new Color(0, 0, 1); } var label = prefab.FindChild("Label"); DestroyImmediate(label); var canvas = LockerPrefabShared.CreateCanvas(prefab.transform); storageAccess.background = LockerPrefabShared.CreateBackground(canvas.transform); storageAccess.icon = LockerPrefabShared.CreateIcon(storageAccess.background.transform, PrimaryColor, 15); storageAccess.text = LockerPrefabShared.CreateText(storageAccess.background.transform, storageAccess.textPrefab, PrimaryColor, -40, 10, ""); storageAccess.seamothIcon = LockerPrefabShared.CreateIcon(storageAccess.background.transform, PrimaryColor, 80); storageAccess.seamothCountText = LockerPrefabShared.CreateText(storageAccess.background.transform, storageAccess.textPrefab, PrimaryColor, 55, 10, "none"); storageAccess.exosuitIcon = LockerPrefabShared.CreateIcon(storageAccess.background.transform, PrimaryColor, 80); storageAccess.exosuitCountText = LockerPrefabShared.CreateText(storageAccess.background.transform, storageAccess.textPrefab, PrimaryColor, 55, 10, "none"); storageAccess.seamothIcon.rectTransform.anchoredPosition += new Vector2(-23, 0); storageAccess.seamothCountText.rectTransform.anchoredPosition += new Vector2(-23, 0); storageAccess.exosuitIcon.rectTransform.anchoredPosition += new Vector2(23, 0); storageAccess.exosuitCountText.rectTransform.anchoredPosition += new Vector2(23, 0); if (Mod.config.UseAutosortMod) { storageAccess.autosortCheckbox = CheckboxButton.CreateCheckbox(storageAccess.background.transform, PrimaryColor, storageAccess.textPrefab, "Autosort"); storageAccess.autosortCheckbox.transform.localPosition = new Vector3(0, -104 + 19); } storageAccess.enableCheckbox = CheckboxButton.CreateCheckbox(storageAccess.background.transform, PrimaryColor, storageAccess.textPrefab, "Enabled"); storageAccess.enableCheckbox.transform.localPosition = new Vector3(0, -104); storageAccess.background.gameObject.SetActive(false); #if SN1 return prefab; #elif BZ gameObject.Set(prefab); #endif }
public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject) { CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(PrefabTemplate); yield return(task); GameObject prefab = task.GetResult(); GameObject obj = Object.Instantiate(prefab); gameObject.Set(obj); }
/// <summary> /// 启动一个协程 /// </summary> /// <param name="co"></param> /// <returns></returns> public Int64 AddCoroutine(IEnumerator co) { if (this.gameObject.activeSelf) { CoroutineTask task = new CoroutineTask(IdAssginer.getId(IdAssginer.IdType.CoroutineId)); mCoroutines.add(task.Id.ToString(), task); StartCoroutine(task.CoroutineWrapper(co)); return(task.Id); } return(-1); }
// Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Q)) { num++; print("Start Coroutine " + num + " : "); curCoroutineTask = CoroutineManager.Instance.StartCoroutine(Test()); } if (Input.GetKeyDown(KeyCode.W)) { print("Stop Coroutine " + num + " : "); CoroutineManager.Instance.StopCoroutine(curCoroutineTask); } }
public void StopCoroutine(CoroutineTask routineTask) { if (activeTaskList.Contains(routineTask)) activeTaskList.Remove(routineTask); }