HolyFot

Forge Object Tracking + Example NetworkBehaviour

May 26th, 2020
53
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using UnityEngine;
  2. using BeardedManStudios.Forge.Networking;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7.  
  8. public class NetObjectTracking : MonoBehaviour
  9. {
  10.     public List<NetworkedMCPlayer> players;
  11.     public List<NetworkedNPC> npcs;
  12.     public List<DroppedItem> droppedItems;
  13.     public List<NetDestructable> destructables;
  14.     private static NetObjectPool _Instance;
  15.    
  16.     public static NetObjectPool Instance
  17.     {
  18.         get
  19.         {
  20.             if (_Instance == null)
  21.                 _Instance = GameObject.FindObjectOfType<NetObjectTracking>();
  22.             return _Instance;
  23.         }
  24.     }
  25.  
  26.     void Start()
  27.     {
  28.         InstantiateLists();
  29.         DontDestroyOnLoad(this.gameObject);
  30.     }
  31.  
  32.     public void InstantiateLists()
  33.     {
  34.         players = new List<NetworkedMCPlayer>();
  35.         npcs = new List<NetworkedNPC>();
  36.         droppedItems = new List<DroppedItem>();
  37.         destructables = new List<NetDestructable>();
  38.     }
  39.  
  40.     public int GetPlayerByNetworkID(uint id1)
  41.     {
  42.         if (players != null)
  43.         {
  44.             for (var i = 0; i < players.Count; i++)
  45.             {
  46.                 if (players[i].GetOwnerNetID() == id1)
  47.                 {
  48.                     return i;
  49.                 }
  50.             }
  51.         }
  52.         return -1;
  53.     }
  54.  
  55.     public int GetNPCByNetworkID(uint id1)
  56.     {
  57.         if (npcs != null)
  58.         {
  59.             for (var i = 0; i < npcs.Count; i++)
  60.             {
  61.                 if (npcs[i].netObjID == id1)
  62.                 {
  63.                     return i;
  64.                 }
  65.             }
  66.         }
  67.         return -1;
  68.     }
  69.  
  70.     public int GetDroppedItemByNetworkID(uint id1)
  71.     {
  72.         if (droppedItems != null)
  73.         {
  74.             for (var i = 0; i < droppedItems.Count; i++)
  75.             {
  76.                 if (droppedItems[i].networkObject.NetworkId == id1)
  77.                 {
  78.                     return i;
  79.                 }
  80.             }
  81.         }
  82.         return -1;
  83.     }
  84.  
  85.     public int GetDestructableByNetworkID(uint id1)
  86.     {
  87.         if (destructables != null)
  88.         {
  89.             for (var i = 0; i < destructables.Count; i++)
  90.             {
  91.                 if (destructables[i].networkObject.NetworkId == id1)
  92.                 {
  93.                     return i;
  94.                 }
  95.             }
  96.         }
  97.         return -1;
  98.     }
  99. }
  100.  
  101.  
  102. //Example Network Behaviour
  103. using UnityEngine;
  104. using UnityEngine.UI;
  105. using System;
  106. using System.Collections;
  107. using System.Collections.Generic;
  108. using BeardedManStudios.Forge.Networking.Generated;
  109. using BeardedManStudios.Forge.Networking;
  110. using BeardedManStudios.Forge.Networking.Unity;
  111. using UnityEngine.Animations;
  112.  
  113. public class NetDestructable : DestructableBehavior
  114. {
  115.     public bool isNetStarted = false;
  116.     public bool isInit;
  117.     public float selfDeleteTime = 4.0f;
  118.     public bool isDestroyed = false;
  119.     public float _SyncFactor = 0.2f; //LERP POS/ROT TIMING
  120.  
  121.     protected override void NetworkStart()
  122.     {
  123.         base.NetworkStart();
  124.         GetScripts();
  125.  
  126.         NetObjectPool.Instance.destructables.Add(this);
  127.         isInit = false;
  128.         isNetStarted = true;
  129.  
  130.         StartCoroutine(SelfDelete());
  131.     }
  132.  
  133.     private void GetScripts()
  134.     {
  135.         MainThreadManager.Run(() =>
  136.         {
  137.         //
  138.         });
  139.     }
  140.  
  141.     void Update()
  142.     {
  143. #if IS_SERVER
  144.         //Send Pos/Rot/Anims to the Clients
  145.         networkObject.position = transform.position;
  146.         networkObject.rotation = transform.rotation;
  147. #else
  148.         //Receive Data on Remote Players
  149.         transform.position = Vector3.Lerp(transform.position, networkObject.position, _SyncFactor);
  150.         transform.rotation = Quaternion.Lerp(transform.rotation, networkObject.rotation, _SyncFactor);
  151. #endif
  152.     }
  153.  
  154.     IEnumerator SelfDelete()
  155.     {
  156.         yield return new WaitForSeconds(selfDeleteTime);
  157.  
  158.         //Remove from NetObjectPool
  159.         int i = -1;
  160.         if (networkObject != null)
  161.             i = NetObjectPool.Instance.GetDestructableByNetworkID((uint)networkObject.NetworkId);
  162.         if (i > -1)
  163.         {
  164.             NetObjectPool.Instance.destructables.RemoveAt(i);
  165.         }
  166.  
  167. #if IS_SERVER
  168.         //Self Delete
  169.         this.networkObject.Destroy();
  170. #endif
  171.     }
  172.  
  173.     void OnDestroy()
  174.     {
  175.         try
  176.         {
  177.             int i = -1; //Remove from NetObjectPool
  178.             if (networkObject != null)
  179.                 i = NetObjectPool.Instance.GetDestructableByNetworkID((uint)networkObject.NetworkId);
  180.             if (i > -1)
  181.             {
  182.                 NetObjectPool.Instance.destructables.RemoveAt(i);
  183.             }
  184.         }
  185.         catch(Exception ex)
  186.         {
  187.             string temp = ex.Message;
  188.         }
  189.     }
  190. }
RAW Paste Data