Beispiel #1
0
        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[] { });
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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[] { });
        }