Пример #1
0
        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;
        }
Пример #3
0
 private void OnCoroutineTaskFinishedEvent(CoroutineTask task, bool stoppedManually)
 {
     if (currentRunningTasks.ContainsKey(task.Enumerator))
     {
         currentRunningTasks.Remove(task.Enumerator);
     }
 }
Пример #4
0
        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;
        }
Пример #5
0
        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;
        }
Пример #7
0
        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;
        }
Пример #8
0
 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;
        }
Пример #10
0
        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);
        }
Пример #12
0
        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;
     }
 }
Пример #14
0
 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);
        }
Пример #16
0
        public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject)
        {
            CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(TechType.ReinforcedGloves);

            yield return(task);

            gameObject.Set(ModifyAndInstantiateGameObject(task.GetResult()));
        }
Пример #17
0
 void Start()
 {
     task1           = new CoroutineTask(IE_Test1(), true);
     task1.Finished += (manual) =>
     {
         Debug.LogWarning("IE_Test1 Finished " + manual);
     };
 }
Пример #18
0
        /// <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);
        }
Пример #19
0
        public override IEnumerator GetGameObjectAsync(IOut <GameObject> gameObject)
        {
            CoroutineTask <GameObject> task = CraftData.GetPrefabForTechTypeAsync(this.PrefabType);

            yield return(task);

            gameObject.Set(ModifyPrefab(task.GetResult()));
        }
Пример #20
0
        public new CoroutineTask StartCoroutine(IEnumerator enumerator)
        {
            CoroutineTask task = new CoroutineTask(enumerator, this);

            task.FinishedEvent += OnCoroutineTaskFinishedEvent;
            currentRunningTasks.Add(enumerator, task);

            return(task);
        }
Пример #21
0
 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);
        }
Пример #24
0
    /// <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();
 }
Пример #26
0
    /// <summary>
    /// 停止一个协程
    /// </summary>
    /// <param name="id"></param>
    public void stopCoroutine(long id)
    {
        CoroutineTask task = mCoroutines[id];

        if (task != null)
        {
            task.Running = false;
            mCoroutines.Remove(id);
        }
    }
Пример #27
0
        private void Init()
        {
            if (task != null)
            {
                return;
            }

            taskResult = new TaskResult <GameObject>();
            task       = new CoroutineTask <GameObject>(modPrefab.GetGameObjectInternalAsync(taskResult), taskResult);
        }
Пример #28
0
 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
			}
Пример #30
0
        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);
        }
Пример #31
0
 /// <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);
 }