Ejemplo n.º 1
0
        /// <summary>
        /// Remove a child primitive that belongs to this object.
        /// </summary>
        /// <param name="data">Sync Primitive Data</param>
        protected void RemoveChild(SyncPrimitive data)
        {
            // Manually remove from maps
            if (primitives.Remove(data) && data.HasNetworkElement)
            {
                primitiveMap.Remove(data.NetworkElement.GetGUID());

                // Object has been removed internally, notify network
                ObjectElement parentElement = ObjectElement.Cast(data.NetworkElement.GetParent());
                if (parentElement != null)
                {
                    parentElement.RemoveElement(data.NetworkElement);
                }
            }
        }
Ejemplo n.º 2
0
        protected override void OnElementAdded(Element element)
        {
            if (element.GetElementType() == ElementType.ObjectType)
            {
                // Add the new object and listen for when the initialization has fully completed since it can take time.
                T newObject = AddObject(ObjectElement.Cast(element));
                newObject.InitializationComplete += OnInitializationComplete;
            }
            else
            {
                Debug.LogError("Error: Adding unknown element to SyncArray<T>");
            }

            base.OnElementAdded(element);
        }
Ejemplo n.º 3
0
 public override void AddFromRemote(Element remoteElement)
 {
     Element        = ObjectElement.Cast(remoteElement);
     NetworkElement = remoteElement;
 }
Ejemplo n.º 4
0
 public override void AddFromRemote(Element element)
 {
     this.Element        = ObjectElement.Cast(element);
     this.NetworkElement = element;
 }
        private void OnSyncObjectInitialized(SyncObject syncObj)
        {
            Debug.Log("[SyncSystem] Initialized " + gameObject.name);
            syncObj.InitializationComplete -= OnSyncObjectInitialized;

            Element remoteModelElement = syncObj.Element.GetElement(SyncModel.FieldName);

            if (remoteModelElement != null)
            {
                SyncModel.AddFromRemote(remoteModelElement);

                Element remoteSyncEnabledElement  = SyncModel.Element.GetElement("SyncEnabled");
                Element remoteSyncPositionElement = SyncModel.Element.GetElement("SyncPosition");
                Element remoteSyncScaleElement    = SyncModel.Element.GetElement("SyncScale");
                Element remoteSyncRotationElement = SyncModel.Element.GetElement("SyncRotation");

                SyncPrimitive[] modelPrimitives = SyncModel.GetChildren();
                modelPrimitives[0].AddFromRemote(remoteSyncEnabledElement);
                modelPrimitives[1].AddFromRemote(remoteSyncPositionElement);
                modelPrimitives[2].AddFromRemote(remoteSyncScaleElement);
                modelPrimitives[3].AddFromRemote(remoteSyncRotationElement);

                SyncModel.AddRemotePrimitive(remoteSyncEnabledElement.GetGUID(), modelPrimitives[0]);
                SyncModel.AddRemotePrimitive(remoteSyncPositionElement.GetGUID(), modelPrimitives[1]);
                SyncModel.AddRemotePrimitive(remoteSyncScaleElement.GetGUID(), modelPrimitives[2]);
                SyncModel.AddRemotePrimitive(remoteSyncRotationElement.GetGUID(), modelPrimitives[3]);

                ObjectElement remotePositionElement = ObjectElement.Cast(modelPrimitives[1].NetworkElement);
                Element       remotePositionX       = remotePositionElement.GetElement("x");
                Element       remotePositionY       = remotePositionElement.GetElement("y");
                Element       remotePositionZ       = remotePositionElement.GetElement("z");

                SyncPrimitive[] positionPrimitives = ((SyncObject)modelPrimitives[1]).GetChildren();
                positionPrimitives[0].AddFromRemote(remotePositionX);
                positionPrimitives[1].AddFromRemote(remotePositionY);
                positionPrimitives[2].AddFromRemote(remotePositionZ);

                SyncModel.SyncPosition.AddRemotePrimitive(remotePositionX.GetGUID(), positionPrimitives[0]);
                SyncModel.SyncPosition.AddRemotePrimitive(remotePositionY.GetGUID(), positionPrimitives[1]);
                SyncModel.SyncPosition.AddRemotePrimitive(remotePositionZ.GetGUID(), positionPrimitives[2]);

                ObjectElement remoteScaleElement = ObjectElement.Cast(modelPrimitives[2].NetworkElement);
                Element       remoteScaleX       = remoteScaleElement.GetElement("x");
                Element       remoteScaleY       = remoteScaleElement.GetElement("y");
                Element       remoteScaleZ       = remoteScaleElement.GetElement("z");

                SyncPrimitive[] scalePrimitives = ((SyncObject)modelPrimitives[2]).GetChildren();
                scalePrimitives[0].AddFromRemote(remoteScaleX);
                scalePrimitives[1].AddFromRemote(remoteScaleY);
                scalePrimitives[2].AddFromRemote(remoteScaleZ);

                SyncModel.SyncScale.AddRemotePrimitive(remoteScaleX.GetGUID(), scalePrimitives[0]);
                SyncModel.SyncScale.AddRemotePrimitive(remoteScaleY.GetGUID(), scalePrimitives[1]);
                SyncModel.SyncScale.AddRemotePrimitive(remoteScaleZ.GetGUID(), scalePrimitives[2]);

                ObjectElement remoteRotationElement = ObjectElement.Cast(modelPrimitives[3].NetworkElement);
                Element       remoteRotationX       = remoteRotationElement.GetElement("x");
                Element       remoteRotationY       = remoteRotationElement.GetElement("y");
                Element       remoteRotationZ       = remoteRotationElement.GetElement("z");
                Element       remoteRotationW       = remoteRotationElement.GetElement("w");

                SyncPrimitive[] rotationPrimitives = ((SyncObject)modelPrimitives[3]).GetChildren();
                rotationPrimitives[0].AddFromRemote(remoteRotationX);
                rotationPrimitives[1].AddFromRemote(remoteRotationY);
                rotationPrimitives[2].AddFromRemote(remoteRotationZ);
                rotationPrimitives[3].AddFromRemote(remoteRotationW);

                SyncModel.SyncRotation.AddRemotePrimitive(remoteRotationX.GetGUID(), rotationPrimitives[0]);
                SyncModel.SyncRotation.AddRemotePrimitive(remoteRotationY.GetGUID(), rotationPrimitives[1]);
                SyncModel.SyncRotation.AddRemotePrimitive(remoteRotationZ.GetGUID(), rotationPrimitives[2]);
                SyncModel.SyncRotation.AddRemotePrimitive(remoteRotationW.GetGUID(), rotationPrimitives[3]);
            }
            else
            {
                SyncModel.InitializeLocal(syncObj.Element);
            }

            if (AppConfig.IsServerInstance)
            {
                _enabled.Value  = gameObject.activeInHierarchy;
                _position.Value = gameObject.transform.localPosition;
                _scale.Value    = gameObject.transform.localScale;
                _rotation.Value = gameObject.transform.localRotation;
            }
        }