Ejemplo n.º 1
0
        public override void TryAndErase(NetworkedGameObject netReg)
        {
            // komodo stuff
            base.TryAndErase(netReg);

            var entityID = entityManager.GetComponentData <NetworkEntityIdentificationComponentData>(netReg.Entity).entityID;

            if (entityManager.HasComponent <PrimitiveTag>(netReg.Entity))
            {
                // hide object in our view instead ofdestroying it, so we can undo the erasure.
                netReg.gameObject.SetActive(false);

                // tell other clients to do the same thing
                CreatePrimitiveManager.Instance.SendPrimitiveUpdate(entityID, -9);

                // save to actions stack
                if (UndoRedoManager.IsAlive)
                {
                    UndoRedoManager.Instance.savedStrokeActions.Push(() =>
                    {
                        netReg.gameObject.SetActive(true);

                        CreatePrimitiveManager.Instance.SendPrimitiveUpdate(entityID, 9);
                    });
                }
            }
        }
        public void ReceivePrimitiveUpdate(string stringData)
        {
            Primitive newData = JsonUtility.FromJson <Primitive>(stringData);

            //detect if we should render or notrender it
            if (newData.primitiveType == 9)
            {
                if (NetworkedObjectsManager.Instance.networkedObjectFromEntityId.ContainsKey(newData.primitiveId))
                {
                    NetworkedObjectsManager.Instance.networkedObjectFromEntityId[newData.primitiveId].gameObject.SetActive(true);
                }

                return;
            }
            else if (newData.primitiveType == -9)
            {
                if (NetworkedObjectsManager.Instance.networkedObjectFromEntityId.ContainsKey(newData.primitiveId))
                {
                    NetworkedObjectsManager.Instance.networkedObjectFromEntityId[newData.primitiveId].gameObject.SetActive(false);
                }

                return;
            }

            PrimitiveType primitiveToInstantiate = PrimitiveType.Sphere;

            switch (newData.primitiveType)
            {
            case 0:
                primitiveToInstantiate = PrimitiveType.Sphere;
                break;

            case 1:
                primitiveToInstantiate = PrimitiveType.Capsule;
                break;

            case 2:
                primitiveToInstantiate = PrimitiveType.Cylinder;
                break;

            case 3:
                primitiveToInstantiate = PrimitiveType.Cube;
                break;

            case 4:
                primitiveToInstantiate = PrimitiveType.Plane;
                break;

            case 5:
                primitiveToInstantiate = PrimitiveType.Quad;
                break;
            }

            var primitive = GameObject.CreatePrimitive(primitiveToInstantiate);

            NetworkedGameObject nAGO = NetworkedObjectsManager.Instance.CreateNetworkedGameObject(primitive);

            entityManager.AddComponentData(nAGO.Entity, new PrimitiveTag {
            });

            primitive.tag = "Interactable";

            var pos = newData.primitivePos;

            var rot = newData.primitiveRot;

            var scale = newData.scale;

            primitive.transform.position = pos;

            primitive.transform.SetGlobalScale(Vector3.one * scale);

            primitive.transform.rotation = new Quaternion(rot.x, rot.y, rot.z, rot.w);

            primitive.transform.SetParent(primitiveCreationParent.transform, true);
        }