初次提交
This commit is contained in:
74
Script/Base/TickControl.cs
Normal file
74
Script/Base/TickControl.cs
Normal file
@ -0,0 +1,74 @@
|
||||
using Godot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
namespace Cosmobox
|
||||
{
|
||||
public partial class TickControl : Node
|
||||
{
|
||||
[Export] public bool pause = false;
|
||||
|
||||
private List<IThing> things = new List<IThing>();
|
||||
private List<IThingPhysics> thingsPhysics = new List<IThingPhysics>();
|
||||
private List<IThingUI> thingsUI = new List<IThingUI>();
|
||||
public override void _Ready()
|
||||
{
|
||||
// 从场景树的根节点开始查找实现了 IThing 接口的节点
|
||||
FindThingsInScene(GetTree().GetRoot());
|
||||
}
|
||||
|
||||
private void FindThingsInScene(Node node)
|
||||
{
|
||||
// 检查当前节点是否实现了 IThing 接口
|
||||
if (node is IThing thing)
|
||||
{
|
||||
things.Add(thing);
|
||||
}
|
||||
|
||||
// 检查当前节点是否实现了 IThingPhysics 接口
|
||||
if (node is IThingPhysics physicsThing)
|
||||
{
|
||||
thingsPhysics.Add(physicsThing);
|
||||
}
|
||||
|
||||
// 检查当前节点是否实现了 IThingUI 接口
|
||||
if (node is IThingUI uiThing)
|
||||
{
|
||||
thingsUI.Add(uiThing);
|
||||
}
|
||||
|
||||
// 递归查找子节点
|
||||
foreach (Node child in node.GetChildren())
|
||||
{
|
||||
FindThingsInScene(child);
|
||||
}
|
||||
}
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (!pause)
|
||||
{
|
||||
foreach (var thing in things)
|
||||
{
|
||||
thing.Update(delta);
|
||||
}
|
||||
}
|
||||
foreach (var thing in thingsUI)
|
||||
{
|
||||
thing.UpdateUI();
|
||||
}
|
||||
}
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
if (!pause)
|
||||
{
|
||||
foreach (var thing in thingsPhysics)
|
||||
{
|
||||
thing.PhysicsUpdate(delta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user