summaryrefslogtreecommitdiff
path: root/WorldlineKeepers/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts')
-rw-r--r--WorldlineKeepers/Assets/Scripts/Battle/Metadata/StageMetadata.cs35
-rw-r--r--WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs19
-rw-r--r--WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs22
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs6
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/Metadata/FileKey.cs1
-rw-r--r--WorldlineKeepers/Assets/Scripts/Data/Metadata/Filelist.cs1
-rw-r--r--WorldlineKeepers/Assets/Scripts/Managers/ResourceManager.cs32
-rw-r--r--WorldlineKeepers/Assets/Scripts/Phase/GamePhase_Dojo.cs14
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs8
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs8
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs8
-rw-r--r--WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntityBase.cs24
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Background.cs14
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Collider.cs106
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs17
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs40
-rw-r--r--WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/StaticDefine.cs1
-rw-r--r--WorldlineKeepers/Assets/Scripts/Tools/Info.cs40
-rw-r--r--WorldlineKeepers/Assets/Scripts/Tools/Info.cs.meta11
-rw-r--r--WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs46
-rw-r--r--WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs.meta11
26 files changed, 464 insertions, 55 deletions
diff --git a/WorldlineKeepers/Assets/Scripts/Battle/Metadata/StageMetadata.cs b/WorldlineKeepers/Assets/Scripts/Battle/Metadata/StageMetadata.cs
index 4a2afdb..240f95b 100644
--- a/WorldlineKeepers/Assets/Scripts/Battle/Metadata/StageMetadata.cs
+++ b/WorldlineKeepers/Assets/Scripts/Battle/Metadata/StageMetadata.cs
@@ -9,7 +9,7 @@ namespace WK.Data
public class EntityTransform
{
public Vector3 localPosition;
- public Quaternion localRotation;
+ public Vector3 localRotation;
public Vector3 localScale;
}
@@ -19,6 +19,7 @@ namespace WK.Data
public abstract class StageEntityMetadata
{
public string entityId; // 用来引用场景中的对象
+ public string entityName; //
public EntityTransform entityTransform;
}
@@ -27,17 +28,39 @@ namespace WK.Data
public string fileKey; // 背景图的资源名
}
+ public class StageEntityMetadata_SingleCollider
+ {
+ public StageEntity_Collider.ColliderShape shape;
+ public ColliderType type;
+ public Vector2 offset;
+ public Vector2 size;
+ public float radius;
+ }
+
+ public sealed class StageEntityMetadata_Collider : StageEntityMetadata
+ {
+ public List<StageEntityMetadata_SingleCollider> colliders;
+ }
+
/// <summary>
/// 关卡元数据
/// </summary>
public class StageMetadata
{
- public List<string> tests;
- public Vector3 pos;
- public int count;
-
- public List<StageEntityMetadata_Background> backgrounds;
+ public List<StageEntityMetadata_Background> backgrounds = new List<StageEntityMetadata_Background>();
+ public List<StageEntityMetadata_Collider> colliders = new List<StageEntityMetadata_Collider>();
+ public void Write(StageEntityMetadata meta)
+ {
+ if(meta is StageEntityMetadata_Background)
+ {
+ backgrounds.Add(meta as StageEntityMetadata_Background);
+ }
+ else if (meta is StageEntityMetadata_Collider)
+ {
+ colliders.Add(meta as StageEntityMetadata_Collider);
+ }
+ }
}
}
diff --git a/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs b/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs
new file mode 100644
index 0000000..3ce2663
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs
@@ -0,0 +1,19 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public static class CommonFunction
+{
+
+ public static void WriteFile(string content, string file)
+ {
+ if(File.Exists(file))
+ {
+ File.Delete(file);
+ }
+
+ File.WriteAllText(file, content);
+ }
+
+}
diff --git a/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs.meta b/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs.meta
new file mode 100644
index 0000000..d61d02b
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Common/CommonFunction.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9a3413ddfeae9d48b8e4f5983bf3484
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs
new file mode 100644
index 0000000..da84bad
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs
@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace WK.Data
+{
+
+ public partial class DataManager : Singleton<DataManager>
+ {
+
+ public FileDescriptor GetFile(string filekey)
+ {
+ FileDescriptor descriptor;
+ if(m_Filelist.TryGetValue(filekey, out descriptor))
+ {
+ return m_Filelist[filekey];
+ }
+ return null;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs.meta b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs.meta
new file mode 100644
index 0000000..b324431
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Func.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d3bd86dfb681bd544928fa409fe503a1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs
index b7fb0b9..e5b78b4 100644
--- a/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs
+++ b/WorldlineKeepers/Assets/Scripts/Data/DataManager_Load.cs
@@ -17,10 +17,10 @@ namespace WK.Data
/// <returns></returns>
public CoroutineHandle AsyncLoadAll()
{
- return Timing.Instance.RunCoroutineOnInstance(AsyncLoadAllData());
+ return Timing.Instance.RunCoroutineOnInstance(CoLoadAllData());
}
- private IEnumerator<float> AsyncLoadAllData()
+ private IEnumerator<float> CoLoadAllData()
{
Load_Filelist();
yield return Timing.WaitForSeconds(StaticDefine.IntervalLoadFile);
@@ -33,9 +33,7 @@ namespace WK.Data
{
TextAsset text = ResourceManager.Instance.LoadAsset<TextAsset>(StaticDefine.FileList);
string content = text.text;
- List<FileDescriptor> files = CSVReader.Read<FileDescriptor>(content);
CSVReader.ReadDictionary<string, FileDescriptor>(m_Filelist, content, "key");
- Debug.Log(m_Filelist.Count);
}
diff --git a/WorldlineKeepers/Assets/Scripts/Data/Metadata/FileKey.cs b/WorldlineKeepers/Assets/Scripts/Data/Metadata/FileKey.cs
index 2fdff3f..51d4d20 100644
--- a/WorldlineKeepers/Assets/Scripts/Data/Metadata/FileKey.cs
+++ b/WorldlineKeepers/Assets/Scripts/Data/Metadata/FileKey.cs
@@ -8,6 +8,7 @@ namespace WK.Data
default_stats,
default_buffs,
default_items,
+ spr_milk_bg,
all
}
diff --git a/WorldlineKeepers/Assets/Scripts/Data/Metadata/Filelist.cs b/WorldlineKeepers/Assets/Scripts/Data/Metadata/Filelist.cs
index c4ae257..a9f50b2 100644
--- a/WorldlineKeepers/Assets/Scripts/Data/Metadata/Filelist.cs
+++ b/WorldlineKeepers/Assets/Scripts/Data/Metadata/Filelist.cs
@@ -13,6 +13,7 @@ namespace WK.Data
CSV = 0,
Json = 1,
Txt = 2,
+ Png = 3,
}
/// <summary>
diff --git a/WorldlineKeepers/Assets/Scripts/Managers/ResourceManager.cs b/WorldlineKeepers/Assets/Scripts/Managers/ResourceManager.cs
index 4b318ca..0fd18df 100644
--- a/WorldlineKeepers/Assets/Scripts/Managers/ResourceManager.cs
+++ b/WorldlineKeepers/Assets/Scripts/Managers/ResourceManager.cs
@@ -1,9 +1,12 @@
+using LitJson;
using System.Collections;
using System.Collections.Generic;
+using System.IO;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
+using WK.Data;
namespace WK
{
@@ -25,7 +28,36 @@ namespace WK
#endif
}
+ /// <summary>
+ /// 根据filekey读资源
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="fileKey"></param>
+ /// <returns></returns>
+ public T LoadFile<T>(string fileKey) where T : UnityEngine.Object
+ {
+ FileDescriptor file = DataManager.Instance.GetFile(fileKey);
+ if (file == null)
+ return default(T);
+ if(file.root == FileRoot.Bundle)
+ {
+#if UNITY_EDITOR
+ string tmp = kAssetRoot + file.path;
+ T obj = AssetDatabase.LoadAssetAtPath(tmp, typeof(T)) as T;
+ return obj;
+#endif
+ }
+ return null;
+ //else if(file.root == FileRoot.Persistent)
+ //{
+ // string tmp = Application.persistentDataPath + "/" + file.path;
+ //}
+ //else if(file.root == FileRoot.Streaming)
+ //{
+
+ //}
+ }
}
diff --git a/WorldlineKeepers/Assets/Scripts/Phase/GamePhase_Dojo.cs b/WorldlineKeepers/Assets/Scripts/Phase/GamePhase_Dojo.cs
index 10dd785..5ae681c 100644
--- a/WorldlineKeepers/Assets/Scripts/Phase/GamePhase_Dojo.cs
+++ b/WorldlineKeepers/Assets/Scripts/Phase/GamePhase_Dojo.cs
@@ -20,20 +20,6 @@ namespace WK
{
yield return 0f;
}
- //SceneMetadata stage = new SceneMetadata();
- //stage.tests = new List<string>()
- //{
- // "asdas","asdasd","asdsd"
- //};
- //stage.desc = new SceneDesc();
- //stage.desc.name = "namestage";
- //stage.desc.desc = "descddd";
- //stage.pos = new Vector3(1, 2, 3);
- //stage.count = 233;
- //string json = JsonMapper.ToJson(stage);
- //LogHelper.Log(json);
- //var s = JsonMapper.ToObject<SceneMetadata>(json);
- //Debug.Log(s.pos);
}
public override IEnumerator<float> OnEnd()
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs b/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
index a644b69..696aaa9 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastBoxCollider.cs
@@ -3,13 +3,15 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-public class FastBoxCollider : MonoBehaviour, IQuadTreeObject
+public class FastBoxCollider : FastColliderBase, IQuadTreeObject
{
[SerializeField] private ColliderType m_Type;
[SerializeField] private Vector2 m_Offset;
[SerializeField] private Vector2 m_Size;
+ public ColliderType type { get { return m_Type; } set { m_Type = value; } }
+
public Vector2 center
{
get
@@ -19,8 +21,8 @@ public class FastBoxCollider : MonoBehaviour, IQuadTreeObject
}
}
- public Vector2 offset => m_Offset;
- public Vector2 size => m_Size;
+ public Vector2 offset { get { return m_Offset; } set { m_Offset = value; } }
+ public Vector2 size { get { return m_Size; } set { m_Size = value; } }
public Vector4 bound
{
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs b/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
index 5f04a9f..2e67e42 100644
--- a/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastCircleCollider.cs
@@ -3,13 +3,15 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-public class FastCircleCollider : MonoBehaviour, IQuadTreeObject
+public class FastCircleCollider : FastColliderBase, IQuadTreeObject
{
[SerializeField] private ColliderType m_Type;
[SerializeField] private float m_Radius;
[SerializeField] private Vector2 m_Offset;
+ public ColliderType type { get { return m_Type; } set { m_Type = value; } }
+
public Vector2 center
{
get
@@ -19,7 +21,7 @@ public class FastCircleCollider : MonoBehaviour, IQuadTreeObject
}
}
- public float radius => m_Radius;
+ public float radius { get { return m_Radius; } set { m_Radius = value; } }
public Vector4 bound
{
@@ -48,7 +50,7 @@ public class FastCircleCollider : MonoBehaviour, IQuadTreeObject
}
}
- public Vector2 offset => m_Offset;
+ public Vector2 offset { get { return m_Offset; } set { m_Offset = value; } }
public void Awake()
{
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs b/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs
new file mode 100644
index 0000000..a577b53
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs
@@ -0,0 +1,8 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class FastColliderBase : MonoBehaviour
+{
+
+}
diff --git a/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs.meta b/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs.meta
new file mode 100644
index 0000000..d0cdcb5
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Physics/FastColliderBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b08f2a4c34f47e641baf8b930aa75c1d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntityBase.cs b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntityBase.cs
index 43680f5..052fbfa 100644
--- a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntityBase.cs
+++ b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntityBase.cs
@@ -1,5 +1,7 @@
+using LitJson;
using System.Collections;
using System.Collections.Generic;
+using UnityEditor.PackageManager.Requests;
using UnityEditorInternal;
using UnityEngine;
using WK.Data;
@@ -13,6 +15,16 @@ namespace WK
public abstract class StageEntityBase : MonoBehaviour
{
+ protected virtual void Reset()
+ {
+ LogHelper.Log("Reset");
+
+ StageEntityMetadata data = OnSerialize();
+ string json = JsonMapper.ToJson(data);
+ LogHelper.Log(json);
+
+ }
+
public abstract StageEntityMetadata OnSerialize();
public abstract void OnDeserialize(StageEntityMetadata metadata);
@@ -21,9 +33,17 @@ namespace WK
{
entityTransform = new EntityTransform();
entityTransform.localPosition = transform.localPosition;
- entityTransform.localRotation = transform.localRotation;
+ entityTransform.localRotation = transform.localRotation.eulerAngles;
entityTransform.localScale = transform.localScale;
- }
+ }
+
+ protected void RestoreTransform(StageEntityMetadata metadata)
+ {
+ var trans = metadata.entityTransform;
+ transform.localPosition = trans.localPosition;
+ transform.localScale = trans.localScale;
+ transform.localRotation = Quaternion.Euler(trans.localRotation);
+ }
}
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Background.cs b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Background.cs
index 9eae6ab..08b0fa3 100644
--- a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Background.cs
+++ b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Background.cs
@@ -7,6 +7,7 @@ using WK.Data;
[RequireComponent(typeof(SpriteRenderer))]
public class StageEntity_Background : StageEntityBase
{
+ public string fileKey;
public override StageEntityMetadata OnSerialize()
{
@@ -14,11 +15,24 @@ public class StageEntity_Background : StageEntityBase
SaveTransform(out bg.entityTransform);
+ bg.fileKey = fileKey;
+
return bg;
}
public override void OnDeserialize(StageEntityMetadata metadata)
{
+ StageEntityMetadata_Background bg = metadata as StageEntityMetadata_Background;
+ if (bg == null)
+ return;
+
+ fileKey = bg.fileKey;
+
+ RestoreTransform(bg);
+
+ SpriteRenderer renderer = this.gameObject.GetOrAddComponent<SpriteRenderer>();
+ Sprite sprite = ResourceManager.Instance.LoadFile<Sprite>(bg.fileKey);
+ renderer.sprite = sprite;
}
}
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Collider.cs b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Collider.cs
index 0065562..64c3fc6 100644
--- a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Collider.cs
+++ b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Collider.cs
@@ -1,39 +1,99 @@
+using mh;
using System.Collections;
using System.Collections.Generic;
+using Unity.VisualScripting;
using UnityEngine;
using WK;
using WK.Data;
+/// <summary>
+/// 鍦烘櫙纰版挒浣
+/// </summary>
public class StageEntity_Collider : StageEntityBase
{
- public override void OnDeserialize(StageEntityMetadata metadata)
+ public enum ColliderShape
{
- throw new System.NotImplementedException();
+ ColliderShape_Box = 1,
+ ColliderShape_Circle = 2,
}
- public override StageEntityMetadata OnSerialize()
+ public override void OnDeserialize(StageEntityMetadata arg)
{
- throw new System.NotImplementedException();
+ StageEntityMetadata_Collider metadata = arg as StageEntityMetadata_Collider;
+ if (metadata == null)
+ return;
+ var colliders = metadata.colliders;
+ if (colliders == null || colliders.Count == 0)
+ return;
+ RestoreTransform(arg);
+ for(int i = 0; i < colliders.Count; i++)
+ {
+ var col = colliders[i];
+ if (col == null)
+ continue;
+ if (col.shape == ColliderShape.ColliderShape_Box)
+ {
+ FastBoxCollider box = gameObject.AddComponent<FastBoxCollider>();
+ box.type = col.type;
+ box.offset = col.offset;
+ box.size = col.size;
+ }
+ else if (col.shape == ColliderShape.ColliderShape_Circle)
+ {
+ FastCircleCollider circle = gameObject.AddComponent<FastCircleCollider>();
+ circle.type = col.type;
+ circle.radius = col.radius;
+ circle.offset = col.offset;
+ }
+ else
+ {
+ LogHelper.LogError("Unkown collider type");
+ }
+ }
}
- #region 搴忓垪鍖
-
- #endregion
-
- #region 鍏叡瀛楁
-
- #endregion
-
- #region 绉佹湁瀛楁
- #endregion
-
- private void Awake()
- {
- // 绉佹湁瀛楁璧嬪
-
- // 鍏叡瀛楁璧嬪
-
- // 鍒濆鍖
- }
+ public override StageEntityMetadata OnSerialize()
+ {
+ StageEntityMetadata_Collider metadata = new StageEntityMetadata_Collider();
+ metadata.colliders = new List<StageEntityMetadata_SingleCollider>();
+ SaveTransform(out metadata.entityTransform);
+ IQuadTreeObject[] cols = GetComponents<IQuadTreeObject>();
+ if(cols != null && cols.Length > 0)
+ {
+ for(int i = 0; i < cols.Length; ++i)
+ {
+ IQuadTreeObject col = cols[i];
+ if (col == null)
+ continue;
+ StageEntityMetadata_SingleCollider meta = new StageEntityMetadata_SingleCollider();
+ if(col is FastBoxCollider)
+ {
+ meta.shape = ColliderShape.ColliderShape_Box;
+ FastBoxCollider box = col as FastBoxCollider;
+ meta.type = box.type;
+ meta.offset = box.offset;
+ meta.size = box.size;
+ }
+ else if(col is FastCircleCollider)
+ {
+ meta.shape = ColliderShape.ColliderShape_Circle;
+ FastCircleCollider circle = col as FastCircleCollider;
+ meta.type = circle.type;
+ meta.radius = circle.radius;
+ meta.offset = circle.offset;
+ }
+ else
+ {
+ LogHelper.LogError("Unkown collider type");
+ }
+ metadata.colliders.Add(meta);
+ }
+ }
+ else
+ {
+ return null;
+ }
+ return metadata;
+ }
}
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs
new file mode 100644
index 0000000..bdbbfd3
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs
@@ -0,0 +1,17 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using WK;
+using WK.Data;
+
+public class StageEntity_Trigger : StageEntityBase
+{
+ public override void OnDeserialize(StageEntityMetadata metadata)
+ {
+ }
+
+ public override StageEntityMetadata OnSerialize()
+ {
+ return null;
+ }
+}
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs.meta b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs.meta
new file mode 100644
index 0000000..6f5519c
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Stage/Entites/StageEntity_Trigger.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8aa58c79e14e11944bbf1ccbedf63041
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs b/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs
new file mode 100644
index 0000000..d117779
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs
@@ -0,0 +1,40 @@
+using JetBrains.Annotations;
+using MovementEffects;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using WK;
+using WK.Data;
+
+/// <summary>
+/// 构建关卡
+/// </summary>
+public class StageBuilder : Singleton<StageBuilder>
+{
+
+ public CoroutineHandle AsyncBuildStage(StageMetadata metadata, Transform root = null)
+ {
+ return Timing.Instance.RunCoroutineOnInstance(CoBuildStage(metadata, root));
+ }
+
+ private void Build<TYPE_ENTITY, TYPE_META>(List<TYPE_META> 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<TYPE_ENTITY>();
+ entity.OnDeserialize(meta);
+ }
+ }
+
+ private IEnumerator<float> CoBuildStage(StageMetadata metadata, Transform root = null)
+ {
+ Build<StageEntity_Background, StageEntityMetadata_Background>(metadata.backgrounds, root);
+ Build<StageEntity_Collider, StageEntityMetadata_Collider>(metadata.colliders, root);
+ yield return Timing.WaitForSeconds(StaticDefine.IntervalBuildStage);
+ }
+
+}
diff --git a/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs.meta b/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs.meta
new file mode 100644
index 0000000..5194c06
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Stage/StageBuilder.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e16177dd5b2b54f41baaa724016782e8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/StaticDefine.cs b/WorldlineKeepers/Assets/Scripts/StaticDefine.cs
index b772d86..f2a9156 100644
--- a/WorldlineKeepers/Assets/Scripts/StaticDefine.cs
+++ b/WorldlineKeepers/Assets/Scripts/StaticDefine.cs
@@ -11,6 +11,7 @@ namespace WK
public class StaticDefine
{
public const float IntervalLoadFile = 0.1f;
+ public const float IntervalBuildStage = 0.1f;
public static string StatsFilePath = "metadata/default_stats.csv";
public static string BuffFilePath = "metadata/default_buffs.csv";
diff --git a/WorldlineKeepers/Assets/Scripts/Tools/Info.cs b/WorldlineKeepers/Assets/Scripts/Tools/Info.cs
new file mode 100644
index 0000000..50e2d42
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Tools/Info.cs
@@ -0,0 +1,40 @@
+
+public class Info<T0>
+{
+ public T0 arg0;
+
+ public Info(T0 arg0)
+ {
+ this.arg0 = arg0;
+ }
+}
+public class Info<T0, T1> : Info<T0>
+{
+ public T1 arg1;
+
+ public Info(T0 arg0, T1 arg1)
+ : base(arg0)
+ {
+ this.arg1 = arg1;
+ }
+}
+public class Info<T0, T1, T2> : Info<T0, T1>
+{
+ public T2 arg2;
+
+ public Info(T0 arg0, T1 arg1, T2 arg2)
+ : base(arg0, arg1)
+ {
+ this.arg2 = arg2;
+ }
+}
+public class Info<T0, T1, T2, T3> : Info<T0, T1, T2>
+{
+ public T3 arg3;
+
+ public Info(T0 arg0, T1 arg1, T2 arg2, T3 arg3)
+ : base(arg0, arg1, arg2)
+ {
+ this.arg3 = arg3;
+ }
+}
diff --git a/WorldlineKeepers/Assets/Scripts/Tools/Info.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/Info.cs.meta
new file mode 100644
index 0000000..4c72025
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Tools/Info.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c5d784cbfaf251f4ba650732770efde9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs b/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs
new file mode 100644
index 0000000..84ce560
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs
@@ -0,0 +1,46 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public static class GameObjectExtensions
+{
+ public static void SetParent(this GameObject obj, Transform parent)
+ {
+ if (!(obj == null))
+ {
+ obj.transform.SetParent(parent);
+ }
+ }
+
+ public static GameObject Find(this GameObject obj, string name)
+ {
+ if (obj == null)
+ {
+ return null;
+ }
+
+ Transform transform = obj.transform.Find(name);
+ if (!(transform != null))
+ {
+ return null;
+ }
+
+ return transform.gameObject;
+ }
+
+ public static T GetOrAddComponent<T>(this GameObject go) where T : Component
+ {
+ if (go == null)
+ {
+ return null;
+ }
+
+ T val = go.GetComponent<T>();
+ if ((Object)val == (Object)null)
+ {
+ val = go.AddComponent<T>();
+ }
+
+ return val;
+ }
+} \ No newline at end of file
diff --git a/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs.meta b/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs.meta
new file mode 100644
index 0000000..2dd16b6
--- /dev/null
+++ b/WorldlineKeepers/Assets/Scripts/Utils/GameObjectExtensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 460610b6a0fd5e14ba71f016385ca356
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: