Skip to content

Commit 9a35309

Browse files
authored
Merge pull request #103 from Raicuparta/dev
2 parents f5b2dad + 5b23535 commit 9a35309

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1610
-315
lines changed

AssetBundles/debug.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ CRC: 1039691058
33
Hashes:
44
AssetFileHash:
55
serializedVersion: 2
6-
Hash: 1ebde8144d4ce7cbdecece7bbb3c7b82
6+
Hash: 09f9f4f247158b6c3e422fc20dae56a0
77
TypeTreeHash:
88
serializedVersion: 2
99
Hash: 737950008f8470fd33adbb15e41f47ec

AssetBundles/network

254 Bytes
Binary file not shown.

AssetBundles/network.manifest

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
ManifestFileVersion: 0
2-
CRC: 2285725699
2+
CRC: 561788810
33
Hashes:
44
AssetFileHash:
55
serializedVersion: 2
6-
Hash: bfdfbb9f8479265cc2743fea2a066dda
6+
Hash: bde832827d2a891a56083d4ec38bfb92
77
TypeTreeHash:
88
serializedVersion: 2
99
Hash: 47ee499ae8022a6b96ca6a5fd541f154
@@ -25,6 +25,8 @@ ClassTypes:
2525
Script: {instanceID: 0}
2626
Assets:
2727
- Assets/NetworkPlayer.prefab
28+
- Assets/NetworkCameraRoot.prefab
29+
- Assets/NetworkProbe.prefab
2830
- Assets/NetworkManager.prefab
2931
- Assets/NetworkShip.prefab
3032
Dependencies: []

QSB/Animation/AnimTrigger.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public enum AnimTrigger
66
Grounded = 1,
77
Ungrounded = 2,
88
SuitUp = 3,
9-
SuitDown = 4
9+
SuitDown = 4,
10+
Crouch = 5
1011
}
1112
}

QSB/Animation/AnimTriggerMessage.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@ public class AnimTriggerMessage : QSBMessage
99

1010
public short TriggerId;
1111
public uint SenderId;
12+
public float Value;
1213

1314
public override void Deserialize(NetworkReader reader)
1415
{
16+
Value = reader.ReadSingle();
1517
TriggerId = reader.ReadInt16();
1618
SenderId = reader.ReadPackedUInt32();
1719
}
1820

1921
public override void Serialize(NetworkWriter writer)
2022
{
23+
writer.Write(Value);
2124
writer.Write(TriggerId);
2225
writer.Write(SenderId);
2326
}

QSB/Animation/AnimationSync.cs

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using OWML.ModHelper.Events;
43
using QSB.Messaging;
54
using UnityEngine;
@@ -9,6 +8,11 @@ namespace QSB.Animation
98
{
109
public class AnimationSync : NetworkBehaviour
1110
{
11+
private const float CrouchSendInterval = 0.1f;
12+
private const float CrouchChargeThreshold = 0.01f;
13+
private const float CrouchSmoothTime = 0.05f;
14+
private const int CrouchLayerIndex = 1;
15+
1216
private Animator _anim;
1317
private Animator _bodyAnim;
1418
private NetworkAnimator _netAnim;
@@ -20,7 +24,9 @@ public class AnimationSync : NetworkBehaviour
2024
private GameObject _unsuitedGraphics;
2125
private PlayerCharacterController _playerController;
2226

23-
private static readonly Dictionary<uint, AnimationSync> PlayerAnimSyncs = new Dictionary<uint, AnimationSync>();
27+
private readonly AnimFloatParam _crouchParam = new AnimFloatParam();
28+
private float _sendTimer;
29+
private float _lastSentJumpChargeFraction;
2430

2531
private void Awake()
2632
{
@@ -44,7 +50,7 @@ private void InitCommon(Transform body)
4450
mirror.Init(_anim, _bodyAnim);
4551
}
4652

47-
PlayerAnimSyncs[netId.Value] = this;
53+
PlayerRegistry.AnimationSyncs.Add(this);
4854

4955
for (var i = 0; i < _anim.parameterCount; i++)
5056
{
@@ -111,12 +117,13 @@ public void Reset()
111117
GlobalMessenger.RemoveListener("RemoveSuit", OnSuitDown);
112118
}
113119

114-
private void SendTrigger(AnimTrigger trigger)
120+
private void SendTrigger(AnimTrigger trigger, float value = 0)
115121
{
116122
var message = new AnimTriggerMessage
117123
{
118124
SenderId = netId.Value,
119-
TriggerId = (short)trigger
125+
TriggerId = (short)trigger,
126+
Value = value
120127
};
121128
if (isServer)
122129
{
@@ -135,13 +142,15 @@ private void OnServerReceiveMessage(AnimTriggerMessage message)
135142

136143
private void OnClientReceiveMessage(AnimTriggerMessage message)
137144
{
138-
if (PlayerAnimSyncs.TryGetValue(message.SenderId, out var animSync) && animSync != this)
145+
var animationSync = PlayerRegistry.GetAnimationSync(message.SenderId);
146+
if (animationSync == null || animationSync == this)
139147
{
140-
animSync.HandleTrigger((AnimTrigger)message.TriggerId);
148+
return;
141149
}
150+
animationSync.HandleTrigger((AnimTrigger)message.TriggerId, message.Value);
142151
}
143152

144-
private void HandleTrigger(AnimTrigger trigger)
153+
private void HandleTrigger(AnimTrigger trigger, float value)
145154
{
146155
switch (trigger)
147156
{
@@ -160,10 +169,57 @@ private void HandleTrigger(AnimTrigger trigger)
160169
_unsuitedGraphics.SetActive(true);
161170
_suitedGraphics.SetActive(false);
162171
break;
172+
case AnimTrigger.Crouch:
173+
_crouchParam.Target = value;
174+
break;
163175
default:
164176
throw new ArgumentOutOfRangeException(nameof(trigger), trigger, null);
165177
}
166178
}
167179

180+
private void Update()
181+
{
182+
if (isLocalPlayer)
183+
{
184+
SyncLocalCrouch();
185+
}
186+
else
187+
{
188+
SyncRemoteCrouch();
189+
}
190+
}
191+
192+
private void SyncLocalCrouch()
193+
{
194+
if (_playerController == null)
195+
{
196+
return;
197+
}
198+
_sendTimer += Time.unscaledDeltaTime;
199+
if (_sendTimer < CrouchSendInterval)
200+
{
201+
return;
202+
}
203+
var jumpChargeFraction = _playerController.GetJumpChargeFraction();
204+
if (Math.Abs(jumpChargeFraction - _lastSentJumpChargeFraction) < CrouchChargeThreshold)
205+
{
206+
return;
207+
}
208+
SendTrigger(AnimTrigger.Crouch, jumpChargeFraction);
209+
_lastSentJumpChargeFraction = jumpChargeFraction;
210+
_sendTimer = 0;
211+
}
212+
213+
private void SyncRemoteCrouch()
214+
{
215+
if (_bodyAnim == null)
216+
{
217+
return;
218+
}
219+
_crouchParam.Smooth(CrouchSmoothTime);
220+
var jumpChargeFraction = _crouchParam.Current;
221+
_bodyAnim.SetLayerWeight(CrouchLayerIndex, jumpChargeFraction);
222+
}
223+
168224
}
169225
}

QSB/Animation/AnimatorMirror.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,5 @@ private void SmoothFloats()
6969
_to.SetFloat(floatParam.Key, current);
7070
}
7171
}
72-
7372
}
7473
}

