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);
}
}