using JetBrains.Annotations; using MovementEffects; using System.Collections; using System.Collections.Generic; using UnityEngine; using WK; using WK.Data; /// /// 构建关卡 /// public class StageBuilder : Singleton { /// /// 异步构建关卡 /// /// /// /// public CoroutineHandle AsyncBuildStage(StageMetadata metadata, Transform root = null) { return Timing.Instance.RunCoroutineOnInstance(CoBuildStage(metadata, root)); } private void Build(List metadatas, Transform root = null) where TYPE_ENTITY : StageEntityBase where TYPE_META : StageEntityMetadata { for(int i = 0; i < metadatas.Count; ++i) { TYPE_META meta = metadatas[i]; GameObject go = new GameObject(); if(root != null) go.transform.SetParent(root); var entity = go.AddComponent(); entity.OnDeserialize(meta); } } private IEnumerator CoBuildStage(StageMetadata metadata, Transform root = null) { Build(metadata.backgrounds, root); yield return Timing.WaitForSeconds(StaticDefine.IntervalBuildStage); Build(metadata.colliders, root); yield return Timing.WaitForSeconds(StaticDefine.IntervalBuildStage); Build(metadata.triggers, root); yield return Timing.WaitForSeconds(StaticDefine.IntervalBuildStage); } }