You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.7 KiB
						
					
					
				using Godot; | 
						|
using static Godot.GD; | 
						|
using System; | 
						|
using System.Collections.Generic; | 
						|
 | 
						|
namespace EGFramework{ | 
						|
    public partial class EGThread : Node,IModule,IEGFramework{ | 
						|
 | 
						|
        public EasyEventOnce EventPool = new EasyEventOnce(); | 
						|
        public Dictionary<Action,SceneTreeTimer> EventDelayPool = new Dictionary<Action, SceneTreeTimer>(); | 
						|
 | 
						|
        public void Init() | 
						|
        { | 
						|
             | 
						|
        } | 
						|
 | 
						|
        public override void _Ready() | 
						|
        { | 
						|
 | 
						|
        } | 
						|
 | 
						|
        public override void _Process(double delta) | 
						|
        { | 
						|
            //base._Process(delta); | 
						|
            EventPool.Invoke(); | 
						|
        } | 
						|
 | 
						|
        public void ExecuteInMainThread(Action action){ | 
						|
            //ActionQueue.Enqueue(action); | 
						|
            EventPool.Register(action); | 
						|
        } | 
						|
 | 
						|
        public void ExecuteAfterSecond(Action action,double delay){ | 
						|
            SceneTreeTimer timer = this.GetTree().CreateTimer(delay); | 
						|
            timer.Timeout += action; | 
						|
            timer.Timeout += () => EventDelayPool.Remove(action); | 
						|
            EventDelayPool.Add(action,timer); | 
						|
        } | 
						|
 | 
						|
        public IArchitecture GetArchitecture() | 
						|
        { | 
						|
            return EGArchitectureImplement.Interface; | 
						|
        } | 
						|
    } | 
						|
    public static class EGThreadExtension | 
						|
    { | 
						|
        public static void ExecuteInMainThread(this Node self, Action action){ | 
						|
            //action.Invoke(); | 
						|
            self.NodeModule<EGThread>().ExecuteInMainThread(action); | 
						|
        } | 
						|
 | 
						|
        public static void ExecuteAfterSecond(this Node self, Action action,double delay){ | 
						|
            self.NodeModule<EGThread>().ExecuteAfterSecond(action,delay); | 
						|
        } | 
						|
 | 
						|
        public static void EGEnabledThread(this Node self){ | 
						|
            self.NodeModule<EGThread>(); | 
						|
        } | 
						|
    } | 
						|
} |