limit animation framerate
This commit is contained in:
@@ -4,6 +4,8 @@ class_name Unit
|
|||||||
const MOVE_SPEED: float = 3
|
const MOVE_SPEED: float = 3
|
||||||
const TURN_SPEED: float = 10
|
const TURN_SPEED: float = 10
|
||||||
|
|
||||||
|
const ANIM_FRAME_MAX = 20
|
||||||
|
|
||||||
var max_wander_distance: float = 5
|
var max_wander_distance: float = 5
|
||||||
var min_wander_interval: float = 0.25
|
var min_wander_interval: float = 0.25
|
||||||
var max_wander_interval: float = 5
|
var max_wander_interval: float = 5
|
||||||
@@ -15,6 +17,8 @@ var spawn_pos: Vector3
|
|||||||
|
|
||||||
var locomotion_value: float = 0
|
var locomotion_value: float = 0
|
||||||
var showing_info: bool = false
|
var showing_info: bool = false
|
||||||
|
var advance_anim_on_nth_frame: int = 1
|
||||||
|
var advance_anim_delta_accum: float = 0
|
||||||
|
|
||||||
@onready var nav_agent: NavigationAgent3D = $NavigationAgent3D
|
@onready var nav_agent: NavigationAgent3D = $NavigationAgent3D
|
||||||
@onready var ui_origin: Node3D = $UiOrigin
|
@onready var ui_origin: Node3D = $UiOrigin
|
||||||
@@ -22,6 +26,7 @@ var showing_info: bool = false
|
|||||||
@onready var visibility_notifier: VisibleOnScreenNotifier3D = (
|
@onready var visibility_notifier: VisibleOnScreenNotifier3D = (
|
||||||
$VisibleOnScreenNotifier3D
|
$VisibleOnScreenNotifier3D
|
||||||
)
|
)
|
||||||
|
@onready var main_camera: MainCamera = $/root/World/MainCamera
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@@ -29,6 +34,7 @@ func _ready() -> void:
|
|||||||
assert(animation_tree != null, "animation_tree missing!")
|
assert(animation_tree != null, "animation_tree missing!")
|
||||||
assert(visibility_notifier != null, "visibility_notifier missing!")
|
assert(visibility_notifier != null, "visibility_notifier missing!")
|
||||||
assert(ui_origin != null, "ui_origin missing!")
|
assert(ui_origin != null, "ui_origin missing!")
|
||||||
|
assert(main_camera != null, "main_camera missing!")
|
||||||
super._ready()
|
super._ready()
|
||||||
|
|
||||||
if spawn_pos != null and spawn_pos != Vector3.ZERO:
|
if spawn_pos != null and spawn_pos != Vector3.ZERO:
|
||||||
@@ -59,7 +65,7 @@ func toggle_info(on: bool) -> void:
|
|||||||
showing_info = on
|
showing_info = on
|
||||||
|
|
||||||
|
|
||||||
func _click() ->void:
|
func _click() -> void:
|
||||||
toggle_info(true)
|
toggle_info(true)
|
||||||
UiManager.unit_info.open(self)
|
UiManager.unit_info.open(self)
|
||||||
|
|
||||||
@@ -96,7 +102,14 @@ func _animate(delta: float) -> void:
|
|||||||
delta * 8
|
delta * 8
|
||||||
)
|
)
|
||||||
animation_tree.set("parameters/locomotion/blend_position", locomotion_value)
|
animation_tree.set("parameters/locomotion/blend_position", locomotion_value)
|
||||||
animation_tree.advance(delta)
|
|
||||||
|
advance_anim_delta_accum += delta
|
||||||
|
advance_anim_on_nth_frame = floori(
|
||||||
|
lerp(1, ANIM_FRAME_MAX, main_camera.zoom_value) as float
|
||||||
|
)
|
||||||
|
if Engine.get_frames_drawn() % advance_anim_on_nth_frame == 0:
|
||||||
|
animation_tree.advance(advance_anim_delta_accum)
|
||||||
|
advance_anim_delta_accum = 0
|
||||||
|
|
||||||
|
|
||||||
func _wander(delta: float) -> void:
|
func _wander(delta: float) -> void:
|
||||||
|
|||||||
Reference in New Issue
Block a user