168 lines
5.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Passer.Humanoid {
#pragma warning disable 0618
#if hNW_UNET || hNW_MIRROR || hNW_PHOTON || hNW_BOLT
public partial class HumanoidPlayer {
[SerializeField]
protected bool _syncFingerSwing = false;
public bool syncFingerSwing {
get { return _syncFingerSwing; }
}
[SerializeField]
protected bool _syncFace = false;
public bool syncFace {
get { return _syncFace; }
}
[SerializeField]
private bool _syncTracking = false;
public bool syncTracking {
get { return _syncTracking; }
set { _syncTracking = value; }
}
public bool fuseTracking { get; set; }
#else
public class HumanoidPlayer : MonoBehaviour, IHumanoidNetworking {
#region Dummy interface
public void Send(bool b) { }
public void Send(byte b) { }
public void Send(int x) { }
public void Send(float f) { }
public void Send(Vector3 v) { }
public void Send(Quaternion q) { }
public bool ReceiveBool() {
return false;
}
public byte ReceiveByte() {
return 0;
}
public int ReceiveInt() {
return 0;
}
public float ReceiveFloat() {
return 0;
}
public Vector3 ReceiveVector3() {
return Vector3.zero;
}
public Quaternion ReceiveQuaternion() {
return Quaternion.identity;
}
public ulong GetObjectIdentity(GameObject obj) {
return 0;
}
public GameObject GetGameObject(ulong objIdentity) {
return this.gameObject;
}
public void InstantiateHumanoid(HumanoidControl humanoid) {
if (debug <= HumanoidNetworking.DebugLevel.Info)
DebugLog("Send Instantiate Humanoid " + humanoid.humanoidId);
HumanoidNetworking.InstantiateHumanoid instantiateHumanoid = new HumanoidNetworking.InstantiateHumanoid(humanoid);
if (createLocalRemotes)
this.Receive(instantiateHumanoid);
}
public void DestroyHumanoid(HumanoidControl humanoid) { }
public void UpdateHumanoidPose(HumanoidControl humanoid) { }
public void Grab(HandTarget handTarget, GameObject obj, bool rangeCheck, HandTarget.GrabType grabType = HandTarget.GrabType.HandGrab) { }
public void LetGo(HandTarget handTarget) { }
public void ChangeAvatar(HumanoidControl humanoid, string avatarPrefabName, string possessionLocation = null) {
if (debug <= HumanoidNetworking.DebugLevel.Info)
Debug.Log(humanoid.nwId + ": Change Avatar: " + avatarPrefabName);
HumanoidNetworking.ChangeAvatar changeAvatar = new HumanoidNetworking.ChangeAvatar(humanoid, avatarPrefabName, possessionLocation);
if (createLocalRemotes)
this.Receive(changeAvatar);
}
public void SyncTrackingSpace(HumanoidControl humanoid) { }
public void ReenableNetworkSync(GameObject obj) { }
public void DisableNetworkSync(GameObject obj) { }
public void DebugLog(string s) {
Debug.Log(s);
}
public void DebugWarning(string s) {
Debug.LogWarning(s);
}
public void DebugError(string s) {
Debug.LogError(s);
}
public float sendRate => 0;
public HumanoidNetworking.Smoothing smoothing => HumanoidNetworking.Smoothing.None;
public bool createLocalRemotes { get => true; set { return; } }
private bool _isLocal;
public bool isLocal => _isLocal; // may need to implement this
public ulong nwId => 0;
public bool syncFingerSwing => false;
public bool syncTracking { get => false; set { return; } }
public bool fuseTracking => false;
public HumanoidNetworking.HumanoidPose lastHumanoidPose { get => null; set { return; } }
#endregion Dummy Interface
public List<HumanoidControl> humanoids { get; set; }
protected virtual void Awake() {
mInstance = this;
GameObject.DontDestroyOnLoad(this.gameObject);
humanoids = HumanoidNetworking.FindLocalHumanoids();
for (int i = 0; i < humanoids.Count; i++) {
HumanoidControl humanoid = humanoids[i];
if (humanoid.isRemote)
continue;
humanoid.humanoidNetworking = this;
((IHumanoidNetworking)this).InstantiateHumanoid(humanoid);
}
}
#endif
[SerializeField]
protected HumanoidNetworking.DebugLevel _debug = HumanoidNetworking.DebugLevel.Error;
public HumanoidNetworking.DebugLevel debug {
get { return _debug; }
}
static HumanoidPlayer mInstance;
public static HumanoidPlayer instance {
get {
if (mInstance == null) {
Debug.LogWarning("No HumanoidPlayer instance found, instantiating a new instance...");
GameObject go = new GameObject();
mInstance = go.AddComponent<HumanoidPlayer>();
}
return mInstance;
}
}
}
#pragma warning restore 0618
}