Compare commits
1 commit
master
...
rewind-sys
| Author | SHA1 | Date | |
|---|---|---|---|
| 42c95820d7 |
16 changed files with 55 additions and 33 deletions
|
|
@ -12472,7 +12472,7 @@ properties/1/path = NodePath("PlayerInput:compressed_states")
|
||||||
properties/1/spawn = true
|
properties/1/spawn = true
|
||||||
properties/1/replication_mode = 1
|
properties/1/replication_mode = 1
|
||||||
|
|
||||||
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_models")]
|
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_models") groups=["Player"]]
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
script = ExtResource("1_l07l8")
|
script = ExtResource("1_l07l8")
|
||||||
|
|
@ -13675,6 +13675,7 @@ offset_top = -0.2800293
|
||||||
offset_right = -0.32000732
|
offset_right = -0.32000732
|
||||||
grow_vertical = 0
|
grow_vertical = 0
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
|
theme_type_variation = &"HPBar"
|
||||||
step = 1.0
|
step = 1.0
|
||||||
value = 100.0
|
value = 100.0
|
||||||
fill_mode = 3
|
fill_mode = 3
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ const WALK: int = 0b100
|
||||||
signal jumped
|
signal jumped
|
||||||
signal drop
|
signal drop
|
||||||
signal switch_weapon(to_slot: StringName)
|
signal switch_weapon(to_slot: StringName)
|
||||||
signal fire_begin
|
signal fire_begin(timestamp: float)
|
||||||
signal fire_end
|
signal fire_end(timestamp: float)
|
||||||
signal alternate_state
|
signal alternate_state
|
||||||
signal switch_firemode
|
signal switch_firemode
|
||||||
signal reload
|
signal reload
|
||||||
|
|
@ -53,9 +53,9 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||||
switch_on_server.rpc_id(1,"knife")
|
switch_on_server.rpc_id(1,"knife")
|
||||||
|
|
||||||
if event.is_action_pressed("plr_fire"):
|
if event.is_action_pressed("plr_fire"):
|
||||||
fire_on_server.rpc_id(1,false)
|
fire_on_server.rpc_id(1,false,Rewind.timestamp)
|
||||||
if event.is_action_released("plr_fire"):
|
if event.is_action_released("plr_fire"):
|
||||||
fire_on_server.rpc_id(1,true)
|
fire_on_server.rpc_id(1,true,Rewind.timestamp)
|
||||||
if event.is_action_pressed("plr_scope"):
|
if event.is_action_pressed("plr_scope"):
|
||||||
alternate_state_on_server.rpc_id(1)
|
alternate_state_on_server.rpc_id(1)
|
||||||
if event.is_action_pressed("plr_firemode"):
|
if event.is_action_pressed("plr_firemode"):
|
||||||
|
|
@ -126,12 +126,12 @@ func drop_on_server() -> void:
|
||||||
drop.emit()
|
drop.emit()
|
||||||
|
|
||||||
@rpc("authority","call_local","reliable")
|
@rpc("authority","call_local","reliable")
|
||||||
func fire_on_server(end: bool) -> void:
|
func fire_on_server(end: bool, timestamp: float) -> void:
|
||||||
if not multiplayer.is_server(): return
|
if not multiplayer.is_server(): return
|
||||||
if end:
|
if end:
|
||||||
fire_end.emit()
|
fire_end.emit(timestamp)
|
||||||
else:
|
else:
|
||||||
fire_begin.emit()
|
fire_begin.emit(timestamp)
|
||||||
|
|
||||||
@rpc("authority","call_local","reliable")
|
@rpc("authority","call_local","reliable")
|
||||||
func alternate_state_on_server() -> void:
|
func alternate_state_on_server() -> void:
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ Registry="*res://systems/registry.gd"
|
||||||
Shop="*res://gui/buy_menu/shop.gd"
|
Shop="*res://gui/buy_menu/shop.gd"
|
||||||
MouseConfiner="*res://gui/mouse_confiner.gd"
|
MouseConfiner="*res://gui/mouse_confiner.gd"
|
||||||
AutoUpdate="*res://systems/auto_update.gd"
|
AutoUpdate="*res://systems/auto_update.gd"
|
||||||
|
Rewind="*res://systems/rewind.gd"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
|
|
|
||||||
17
systems/rewind.gd
Normal file
17
systems/rewind.gd
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
const timestamp_range:float = 200.0 #MSEC
|
||||||
|
const timestamps_amount: int = 200
|
||||||
|
|
||||||
|
var timestamp: float = 0
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if not is_multiplayer_authority():
|
||||||
|
return
|
||||||
|
if Session.session_started_flag:
|
||||||
|
timestamp += delta
|
||||||
|
sync_time.rpc(timestamp)
|
||||||
|
|
||||||
|
@rpc
|
||||||
|
func sync_time(new_timestamp: float) -> void:
|
||||||
|
timestamp = new_timestamp
|
||||||
1
systems/rewind.gd.uid
Normal file
1
systems/rewind.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bafcih3g8gi2q
|
||||||
|
|
@ -8,23 +8,23 @@ signal return_to_previous
|
||||||
|
|
||||||
var machine: WeaponSubStateMachine
|
var machine: WeaponSubStateMachine
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(timestamp: float) -> void:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@rpc("authority","call_remote","reliable")
|
@rpc("authority","call_remote","reliable")
|
||||||
func use_begin() -> void:
|
func use_begin(timestamp: float) -> void:
|
||||||
_use_begin()
|
_use_begin(timestamp)
|
||||||
if is_multiplayer_authority():
|
if is_multiplayer_authority():
|
||||||
use_begin.rpc()
|
use_begin.rpc(timestamp)
|
||||||
|
|
||||||
func _use_end():
|
func _use_end(timestamp: float):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@rpc("authority","call_remote","reliable")
|
@rpc("authority","call_remote","reliable")
|
||||||
func use_end() -> void:
|
func use_end(timestamp: float) -> void:
|
||||||
_use_end()
|
_use_end(timestamp)
|
||||||
if is_multiplayer_authority():
|
if is_multiplayer_authority():
|
||||||
use_end.rpc()
|
use_end.rpc(timestamp)
|
||||||
|
|
||||||
func _alternate_state() -> void:
|
func _alternate_state() -> void:
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -70,12 +70,12 @@ func _enter() -> void:
|
||||||
func _exit() -> void:
|
func _exit() -> void:
|
||||||
super()
|
super()
|
||||||
|
|
||||||
func use_begin() -> void:
|
func use_begin(timestamp: float) -> void:
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.use_begin()
|
current_state.use_begin(timestamp)
|
||||||
func use_end() -> void:
|
func use_end(timestamp: float) -> void:
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.use_end()
|
current_state.use_end(timestamp)
|
||||||
func alternate_state() -> void:
|
func alternate_state() -> void:
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.alternate_state()
|
current_state.alternate_state()
|
||||||
|
|
|
||||||
|
|
@ -218,17 +218,17 @@ func _physics_process(delta: float) -> void:
|
||||||
return
|
return
|
||||||
current_state.physics_update(delta)
|
current_state.physics_update(delta)
|
||||||
|
|
||||||
func use_begin() -> void:
|
func use_begin(timestamp: float) -> void:
|
||||||
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
||||||
return
|
return
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.use_begin()
|
current_state.use_begin(timestamp)
|
||||||
|
|
||||||
func use_end() -> void:
|
func use_end(timestamp: float) -> void:
|
||||||
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
||||||
return
|
return
|
||||||
if current_state != null:
|
if current_state != null:
|
||||||
current_state.use_end()
|
current_state.use_end(timestamp)
|
||||||
|
|
||||||
func alternate_state() -> void:
|
func alternate_state() -> void:
|
||||||
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
if not multiplayer.is_server() or Session.round_state == Session.ROUND_STATES.BUY or disabled:
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,6 @@ func _enter() -> void:
|
||||||
func _exit() -> void:
|
func _exit() -> void:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(_timestamp: float) -> void:
|
||||||
if Session.is_on_site(machine.player.player_id):
|
if Session.is_on_site(machine.player.player_id):
|
||||||
transition.emit("Plant")
|
transition.emit("Plant")
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ func on_animation_finished(animation: StringName):
|
||||||
machine.ammo -= 1
|
machine.ammo -= 1
|
||||||
return_to_previous.emit()
|
return_to_previous.emit()
|
||||||
|
|
||||||
func use_end() -> void:
|
func use_end(_timestamp: float) -> void:
|
||||||
if is_multiplayer_authority() == false:
|
if is_multiplayer_authority() == false:
|
||||||
return
|
return
|
||||||
transition.emit("Idle")
|
transition.emit("Idle")
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ func _exit() -> void:
|
||||||
if is_multiplayer_authority():
|
if is_multiplayer_authority():
|
||||||
machine.player.get_node("PlayerInput").reload.disconnect(init_reload)
|
machine.player.get_node("PlayerInput").reload.disconnect(init_reload)
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(timestamp: float) -> void:
|
||||||
if machine.ammo > 0:
|
if machine.ammo > 0:
|
||||||
transition.emit("Shoot")
|
transition.emit("Shoot")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ extends WeaponState
|
||||||
@export var fire_timer: Timer
|
@export var fire_timer: Timer
|
||||||
|
|
||||||
var bullets_shot: int = 0
|
var bullets_shot: int = 0
|
||||||
|
var cached_timestamp: float = 0
|
||||||
|
|
||||||
func _enter() -> void:
|
func _enter() -> void:
|
||||||
fire()
|
fire()
|
||||||
|
|
@ -27,9 +28,10 @@ func on_animation_finished(animation):
|
||||||
if animation == machine.animation_prefix + with_morphems("shoot"):
|
if animation == machine.animation_prefix + with_morphems("shoot"):
|
||||||
transition.emit("Idle")
|
transition.emit("Idle")
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(timestamp: float) -> void:
|
||||||
if fire_timer.time_left > 0:
|
if fire_timer.time_left > 0:
|
||||||
return
|
return
|
||||||
|
cached_timestamp = timestamp
|
||||||
fire()
|
fire()
|
||||||
|
|
||||||
func fire() -> void:
|
func fire() -> void:
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ func on_animation_finished(animation):
|
||||||
if animation == machine.animation_prefix + with_morphems("shoot"):
|
if animation == machine.animation_prefix + with_morphems("shoot"):
|
||||||
transition.emit("Idle")
|
transition.emit("Idle")
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(timestamp: float) -> void:
|
||||||
if fire_timer.time_left > 0:
|
if fire_timer.time_left > 0:
|
||||||
return
|
return
|
||||||
fire()
|
fire()
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,8 @@ func on_animation_finished(animation):
|
||||||
attack()
|
attack()
|
||||||
machine.animation_player.play(machine.animation_prefix + "attack")
|
machine.animation_player.play(machine.animation_prefix + "attack")
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(_timestamp: float) -> void:
|
||||||
end_it = false
|
end_it = false
|
||||||
|
|
||||||
func _use_end() -> void:
|
func _use_end(_timestamp: float) -> void:
|
||||||
end_it = true
|
end_it = true
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ func _enter() -> void:
|
||||||
func _exit() -> void:
|
func _exit() -> void:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(_timestamp: float) -> void:
|
||||||
transition.emit("Attack")
|
transition.emit("Attack")
|
||||||
|
|
||||||
func _alternate_state() -> void:
|
func _alternate_state() -> void:
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,6 @@ func _enter() -> void:
|
||||||
func _exit() -> void:
|
func _exit() -> void:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
func _use_begin() -> void:
|
func _use_begin(timestamp: float) -> void:
|
||||||
if machine.ammo > 0:
|
if machine.ammo > 0:
|
||||||
transition.emit("Throw")
|
transition.emit("Throw")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue