private void PlaceBasePiece(BasePiecePlacedEvent basePiecePlacedBuildEvent) { Log.Debug($"BuildBasePiece - {basePiecePlacedBuildEvent.BasePiece.Id} type: {basePiecePlacedBuildEvent.BasePiece.TechType} parentId: {basePiecePlacedBuildEvent.BasePiece.ParentId.OrElse(null)}"); BasePiece basePiece = basePiecePlacedBuildEvent.BasePiece; GameObject buildPrefab = CraftData.GetBuildPrefab(basePiece.TechType.ToUnity()); MultiplayerBuilder.overridePosition = basePiece.ItemPosition.ToUnity(); MultiplayerBuilder.overrideQuaternion = basePiece.Rotation.ToUnity(); MultiplayerBuilder.overrideTransform = new GameObject().transform; MultiplayerBuilder.overrideTransform.position = basePiece.CameraPosition.ToUnity(); MultiplayerBuilder.overrideTransform.rotation = basePiece.CameraRotation.ToUnity(); MultiplayerBuilder.placePosition = basePiece.ItemPosition.ToUnity(); MultiplayerBuilder.placeRotation = basePiece.Rotation.ToUnity(); MultiplayerBuilder.rotationMetadata = basePiece.RotationMetadata; MultiplayerBuilder.Begin(buildPrefab); GameObject parentBase = null; if (basePiece.ParentId.HasValue) { parentBase = NitroxEntity.GetObjectFrom(basePiece.ParentId.Value).OrElse(null); } Constructable constructable; GameObject gameObject; if (basePiece.IsFurniture) { SubRoot subRoot = (parentBase != null) ? parentBase.GetComponent <SubRoot>() : null; gameObject = MultiplayerBuilder.TryPlaceFurniture(subRoot); constructable = gameObject.RequireComponentInParent <Constructable>(); } else { constructable = MultiplayerBuilder.TryPlaceBase(parentBase); gameObject = constructable.gameObject; } if (parentBase != null && basePiece.IsFurniture) { gameObject.transform.parent = parentBase.gameObject.transform; } NitroxEntity.SetNewId(gameObject, basePiece.Id); /** * Manually call start to initialize the object as we may need to interact with it within the same frame. */ MethodInfo startCrafting = typeof(Constructable).GetMethod("Start", BindingFlags.NonPublic | BindingFlags.Instance); Validate.NotNull(startCrafting); startCrafting.Invoke(constructable, new object[] { }); }
private void PlaceBasePiece(BasePiecePlacedEvent basePiecePlacedBuildEvent) { BasePiece basePiece = basePiecePlacedBuildEvent.BasePiece; GameObject buildPrefab = CraftData.GetBuildPrefab(basePiece.TechType.ToUnity()); MultiplayerBuilder.OverridePosition = basePiece.ItemPosition.ToUnity(); MultiplayerBuilder.OverrideQuaternion = basePiece.Rotation.ToUnity(); MultiplayerBuilder.OverrideTransform = new GameObject().transform; MultiplayerBuilder.OverrideTransform.position = basePiece.CameraPosition.ToUnity(); MultiplayerBuilder.OverrideTransform.rotation = basePiece.CameraRotation.ToUnity(); MultiplayerBuilder.PlacePosition = basePiece.ItemPosition.ToUnity(); MultiplayerBuilder.PlaceRotation = basePiece.Rotation.ToUnity(); MultiplayerBuilder.RotationMetadata = basePiece.RotationMetadata; GameObject parentBase = null; if (basePiece.ParentId.HasValue) { parentBase = NitroxEntity.GetObjectFrom(basePiece.ParentId.Value).OrNull(); } MultiplayerBuilder.ParentBase = parentBase; MultiplayerBuilder.PlaceBasePiece(buildPrefab); MultiplayerBuilder.ParentBase = null; Constructable constructable; GameObject gameObj; if (basePiece.IsFurniture) { SubRoot subRoot = parentBase ? parentBase.GetComponent <SubRoot>() : null; gameObj = MultiplayerBuilder.TryPlaceFurniture(subRoot); constructable = gameObj.RequireComponentInParent <Constructable>(); } else { constructable = MultiplayerBuilder.TryPlaceBase(parentBase); gameObj = constructable.gameObject; } if (parentBase && basePiece.IsFurniture) { gameObj.transform.parent = parentBase.gameObject.transform; } NitroxEntity.SetNewId(gameObj, basePiece.Id); // Manually call start to initialize the object as we may need to interact with it within the same frame. constructable.Start(); }
private void BuildBasePiece(BasePiecePlacedEvent basePiecePlacedBuildEvent) { BasePiece basePiece = basePiecePlacedBuildEvent.BasePiece; GameObject buildPrefab = CraftData.GetBuildPrefab(basePiece.TechType); MultiplayerBuilder.overridePosition = basePiece.ItemPosition; MultiplayerBuilder.overrideQuaternion = basePiece.Rotation; MultiplayerBuilder.overrideTransform = new GameObject().transform; MultiplayerBuilder.overrideTransform.position = basePiece.CameraPosition; MultiplayerBuilder.overrideTransform.rotation = basePiece.CameraRotation; MultiplayerBuilder.placePosition = basePiece.ItemPosition; MultiplayerBuilder.placeRotation = basePiece.Rotation; MultiplayerBuilder.rotationMetadata = basePiece.RotationMetadata; MultiplayerBuilder.Begin(buildPrefab); GameObject parentBase = null; if (basePiece.ParentGuid.IsPresent()) { parentBase = GuidHelper.RequireObjectFrom(basePiece.ParentGuid.Get()); } Constructable constructable; GameObject gameObject; if (basePiece.IsFurniture) { SubRoot subRoot = (parentBase != null) ? parentBase.RequireComponent <SubRoot>() : null; gameObject = MultiplayerBuilder.TryPlaceFurniture(subRoot); constructable = gameObject.RequireComponentInParent <Constructable>(); } else { constructable = MultiplayerBuilder.TryPlaceBase(parentBase); gameObject = constructable.gameObject; } GuidHelper.SetNewGuid(gameObject, basePiece.Guid); /** * Manually call start to initialize the object as we may need to interact with it within the same frame. */ MethodInfo startCrafting = typeof(Constructable).GetMethod("Start", BindingFlags.NonPublic | BindingFlags.Instance); Validate.NotNull(startCrafting); startCrafting.Invoke(constructable, new object[] { }); }