Quellcode durchsuchen

[2.0.7.4] [StasisPod] RPC changes

Zariteis vor 1 Jahr
Ursprung
Commit
e0de7dfd7e
3 geänderte Dateien mit 33 neuen und 41 gelöschten Zeilen
  1. 8 8
      StasisPod/StasisPod.cs
  2. 1 1
      StasisPod/StasisPod.csproj
  3. 24 32
      StasisPod/StasisPodScript.cs

+ 8 - 8
StasisPod/StasisPod.cs

@@ -1,7 +1,6 @@
 using GadgetCore.API;
 using GadgetCore.API.ConfigMenu;
 using ScrapYard.API;
-using System;
 using System.Collections;
 using System.Reflection;
 using UnityEngine;
@@ -9,12 +8,15 @@ using UnityEngine.SceneManagement;
 
 namespace StasisPod
 {
-  [Gadget("StasisPod", LoadAfter: new string[] { "ScrapYard" }, Dependencies: new string[] { "ScrapYard" })]
+  [Gadget("StasisPod", LoadAfter: new string[] { "ScrapYard" }, Dependencies: new string[] { "ScrapYard" }, RequiredOnClients: true)]
   public class StasisPod : Gadget<StasisPod>
   {
-    public const string MOD_VERSION = "1.0"; // Set this to the version of your mod.
+    public const string MOD_VERSION = "1.1"; // Set this to the version of your mod.
     public const string CONFIG_VERSION = "1.0"; // Increment this whenever you change your mod's config file.
 
+    public const string RPCSetPodInUse = "SetPodInUse";
+    public const string RPCBeam = "Beam";
+
     public override IGadgetConfigMenu GetConfigMenu() { return null; }
     protected override void LoadConfig() { Config.Reset(); Config.Save(); }
 
@@ -39,7 +41,7 @@ namespace StasisPod
 
       tile.OnInteract += OnInteractPod;
 
-      GadgetCoreAPI.RegisterCustomRPC("SetPodInUse", delegate (object[] args)
+      GadgetCoreAPI.RegisterCustomRPC(RPCSetPodInUse, delegate (object[] args)
       {
         StasisPodScript.CallEventSetRPC(args);
       });
@@ -84,7 +86,6 @@ namespace StasisPod
     public static readonly FieldInfo interactingField = typeof(PlayerScript).GetField("interacting", BindingFlags.NonPublic | BindingFlags.Instance);
     public static readonly FieldInfo rField = typeof(PlayerScript).GetField("r", BindingFlags.NonPublic | BindingFlags.Instance);
     public static readonly FieldInfo tField = typeof(PlayerScript).GetField("t", BindingFlags.NonPublic | BindingFlags.Instance);
-    //public static readonly FieldInfo interactingField = typeof(PlayerScript).GetField("interacting", BindingFlags.NonPublic | BindingFlags.Instance);
 
     private IEnumerator OnInteractPod()
     {
@@ -96,13 +97,12 @@ namespace StasisPod
           var setUse = !PlayerScript.beamed;
           PlayerScript.beamed = setUse;
           InstanceTracker.PlayerScript.GetComponent<Collider>().enabled = !setUse;
-          podScript.StartCallSet(setUse);
+          podScript.UpdateInUse(setUse);
           ((Rigidbody)rField.GetValue(InstanceTracker.PlayerScript)).detectCollisions = !setUse;
           ((Rigidbody)rField.GetValue(InstanceTracker.PlayerScript)).useGravity = !setUse;
           ((Rigidbody)rField.GetValue(InstanceTracker.PlayerScript)).velocity = new Vector3(0f, 0f, 0f);
           ((Transform)tField.GetValue(InstanceTracker.PlayerScript)).position = new Vector3(PlayerScript.curInteractObj.transform.position.x, PlayerScript.curInteractObj.transform.position.y, 0f);
-          //InstanceTracker.PlayerScript.playerTrigger.portal = null;
-          InstanceTracker.PlayerScript.GetComponent<NetworkView>().RPC("Beam", RPCMode.All, new object[] { setUse ? 0 : 1 });
+          InstanceTracker.PlayerScript.GetComponent<NetworkView>().RPC(RPCBeam, RPCMode.All, new object[] { setUse ? 0 : 1 });
           InstanceTracker.PlayerScript.w.SetActive(true);
         }
         else

+ 1 - 1
StasisPod/StasisPod.csproj

@@ -47,7 +47,7 @@
       <Private>false</Private>
     </Reference>
     <Reference Include="ScrapYard">
-      <HintPath>..\ScrapYard\Release\ScrapYard.dll</HintPath>
+      <HintPath>..\..\Roguelands_ScrapYard\Release\ScrapYard.dll</HintPath>
       <Private>false</Private>
       <SpecificVersion>false</SpecificVersion>
     </Reference>

+ 24 - 32
StasisPod/StasisPodScript.cs

@@ -2,65 +2,57 @@
 using GadgetCore.API;
 using System;
 using System.Collections;
-using System.Reflection;
+using System.Collections.Generic;
 using UnityEngine;
 
 namespace StasisPod
 {
   public class StasisPodScript : MonoBehaviour
   {
-    public static event Action<object[]> SetRPC;
+    public static List<StasisPodScript> StasisPods = new List<StasisPodScript>();
+
+    public bool inUse = false;
+    public string id;
+
     private void Start()
     {
       id = "x" + (Math.Floor(transform.position.x) / 4).ToString() + "y" + (Math.Floor(transform.position.y) / 4).ToString();
-      SetRPC += this.Set;
+      StasisPods.Add(this);
     }
 
     private void OnDestroy()
     {
-      SetRPC -= this.Set;
+      StasisPods.Remove(this);
     }
 
-    private void Set(object[] o)
-    {
-      if (o[0].ToString() == id)
-      {
-        this.inUse = (bool)o[1];
-        UpdateTile();
-      }
-    }
-
-    internal void StartCallSet(bool inUse)
-    {
-      StartCoroutine(CallSet(inUse));
-    }
+    internal void UpdateInUse(bool inUse) => StartCoroutine(UpdateInUseInternal(inUse));
 
-    private IEnumerator CallSet(bool inUse)
+    private IEnumerator UpdateInUseInternal(bool inUse)
     {
       yield return new WaitForSeconds(0.01f);
-      GadgetCoreAPI.CallCustomRPC("SetPodInUse", RPCMode.AllBuffered, new object[] { this.id, inUse });
+      GadgetCoreAPI.CallCustomRPC(StasisPod.RPCSetPodInUse, RPCMode.AllBuffered, new object[] { this.id, inUse });
       yield break;
     }
 
-    private void UpdateTile()
+    internal static void CallEventSetRPC(object[] args)
     {
-      gameObject.transform.GetChild(1).gameObject.SetActive(inUse);
+      foreach (var pod in StasisPods)
+      {
+        pod.UpdateInUseFromRPC(args);
+      }
     }
 
-    internal bool CanUse()
+    private void UpdateInUseFromRPC(object[] o)
     {
-      return !inUse;
+      if (o[0].ToString() == id)
+      {
+        inUse = (bool)o[1];
+        UpdateTile();
+      }
     }
 
-    public bool inUse = false;
-    public string id;
+    private void UpdateTile() => gameObject.transform.GetChild(1).gameObject.SetActive(inUse);
 
-    internal static void CallEventSetRPC(object[] args)
-    {
-      var setFrameItemRPC = StasisPodScript.SetRPC;
-      if (setFrameItemRPC == null)
-        return;
-      setFrameItemRPC(args);
-    }
+    internal bool CanUse() => !inUse;
   }
 }