public override void Serialize() { BufferedNetworkUtilsServer.SendInt(_sendList.Count); foreach (SerializeData data in _sendList) { BufferedNetworkUtilsServer.SendString(data.name); BufferedNetworkUtilsServer.SendByte((byte)data.type); switch (data.type) { case FduClusterInputType.Axis: BufferedNetworkUtilsServer.SendFloat(_axisMap[data.name]._setValue); break; case FduClusterInputType.Button: BufferedNetworkUtilsServer.SendBool(_buttonMap[data.name]._setValue); break; case FduClusterInputType.Tracker: BufferedNetworkUtilsServer.SendVector3(_trackerMap[data.name]._setPosValue); BufferedNetworkUtilsServer.SendQuaternion(_trackerMap[data.name]._setRotValue); break; } } //BufferedNetworkUtilsServer.SendString("ClusterInputMgrEndFlag"); _sendList.Clear(); }
void switchCaseFunc(FduMultiAttributeObserverOP op, ref NetworkState.NETWORK_STATE_TYPE state) { for (int i = 1; i < attributeList.Length; ++i) { if (!getObservedState(i)) { continue; } switch (i) { case 1: //position if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.position); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.position = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { appendNewPos(BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 2: //rotation if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendQuaternion(_transform.rotation); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.rotation = BufferedNetworkUtilsClient.ReadQuaternion(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { appendNewRotation(BufferedNetworkUtilsClient.ReadQuaternion(ref state)); } break; case 3: //scale if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.localScale); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localScale = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { appendNewScale(BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; } } }
public override void OnSendData() { BufferedNetworkUtilsServer.SendVector3(RVO.Simulator.Instance.agents_[index].position_v3); BufferedNetworkUtilsServer.SendQuaternion(RVO.Simulator.Instance.agents_[index].rotation); if ((FrameCounter.frameCount) % FrameCounter.interval == 0) { BufferedNetworkUtilsServer.SendVector4(gsc._tempFramePixelSegmentation); } }
public override void OnSendData() { BufferedNetworkUtilsServer.SendSerializableClass(CustomClassDataInstance); BufferedNetworkUtilsServer.SendInt(IntInstance); BufferedNetworkUtilsServer.SendVector3(Vector3Instance); BufferedNetworkUtilsServer.SendString(StringInstance); BufferedNetworkUtilsServer.SendStruct(CustomDataInstance); BufferedNetworkUtilsServer.SendList <InsideCustomData>(ListData); BufferedNetworkUtilsServer.SendDic <string, Vector3>(DicData); }
//发送待创建列表和待销毁列表中的数据 public override void Serialize() { levelPrefix = levelPrefix == "" ? UnityEngine.SceneManagement.SceneManager.GetActiveScene().name : levelPrefix; BufferedNetworkUtilsServer.SendString(levelPrefix); BufferedNetworkUtilsServer.SendInt(_waitForCreateList.Count); //Debug.Log("Create Count:" + _waitForCreateList.Count); foreach (ClusterGameObjectCreatePara para in _waitForCreateList) { BufferedNetworkUtilsServer.SendInt(para.viewId); BufferedNetworkUtilsServer.SendInt(para.assetId); BufferedNetworkUtilsServer.SendVector3(para.position); BufferedNetworkUtilsServer.SendQuaternion(para.rotation); if (para.parentPath == null) { BufferedNetworkUtilsServer.SendString(""); } else { BufferedNetworkUtilsServer.SendString(para.parentPath); } para.viewFrameCount = para.viewInstance.getAllFrameCountForEveryNFrameDTS(); BufferedNetworkUtilsServer.SendInt(para.viewFrameCount.Count); foreach (KeyValuePair <int, int> kvp in para.viewFrameCount) { BufferedNetworkUtilsServer.SendInt(kvp.Key); //observer在view中的id BufferedNetworkUtilsServer.SendInt(kvp.Value); //observer中EveryNFrameDTS所需要同步的参数frameCount } var subViews = para.viewInstance.getSubViews(); BufferedNetworkUtilsServer.SendInt(subViews.Count); foreach (FduClusterView view in subViews) { if (view == null) { Debug.LogError("Find Invalid sub view in one Cluster view.View id :" + view.ViewId + ". Please press Refresh Button of this view in Inspector window"); break; } BufferedNetworkUtilsServer.SendInt(view.ViewId); var list = view.getAllFrameCountForEveryNFrameDTS(); BufferedNetworkUtilsServer.SendInt(list.Count); foreach (KeyValuePair <int, int> kvp in list) { BufferedNetworkUtilsServer.SendInt(kvp.Key); //observer在subview中的id BufferedNetworkUtilsServer.SendInt(kvp.Value); //observer中EveryNFrameDTS所需要同步的参数frameCount } } } BufferedNetworkUtilsServer.SendInt(_wairForDestoryList.Count); foreach (int viewId in _wairForDestoryList) { BufferedNetworkUtilsServer.SendInt(viewId); } BufferedNetworkUtilsServer.SendInt(_waitForAssignViewIdList.Count); foreach (SyncViewIdData data in _waitForAssignViewIdList) { BufferedNetworkUtilsServer.SendString(data.name); BufferedNetworkUtilsServer.SendInt(data.id); } BufferedNetworkUtilsServer.SendString("FduClusterViewManagerEndFlag"); ClearListData(); }
void switchCaseFunc(FduMultiAttributeObserverOP op, ref NetworkState.NETWORK_STATE_TYPE state) { for (int i = 1; i < attributeList.Length; ++i) { if (!getObservedState(i)) //如果editor中没有选择监控该属性 则直接跳过 { continue; } switch (i) { case 1: //position if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.position = FduInterpolationInterface.getNextVector3Value_new(_transform.position, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.position); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.position = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 2: //rotation if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.rotation = FduInterpolationInterface.getNextQuaternionValue_new(_transform.rotation, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendQuaternion(_transform.rotation); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.rotation = BufferedNetworkUtilsClient.ReadQuaternion(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadQuaternion(ref state)); } break; case 3: //scale if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.localScale = FduInterpolationInterface.getNextVector3Value_new(_transform.localScale, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.localScale); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localScale = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 4: //parent: 对于父节点的监控 这里只是一个不完全的解决方案 获取到父节点的路径 传输过去 然后在从节点解析。如果路径不唯一(因为可以同名)就会找不到对于的父节点 if (op == FduMultiAttributeObserverOP.SendData) { string parentPath; if (_transform.parent == null) { parentPath = ""; } else { parentPath = FduSupportClass.getGameObjectPath(_transform.parent.gameObject); } if (parentPath == null) { parentPath = ""; } BufferedNetworkUtilsServer.SendString(parentPath); } else if (op == FduMultiAttributeObserverOP.Receive_Direct || op == FduMultiAttributeObserverOP.Receive_Interpolation) { string parentPath; if (_transform.parent == null) { parentPath = ""; } else { parentPath = FduSupportClass.getGameObjectPath(_transform.parent.gameObject); } if (parentPath == null) { parentPath = ""; } string getPath = BufferedNetworkUtilsClient.ReadString(ref state); if (parentPath != getPath) //hierarchy changed { GameObject go = FduSupportClass.getGameObjectByPath(getPath); if (go == null) { _transform.SetParent(null); } else { _transform.SetParent(go.transform); } } } break; case 5: //LocalPosition if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.localPosition = FduInterpolationInterface.getNextVector3Value_new(_transform.localPosition, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.localPosition); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localPosition = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 6: //LocalRotation; if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.localRotation = FduInterpolationInterface.getNextQuaternionValue_new(_transform.localRotation, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendQuaternion(_transform.localRotation); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localRotation = BufferedNetworkUtilsClient.ReadQuaternion(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadQuaternion(ref state)); } break; case 7: //LocalScale if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.localScale = FduInterpolationInterface.getNextVector3Value_new(_transform.localScale, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.localScale); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localScale = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 8: //EulerAngle if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.eulerAngles = FduInterpolationInterface.getNextVector3Value_new(_transform.eulerAngles, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.eulerAngles); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.eulerAngles = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 9: //LocalEulerAngle if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { _transform.localEulerAngles = FduInterpolationInterface.getNextVector3Value_new(_transform.localEulerAngles, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(_transform.localEulerAngles); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { _transform.localEulerAngles = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; default: break; } } }
void switchCaseFunc(FduMultiAttributeObserverOP op, ref NetworkState.NETWORK_STATE_TYPE state) { for (int i = 1; i < attrList.Length; ++i) { if (!getObservedState(i)) { continue; } switch (i) { case 1: //AnchoredPosition if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.anchoredPosition = FduInterpolationInterface.getNextVector2Value_new(rectTransform.anchoredPosition, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.anchoredPosition); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.anchoredPosition = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 2: //AnchoredPosition3D if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.anchoredPosition3D = FduInterpolationInterface.getNextVector3Value_new(rectTransform.anchoredPosition3D, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(rectTransform.anchoredPosition3D); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.anchoredPosition3D = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 3: //Rotation if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.rotation = FduInterpolationInterface.getNextQuaternionValue_new(rectTransform.rotation, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendQuaternion(rectTransform.rotation); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.rotation = BufferedNetworkUtilsClient.ReadQuaternion(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadQuaternion(ref state)); } break; case 4: //Scale if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.localScale = FduInterpolationInterface.getNextVector3Value_new(rectTransform.localScale, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector3(rectTransform.localScale); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.localScale = BufferedNetworkUtilsClient.ReadVector3(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty_append(i, BufferedNetworkUtilsClient.ReadVector3(ref state)); } break; case 5: //Parent if (op == FduMultiAttributeObserverOP.SendData) { string parentPath; if (rectTransform.parent == null) { parentPath = ""; } else { parentPath = FduSupportClass.getGameObjectPath(rectTransform.parent.gameObject); } if (parentPath == null) { parentPath = ""; } BufferedNetworkUtilsServer.SendString(parentPath); } else if (op == FduMultiAttributeObserverOP.Receive_Direct || op == FduMultiAttributeObserverOP.Receive_Interpolation) { string parentPath; if (rectTransform.parent == null) { parentPath = ""; } else { parentPath = FduSupportClass.getGameObjectPath(rectTransform.parent.gameObject); } if (parentPath == null) { parentPath = ""; } string getPath = BufferedNetworkUtilsClient.ReadString(ref state); if (parentPath != getPath) //hierarchy changed { GameObject go = FduSupportClass.getGameObjectByPath(getPath); if (go == null) { rectTransform.SetParent(null); } else { rectTransform.SetParent(go.transform); } } } break; case 6: //AnchorMax if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.anchorMax = FduInterpolationInterface.getNextVector2Value_new(rectTransform.anchorMax, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.anchorMax); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.anchorMax = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 7: //AnchorMin if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.anchorMin = FduInterpolationInterface.getNextVector2Value_new(rectTransform.anchorMin, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.anchorMin); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.anchorMin = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 8: //OffsetMax if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.offsetMax = FduInterpolationInterface.getNextVector2Value_new(rectTransform.offsetMax, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.offsetMax); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.offsetMax = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 9: //OffsetMin if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.offsetMin = FduInterpolationInterface.getNextVector2Value_new(rectTransform.offsetMin, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.offsetMin); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.offsetMin = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 10: //Pivot if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.pivot = FduInterpolationInterface.getNextVector2Value_new(rectTransform.pivot, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.pivot); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.pivot = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; case 11: //SizeDelta if (op == FduMultiAttributeObserverOP.Update) { if (getCachedProperytyCount(i) > 0) { rectTransform.sizeDelta = FduInterpolationInterface.getNextVector2Value_new(rectTransform.sizeDelta, i, this); } } else if (op == FduMultiAttributeObserverOP.SendData) { BufferedNetworkUtilsServer.SendVector2(rectTransform.sizeDelta); } else if (op == FduMultiAttributeObserverOP.Receive_Direct) { rectTransform.sizeDelta = BufferedNetworkUtilsClient.ReadVector2(ref state); } else if (op == FduMultiAttributeObserverOP.Receive_Interpolation) { setCachedProperty(i, BufferedNetworkUtilsClient.ReadVector2(ref state)); } break; } } }
//序列化一个可传送的参数 public static void serializeOneParameter(object para) { FduSendableParameter typeCode = FduGlobalConfig.getSendableParameterCode(para); BufferedNetworkUtilsServer.SendByte((byte)typeCode); switch (typeCode) { case FduSendableParameter.Int: BufferedNetworkUtilsServer.SendInt((int)para); break; case FduSendableParameter.IntArray: BufferedNetworkUtilsServer.SendIntArray((int[])para); break; case FduSendableParameter.Byte: BufferedNetworkUtilsServer.SendByte((byte)para); break; case FduSendableParameter.ByteArray: BufferedNetworkUtilsServer.SendByteArray((byte[])para); break; case FduSendableParameter.Float: BufferedNetworkUtilsServer.SendFloat((float)para); break; case FduSendableParameter.FloatArray: BufferedNetworkUtilsServer.SendFloatArray((float[])para); break; case FduSendableParameter.Bool: BufferedNetworkUtilsServer.SendBool((bool)para); break; case FduSendableParameter.BoolArray: bool[] bolarr = (bool[])para; int bollen = bolarr.Length; BufferedNetworkUtilsServer.SendInt(bollen); for (int i = 0; i < bollen; ++i) { BufferedNetworkUtilsServer.SendBool(bolarr[i]); } break; case FduSendableParameter.String: BufferedNetworkUtilsServer.SendString((string)para); break; case FduSendableParameter.StringArray: string[] strarr = (string[])para; int strlen = strarr.Length; BufferedNetworkUtilsServer.SendInt(strlen); for (int i = 0; i < strlen; ++i) { BufferedNetworkUtilsServer.SendString(strarr[i]); } break; case FduSendableParameter.Vector2: BufferedNetworkUtilsServer.SendVector2((Vector2)para); break; case FduSendableParameter.Vector2Array: Vector2[] v2arr = (Vector2[])para; int v2len = v2arr.Length; BufferedNetworkUtilsServer.SendInt(v2len); for (int i = 0; i < v2len; ++i) { BufferedNetworkUtilsServer.SendVector2(v2arr[i]); } break; case FduSendableParameter.Vector3: BufferedNetworkUtilsServer.SendVector3((Vector3)para); break; case FduSendableParameter.Vector3Array: Vector3[] v3arr = (Vector3[])para; int v3len = v3arr.Length; BufferedNetworkUtilsServer.SendInt(v3len); for (int i = 0; i < v3len; ++i) { BufferedNetworkUtilsServer.SendVector3(v3arr[i]); } break; case FduSendableParameter.Vector4: BufferedNetworkUtilsServer.SendVector4((Vector4)para); break; case FduSendableParameter.Vector4Array: Vector4[] v4arr = (Vector4[])para; int v4len = v4arr.Length; BufferedNetworkUtilsServer.SendInt(v4len); for (int i = 0; i < v4len; ++i) { BufferedNetworkUtilsServer.SendVector3(v4arr[i]); } break; case FduSendableParameter.Color: BufferedNetworkUtilsServer.SendColor((Color)para); break; case FduSendableParameter.ColorArray: Color[] carray = (Color[])para; int clen = carray.Length; BufferedNetworkUtilsServer.SendInt(clen); for (int i = 0; i < clen; ++i) { BufferedNetworkUtilsServer.SendColor(carray[i]); } break; case FduSendableParameter.Quaternion: BufferedNetworkUtilsServer.SendQuaternion((Quaternion)para); break; case FduSendableParameter.QuaternionArray: Quaternion[] qarr = (Quaternion[])para; int qlen = qarr.Length; BufferedNetworkUtilsServer.SendInt(qlen); for (int i = 0; i < qlen; i++) { BufferedNetworkUtilsServer.SendQuaternion(qarr[i]); } break; case FduSendableParameter.GameObject: if (((GameObject)para).GetClusterView() != null) { BufferedNetworkUtilsServer.SendBool(true); BufferedNetworkUtilsServer.SendInt(((GameObject)para).GetClusterView().ViewId); } else { BufferedNetworkUtilsServer.SendBool(false); BufferedNetworkUtilsServer.SendString(FduSupportClass.getGameObjectPath((GameObject)para)); } break; case FduSendableParameter.ClusterView: BufferedNetworkUtilsServer.SendInt(((FduClusterView)para).ViewId); break; case FduSendableParameter.Matrix4X4: BufferedNetworkUtilsServer.SendMatrix4x4((Matrix4x4)para); break; case FduSendableParameter.Matrix4X4Array: Matrix4x4[] matarr = (Matrix4x4[])para; int mlen = matarr.Length; BufferedNetworkUtilsServer.SendInt(mlen); for (int i = 0; i < mlen; ++i) { BufferedNetworkUtilsServer.SendMatrix4x4(matarr[i]); } break; case FduSendableParameter.Rect: BufferedNetworkUtilsServer.SendRect((Rect)para); break; case FduSendableParameter.RectArray: Rect[] rectArr = (Rect[])para; int rectlen = rectArr.Length; BufferedNetworkUtilsServer.SendInt(rectlen); for (int i = 0; i < rectlen; ++i) { BufferedNetworkUtilsServer.SendRect(rectArr[i]); } break; case FduSendableParameter.Struct: BufferedNetworkUtilsServer.SendString(para.GetType().AssemblyQualifiedName); BufferedNetworkUtilsServer.SendStruct(para); break; case FduSendableParameter.SerializableClass: BufferedNetworkUtilsServer.SendSerializableClass(para); break; case FduSendableParameter.Enum: BufferedNetworkUtilsServer.SendInt(System.Convert.ToInt32(para)); break; default: throw new InvalidSendableDataException("Such type of data can not be sent. Type name:" + para.GetType().FullName); } }