mirror of
https://github.com/GTA-ASM/SanAndreasUnity
synced 2024-11-22 20:13:02 +00:00
client checks if vehicle is spawned every frame
This commit is contained in:
parent
30b1176ee7
commit
94b7404e4f
3 changed files with 55 additions and 5 deletions
|
@ -19,13 +19,31 @@ namespace SanAndreasUnity.Behaviours.Peds.States
|
||||||
|
|
||||||
public override void OnSwitchedStateByServer(byte[] data)
|
public override void OnSwitchedStateByServer(byte[] data)
|
||||||
{
|
{
|
||||||
// we need to wait for end of frame, because vehicle may not be spawned yet (which can happen if client
|
// we need to wait for end of frame, because vehicle may not be spawned yet
|
||||||
// just connected to server)
|
//this.StartCoroutine(this.SwitchStateAtEndOfFrame(data));
|
||||||
this.StartCoroutine(this.SwitchStateAtEndOfFrame(data));
|
|
||||||
|
|
||||||
|
// check if this state was already activated
|
||||||
|
// it can happen when, among other things, syncvar hooks get invoked twice when creating the ped
|
||||||
|
if (this.IsActiveState)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.ReadNetworkData(data);
|
||||||
|
|
||||||
|
m_ped.SwitchState(this.GetType());
|
||||||
|
|
||||||
|
if (this.CurrentVehicle != null)
|
||||||
|
this.OnVehicleAssigned();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ReadNetworkData(byte[] data)
|
protected void ReadNetworkData(byte[] data)
|
||||||
{
|
{
|
||||||
|
// first reset params
|
||||||
|
this.CurrentVehicle = null;
|
||||||
|
this.CurrentVehicleSeatAlignment = Vehicle.SeatAlignment.None;
|
||||||
|
m_currentVehicleNetId = 0;
|
||||||
|
|
||||||
// extract vehicle and seat from data
|
// extract vehicle and seat from data
|
||||||
|
|
||||||
var reader = new Mirror.NetworkReader(data);
|
var reader = new Mirror.NetworkReader(data);
|
||||||
|
@ -83,6 +101,11 @@ namespace SanAndreasUnity.Behaviours.Peds.States
|
||||||
m_ped.SwitchState(this.GetType());
|
m_ped.SwitchState(this.GetType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnVehicleAssigned()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected void Cleanup()
|
protected void Cleanup()
|
||||||
{
|
{
|
||||||
if (!m_ped.IsInVehicle)
|
if (!m_ped.IsInVehicle)
|
||||||
|
@ -100,6 +123,33 @@ namespace SanAndreasUnity.Behaviours.Peds.States
|
||||||
|
|
||||||
this.CurrentVehicle = null;
|
this.CurrentVehicle = null;
|
||||||
this.CurrentVehicleSeatAlignment = Vehicle.SeatAlignment.None;
|
this.CurrentVehicleSeatAlignment = Vehicle.SeatAlignment.None;
|
||||||
|
m_currentVehicleNetId = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override void UpdateState()
|
||||||
|
{
|
||||||
|
base.UpdateState();
|
||||||
|
|
||||||
|
if (!this.IsActiveState)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Net.NetStatus.IsClientOnly)
|
||||||
|
{
|
||||||
|
if (null == this.CurrentVehicle)
|
||||||
|
{
|
||||||
|
// check if vehicle was spawned in the meantime
|
||||||
|
GameObject vehicleGo = Net.NetManager.GetNetworkObjectById(m_currentVehicleNetId);
|
||||||
|
if (vehicleGo != null)
|
||||||
|
{
|
||||||
|
// vehicle is spawned
|
||||||
|
this.CurrentVehicle = vehicleGo.GetComponent<Vehicle>();
|
||||||
|
this.OnVehicleAssigned();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void UpdateHeading()
|
protected override void UpdateHeading()
|
||||||
|
|
|
@ -95,6 +95,8 @@ namespace SanAndreasUnity.Net
|
||||||
return ! NetStatus.IsClientDisconnected ();
|
return ! NetStatus.IsClientDisconnected ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool IsClientOnly => ! NetStatus.IsServer && NetStatus.IsClientActive();
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Throws exception if server is not active.
|
/// Throws exception if server is not active.
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
|
|
||||||
- add ability for client to request:
|
- add ability for client to request:
|
||||||
|
|
||||||
- if ped model is changed while sitting in vehicle as a passenger, anim is set to idle
|
|
||||||
|
|
||||||
- roll state: client doesn't know the direction of rolling ; when doing more rolls one after another, client doesn't play anim anymore ; sometimes rolling continues even if WASD keys are not pressed ;
|
- roll state: client doesn't know the direction of rolling ; when doing more rolls one after another, client doesn't play anim anymore ; sometimes rolling continues even if WASD keys are not pressed ;
|
||||||
|
|
||||||
- shooting is inaccurate - clients should send fire event with fire pos and fire dir
|
- shooting is inaccurate - clients should send fire event with fire pos and fire dir
|
||||||
|
|
Loading…
Reference in a new issue