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/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_mask = 3
|
||||
script = ExtResource("1_l07l8")
|
||||
|
|
@ -13675,6 +13675,7 @@ offset_top = -0.2800293
|
|||
offset_right = -0.32000732
|
||||
grow_vertical = 0
|
||||
mouse_filter = 2
|
||||
theme_type_variation = &"HPBar"
|
||||
step = 1.0
|
||||
value = 100.0
|
||||
fill_mode = 3
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ const WALK: int = 0b100
|
|||
signal jumped
|
||||
signal drop
|
||||
signal switch_weapon(to_slot: StringName)
|
||||
signal fire_begin
|
||||
signal fire_end
|
||||
signal fire_begin(timestamp: float)
|
||||
signal fire_end(timestamp: float)
|
||||
signal alternate_state
|
||||
signal switch_firemode
|
||||
signal reload
|
||||
|
|
@ -53,9 +53,9 @@ func _unhandled_input(event: InputEvent) -> void:
|
|||
switch_on_server.rpc_id(1,"knife")
|
||||
|
||||
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"):
|
||||
fire_on_server.rpc_id(1,true)
|
||||
fire_on_server.rpc_id(1,true,Rewind.timestamp)
|
||||
if event.is_action_pressed("plr_scope"):
|
||||
alternate_state_on_server.rpc_id(1)
|
||||
if event.is_action_pressed("plr_firemode"):
|
||||
|
|
@ -126,12 +126,12 @@ func drop_on_server() -> void:
|
|||
drop.emit()
|
||||
|
||||
@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 end:
|
||||
fire_end.emit()
|
||||
fire_end.emit(timestamp)
|
||||
else:
|
||||
fire_begin.emit()
|
||||
fire_begin.emit(timestamp)
|
||||
|
||||
@rpc("authority","call_local","reliable")
|
||||
func alternate_state_on_server() -> void:
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ Registry="*res://systems/registry.gd"
|
|||
Shop="*res://gui/buy_menu/shop.gd"
|
||||
MouseConfiner="*res://gui/mouse_confiner.gd"
|
||||
AutoUpdate="*res://systems/auto_update.gd"
|
||||
Rewind="*res://systems/rewind.gd"
|
||||
|
||||
[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
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(timestamp: float) -> void:
|
||||
pass
|
||||
|
||||
@rpc("authority","call_remote","reliable")
|
||||
func use_begin() -> void:
|
||||
_use_begin()
|
||||
func use_begin(timestamp: float) -> void:
|
||||
_use_begin(timestamp)
|
||||
if is_multiplayer_authority():
|
||||
use_begin.rpc()
|
||||
use_begin.rpc(timestamp)
|
||||
|
||||
func _use_end():
|
||||
func _use_end(timestamp: float):
|
||||
pass
|
||||
|
||||
@rpc("authority","call_remote","reliable")
|
||||
func use_end() -> void:
|
||||
_use_end()
|
||||
func use_end(timestamp: float) -> void:
|
||||
_use_end(timestamp)
|
||||
if is_multiplayer_authority():
|
||||
use_end.rpc()
|
||||
use_end.rpc(timestamp)
|
||||
|
||||
func _alternate_state() -> void:
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -70,12 +70,12 @@ func _enter() -> void:
|
|||
func _exit() -> void:
|
||||
super()
|
||||
|
||||
func use_begin() -> void:
|
||||
func use_begin(timestamp: float) -> void:
|
||||
if current_state != null:
|
||||
current_state.use_begin()
|
||||
func use_end() -> void:
|
||||
current_state.use_begin(timestamp)
|
||||
func use_end(timestamp: float) -> void:
|
||||
if current_state != null:
|
||||
current_state.use_end()
|
||||
current_state.use_end(timestamp)
|
||||
func alternate_state() -> void:
|
||||
if current_state != null:
|
||||
current_state.alternate_state()
|
||||
|
|
|
|||
|
|
@ -218,17 +218,17 @@ func _physics_process(delta: float) -> void:
|
|||
return
|
||||
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:
|
||||
return
|
||||
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:
|
||||
return
|
||||
if current_state != null:
|
||||
current_state.use_end()
|
||||
current_state.use_end(timestamp)
|
||||
|
||||
func alternate_state() -> void:
|
||||
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:
|
||||
pass
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(_timestamp: float) -> void:
|
||||
if Session.is_on_site(machine.player.player_id):
|
||||
transition.emit("Plant")
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ func on_animation_finished(animation: StringName):
|
|||
machine.ammo -= 1
|
||||
return_to_previous.emit()
|
||||
|
||||
func use_end() -> void:
|
||||
func use_end(_timestamp: float) -> void:
|
||||
if is_multiplayer_authority() == false:
|
||||
return
|
||||
transition.emit("Idle")
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ func _exit() -> void:
|
|||
if is_multiplayer_authority():
|
||||
machine.player.get_node("PlayerInput").reload.disconnect(init_reload)
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(timestamp: float) -> void:
|
||||
if machine.ammo > 0:
|
||||
transition.emit("Shoot")
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ extends WeaponState
|
|||
@export var fire_timer: Timer
|
||||
|
||||
var bullets_shot: int = 0
|
||||
var cached_timestamp: float = 0
|
||||
|
||||
func _enter() -> void:
|
||||
fire()
|
||||
|
|
@ -27,9 +28,10 @@ func on_animation_finished(animation):
|
|||
if animation == machine.animation_prefix + with_morphems("shoot"):
|
||||
transition.emit("Idle")
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(timestamp: float) -> void:
|
||||
if fire_timer.time_left > 0:
|
||||
return
|
||||
cached_timestamp = timestamp
|
||||
fire()
|
||||
|
||||
func fire() -> void:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ func on_animation_finished(animation):
|
|||
if animation == machine.animation_prefix + with_morphems("shoot"):
|
||||
transition.emit("Idle")
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(timestamp: float) -> void:
|
||||
if fire_timer.time_left > 0:
|
||||
return
|
||||
fire()
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ func on_animation_finished(animation):
|
|||
attack()
|
||||
machine.animation_player.play(machine.animation_prefix + "attack")
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(_timestamp: float) -> void:
|
||||
end_it = false
|
||||
|
||||
func _use_end() -> void:
|
||||
func _use_end(_timestamp: float) -> void:
|
||||
end_it = true
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ func _enter() -> void:
|
|||
func _exit() -> void:
|
||||
pass
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(_timestamp: float) -> void:
|
||||
transition.emit("Attack")
|
||||
|
||||
func _alternate_state() -> void:
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@ func _enter() -> void:
|
|||
func _exit() -> void:
|
||||
pass
|
||||
|
||||
func _use_begin() -> void:
|
||||
func _use_begin(timestamp: float) -> void:
|
||||
if machine.ammo > 0:
|
||||
transition.emit("Throw")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue