public static PlaceBoardPacket BuildFromBoard(CircuitBoard board, Transform parent) { var netObj = board.GetComponent <NetObject>(); if (netObj == null) { netObj = board.gameObject.AddComponent <NetObject>(); netObj.NetID = NetObject.GetNewID(); } var packet = new PlaceBoardPacket { AuthorID = NetworkClient.Instance.PlayerID, ParentBoardID = parent?.GetComponent <NetObject>()?.NetID ?? 0, Position = board.transform.position, EulerAngles = board.transform.eulerAngles }; var savedObj = SavedObjectUtilities.CreateSavedObjectFrom(board.gameObject); using (var mem = new MemoryStream()) { BinFormatter.Serialize(mem, savedObj); packet.SavedBoard = mem.ToArray(); } return(packet); }
public static void PlaceBoard() { if (StuffPlacer.OkayToPlace) { foreach (var item in BoardPlacer.BoardBeingPlaced.GetComponentsInChildren <ObjectInfo>()) { var netObj = item.GetComponent <NetObject>() ?? item.gameObject.AddComponent <NetObject>(); netObj.NetID = NetObject.GetNewID(); } foreach (var item in BoardPlacer.BoardBeingPlaced.GetComponentsInChildren <NetObject>()) { item.enabled = true; } var boardComp = BoardPlacer.BoardBeingPlaced.GetComponent <CircuitBoard>(); var parent = BoardPlacer.ReferenceObject.transform.parent; var packet = PlaceBoardPacket.BuildFromBoard(boardComp, parent); Network.SendPacket(packet); foreach (var item in boardComp.GetComponentsInChildren <CircuitOutput>()) { CircuitStatePacket.SetOutputState(item, item.On, true); } } }
public static PlaceWirePacket BuildFromLocalWire(Wire wire) { var wireBeingPlaced = wire.gameObject; var netObj = wireBeingPlaced.AddComponent <NetObject>(); netObj.NetID = NetObject.GetNewID(); var netObj1 = GetNetObjectFromPoint(wire.Point1); var netObj2 = GetNetObjectFromPoint(wire.Point2); if (netObj1 == null || netObj2 == null) { return(null); } int ioIndex1 = netObj1.IO.IndexOf(wire.Point1.parent.gameObject); int ioIndex2 = netObj2.IO.IndexOf(wire.Point2.parent.gameObject); if (ioIndex1 == -1 || ioIndex2 == -1) { return(null); } return(new PlaceWirePacket { NetObj1Id = netObj1.NetID, NetObj2Id = netObj2.NetID, Point1Id = ioIndex1, Point2Id = ioIndex2, NetID = netObj.NetID }); }
public static PlaceComponentPacket BuildFromLocalComponent(GameObject component) { var netObj = component.GetComponent<NetObject>(); if (netObj == null) { netObj = component.AddComponent<NetObject>(); netObj.NetID = NetObject.GetNewID(); if (component.GetComponent<ObjectInfo>()?.ComponentType == ComponentType.Mount) { var board = component.GetComponentInChildren<CircuitBoard>(); board.gameObject.AddComponent<NetObject>().NetID = NetObject.GetNewID(); } } var objInfo = component.GetComponent<ObjectInfo>(); int parentId = component.transform.parent?.GetComponent<NetObject>()?.NetID ?? 0; return new PlaceComponentPacket { NetID = netObj.NetID, SavedObject = SavedObjectUtilities.CreateSavedObjectFrom(objInfo), LocalPosition = component.transform.localPosition, EulerAngles = component.transform.localEulerAngles, ParentBoardID = parentId }; }
public static void AddNetObjects() { foreach (var item in GameObject.FindObjectsOfType <ObjectInfo>()) { if (item.GetComponent <NetObject>() == null) { item.gameObject.AddComponent <NetObject>().NetID = NetObject.GetNewID(); } } }
public static NetObject GetOrAddNetObject(this GameObject gameObject, bool setId = true) { var netObj = gameObject.GetComponent <NetObject>(); if (netObj == null) { netObj = gameObject.AddComponent <NetObject>(); if (setId) { netObj.NetID = NetObject.GetNewID(); } } return(netObj); }
public static void Place(StackBoardMenu __instance) { if (!ModUtilities.GetFieldValue <bool>(__instance, "CurrentPlacementIsValid")) { return; } var allBoards = ModUtilities.GetFieldValue <List <GameObject> >(__instance, "AllSubBoardsInvolvedWithStacking"); var parentBoard = ModUtilities.GetFieldValue <GameObject>(__instance, "BoardBeingStacked"); var firstBoard = allBoards.First(o => o != parentBoard); foreach (var item in firstBoard.GetComponentsInChildren <ObjectInfo>()) { var netObj = item.GetComponent <NetObject>() ?? item.gameObject.AddComponent <NetObject>(); netObj.NetID = NetObject.GetNewID(); } var packet = PlaceBoardPacket.BuildFromBoard(firstBoard.GetComponent <CircuitBoard>(), parentBoard.transform); Network.SendPacket(packet); }