/// <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); } } }
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); }
public override void AddFromRemote(Element remoteElement) { Element = ObjectElement.Cast(remoteElement); NetworkElement = remoteElement; }
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; } }