doc
parent
e838f6fe5b
commit
c206823b30
|
@ -1,16 +0,0 @@
|
||||||
extends Node
|
|
||||||
|
|
||||||
|
|
||||||
# Declare member variables here. Examples:
|
|
||||||
# var a = 2
|
|
||||||
# var b = "text"
|
|
||||||
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
func _ready():
|
|
||||||
pass # Replace with function body.
|
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
#func _process(delta):
|
|
||||||
# pass
|
|
|
@ -1,6 +1,6 @@
|
||||||
# extends Node2D
|
# extends Node2D
|
||||||
|
|
||||||
const StringUtils = preload("res://util/StringUtils.gd")
|
const StringUtils = preload("res://zfoo/util/StringUtils.gd")
|
||||||
|
|
||||||
# (optional) class definition with a custom icon
|
# (optional) class definition with a custom icon
|
||||||
class_name MyClass, "res://icon.png"
|
class_name MyClass, "res://icon.png"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
const RandomUtils = preload("res://util/RandomUtils.gd")
|
const RandomUtils = preload("res://zfoo/util/RandomUtils.gd")
|
||||||
|
|
||||||
var count = 0
|
var count = 0
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
extends Object
|
||||||
|
|
||||||
|
|
||||||
|
func run():
|
||||||
|
pass
|
|
@ -0,0 +1,40 @@
|
||||||
|
extends Object
|
||||||
|
|
||||||
|
const Runnable = preload("res://zfoo/common/Runnable.gd")
|
||||||
|
|
||||||
|
const SchedulerDefinition = preload("res://zfoo/scheduler/SchedulerDefinition.gd")
|
||||||
|
const TimeUtils = preload("res://zfoo/scheduler/TimeUtils.gd")
|
||||||
|
const ArrayUtils = preload("res://zfoo/util/ArrayUtils.gd")
|
||||||
|
const CollectionUtils = preload("res://zfoo/util/CollectionUtils.gd")
|
||||||
|
|
||||||
|
const schedulerMap: Dictionary = {}
|
||||||
|
|
||||||
|
static func schedule(runnable: Runnable, delay: int) -> void:
|
||||||
|
var triggerTimestamp = TimeUtils.currentTimeMillis() + delay
|
||||||
|
var definition = SchedulerDefinition.new(runnable, delay, triggerTimestamp, false)
|
||||||
|
schedulerMap[definition] = null
|
||||||
|
|
||||||
|
|
||||||
|
static func triggerPerSecond() -> void:
|
||||||
|
var timestamp = TimeUtils.currentTimeMillis()
|
||||||
|
|
||||||
|
if CollectionUtils.isEmpty(schedulerMap):
|
||||||
|
return
|
||||||
|
|
||||||
|
var deleteSchedulers = []
|
||||||
|
for scheduler in schedulerMap.keys():
|
||||||
|
if timestamp < scheduler.triggerTimestamp:
|
||||||
|
continue
|
||||||
|
if scheduler.repteated:
|
||||||
|
scheduler.triggerTimestamp += timestamp
|
||||||
|
else:
|
||||||
|
deleteSchedulers.append(scheduler)
|
||||||
|
scheduler.runnable.run()
|
||||||
|
|
||||||
|
if ArrayUtils.isEmpty(deleteSchedulers):
|
||||||
|
return
|
||||||
|
|
||||||
|
for scheduler in deleteSchedulers:
|
||||||
|
schedulerMap.erase(scheduler)
|
||||||
|
scheduler.runnable.free()
|
||||||
|
scheduler.free()
|
|
@ -0,0 +1,22 @@
|
||||||
|
extends Object
|
||||||
|
|
||||||
|
const Runnable = preload("res://zfoo/common/Runnable.gd")
|
||||||
|
|
||||||
|
# the time from now to delay execution
|
||||||
|
var delay: int
|
||||||
|
|
||||||
|
# 触发时间
|
||||||
|
var triggerTimestamp: int
|
||||||
|
|
||||||
|
# 是否重复
|
||||||
|
var repteated: bool
|
||||||
|
|
||||||
|
# 回调方法
|
||||||
|
var runnable: Runnable
|
||||||
|
|
||||||
|
|
||||||
|
func _init(runnable: Runnable, delay: int, triggerTimestamp: int, repteated: bool = false):
|
||||||
|
self.runnable = runnable
|
||||||
|
self.delay = delay
|
||||||
|
self.triggerTimestamp = triggerTimestamp
|
||||||
|
self.repteated = repteated
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends Object
|
||||||
|
|
||||||
|
const timestamp = [0]
|
||||||
|
|
||||||
|
|
||||||
|
# 获取精确的时间戳
|
||||||
|
static func currentTimeMillis() -> int:
|
||||||
|
var currentTimeMillis = OS.get_system_time_msecs()
|
||||||
|
timestamp[0] = currentTimeMillis
|
||||||
|
return currentTimeMillis
|
||||||
|
|
||||||
|
|
||||||
|
# 获取最多只有一秒延迟的粗略时间戳,适用于对时间精度要求不高的场景,最多只有一秒误差
|
||||||
|
static func now() -> int:
|
||||||
|
return timestamp[0]
|
|
@ -0,0 +1,10 @@
|
||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://zfoo/test/zfoo_test.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://zfoo/zfoo.gd" type="Script" id=2]
|
||||||
|
|
||||||
|
[node name="Node2D" type="Node2D"]
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="zfoo" type="Node2D" parent="."]
|
||||||
|
script = ExtResource( 2 )
|
|
@ -0,0 +1,5 @@
|
||||||
|
extends "res://zfoo/common/Runnable.gd"
|
||||||
|
|
||||||
|
|
||||||
|
func run():
|
||||||
|
print("MySchedulerRunnnable!!!")
|
|
@ -0,0 +1,7 @@
|
||||||
|
const SchedulerBus = preload("res://zfoo/scheduler/SchedulerBus.gd")
|
||||||
|
const MySchedulerRunnable = preload("res://zfoo/test/scheduler/MySchedulerRunnable.gd")
|
||||||
|
const TimeUtils = preload("res://zfoo/scheduler/TimeUtils.gd")
|
||||||
|
|
||||||
|
|
||||||
|
static func test():
|
||||||
|
SchedulerBus.schedule(MySchedulerRunnable.new(), 5000)
|
|
@ -0,0 +1,9 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
const SchedulerTest = preload("res://zfoo/test/scheduler/SchedulerTest.gd")
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
SchedulerTest.test()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
extends Object
|
||||||
|
|
||||||
|
|
||||||
|
static func isEmpty(dictionary: Dictionary) -> bool:
|
||||||
|
return dictionary == null or dictionary.size() == 0
|
|
@ -1,7 +1,7 @@
|
||||||
extends Object
|
extends Object
|
||||||
|
|
||||||
const NumberUtils = preload("res://util/NumberUtils.gd")
|
const NumberUtils = preload("res://zfoo/util/NumberUtils.gd")
|
||||||
const StringUtils = preload("res://util/StringUtils.gd")
|
const StringUtils = preload("res://zfoo/util/StringUtils.gd")
|
||||||
|
|
||||||
const random = [false, null]
|
const random = [false, null]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
extends Object
|
extends Object
|
||||||
|
|
||||||
const ArrayUtils = preload("res://util/ArrayUtils.gd")
|
const ArrayUtils = preload("res://zfoo/util/ArrayUtils.gd")
|
||||||
|
|
||||||
const EMPTY: String = ""
|
const EMPTY: String = ""
|
||||||
const EMPTY_JSON: String = "{}"
|
const EMPTY_JSON: String = "{}"
|
|
@ -0,0 +1,15 @@
|
||||||
|
extends Node2D
|
||||||
|
|
||||||
|
const SchedulerBus = preload("res://zfoo/scheduler/SchedulerBus.gd")
|
||||||
|
|
||||||
|
var timeCounter: float = 0
|
||||||
|
|
||||||
|
func _physics_process(delta):
|
||||||
|
schedulerUpdate(delta)
|
||||||
|
|
||||||
|
|
||||||
|
func schedulerUpdate(delta: float) -> void:
|
||||||
|
timeCounter += delta
|
||||||
|
if (int(timeCounter) == 1) :
|
||||||
|
SchedulerBus.triggerPerSecond()
|
||||||
|
timeCounter = 0
|
Loading…
Reference in New Issue