QSB/Events/EventHandler.cs

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
using System.Collections;
2+
using QSB.Messaging;
3+
using QSB.TransformSync;
4+
using UnityEngine;
5+
using UnityEngine.Networking;
6+
7+
namespace QSB.Events
8+
{
9+
public class EventHandler : NetworkBehaviour
10+
{
11+
public static EventHandler LocalInstance;
12+
13+
private MessageHandler<EventMessage> _eventHandler;
14+
15+
private void Awake()
16+
{
17+
LocalInstance = this;
18+
19+
_eventHandler = new MessageHandler<EventMessage>();
20+
_eventHandler.OnClientReceiveMessage += OnClientReceiveMessage;
21+
_eventHandler.OnServerReceiveMessage += OnServerReceiveMessage;
22+
}
23+
24+
public void Send(EventType eventType)
25+
{
26+
StartCoroutine(SendEvent(eventType));
27+
}
28+
29+
private IEnumerator SendEvent(EventType eventType)
30+
{
31+
yield return new WaitUntil(() => PlayerTransformSync.LocalInstance != null);
32+
var message = new EventMessage
33+
{
34+
EventType = (int)eventType,
35+
SenderId = PlayerTransformSync.LocalInstance.netId.Value
36+
};
37+
_eventHandler.SendToServer(message);
38+
}
39+
40+
private void OnServerReceiveMessage(EventMessage message)
41+
{
42+
_eventHandler.SendToAll(message);
43+
}
44+
45+
private void OnClientReceiveMessage(EventMessage message)
46+
{
47+
var player = PlayerRegistry.GetPlayer(message.SenderId);
48+
player.IsReady = true;
49+
if (message.SenderId == PlayerRegistry.LocalPlayer.NetId)
50+
{
51+
return;
52+
}
53+
switch ((EventType)message.EventType)
54+
{
55+
case EventType.TurnOnFlashlight:
56+
player.UpdateState(State.Flashlight, true);
57+
player.FlashLight.TurnOn();
58+
break;
59+
case EventType.TurnOffFlashlight:
60+
player.UpdateState(State.Flashlight, false);
61+
player.FlashLight.TurnOff();
62+
break;
63+
case EventType.SuitUp:
64+
player.UpdateState(State.Suit, true);
65+
break;
66+
case EventType.RemoveSuit:
67+
player.UpdateState(State.Suit, false);
68+
break;
69+
case EventType.EquipSignalscope:
70+
player.UpdateState(State.Signalscope, true);
71+
player.Signalscope.EquipTool();
72+
break;
73+
case EventType.UnequipSignalscope:
74+
player.UpdateState(State.Signalscope, false);
75+
player.Signalscope.UnequipTool();
76+
break;
77+
case EventType.EquipTranslator:
78+
player.UpdateState(State.Translator, true);
79+
player.Translator.EquipTool();
80+
break;
81+
case EventType.UnequipTranslator:
82+
player.UpdateState(State.Translator, false);
83+
player.Translator.UnequipTool();
84+
break;
85+
case EventType.ProbeLauncherEquipped:
86+
player.UpdateState(State.ProbeLauncher, true);
87+
player.ProbeLauncher.EquipTool();
88+
break;
89+
case EventType.ProbeLauncherUnequipped:
90+
player.UpdateState(State.ProbeLauncher, false);
91+
player.ProbeLauncher.UnequipTool();
92+
break;
93+
case EventType.RetrieveProbe:
94+
player.UpdateState(State.ProbeActive, false);
95+
player.Probe.Deactivate();
96+
break;
97+
case EventType.LaunchProbe:
98+
player.UpdateState(State.ProbeActive, true);
99+
player.Probe.Activate();
100+
break;
101+
}
102+
}
103+
}
104+
}

0 commit comments

Comments
 (0)