internal void RegisterOnlineBehavior(OnlineBehavior onlineBehavior) { var sameObject = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject); if (sameObject.Count > 0) { Debug.LogError("double object"); } m_onlineBehaviors.Add(onlineBehavior); }
private void SendOnlineBehaviorFieldsUpdate(OnlineBehavior _obj) { using (MemoryStream m = new MemoryStream()) { using (BinaryWriter w = new BinaryWriter(m)) { w.Write(_obj.GetComponent <OnlineIdentity>().m_uid); _obj.Write(w); OnlineManager.Instance.SendMessage((byte)OnlineProtocol.Handler.ONLINE_OBJECT_FIELDS, m.GetBuffer()); } } }
public override void OnInspectorGUI() { openreflection = EditorGUILayout.BeginFoldoutHeaderGroup(openreflection, "Sync Reflection"); if (openreflection) { OnlineBehavior obj = (OnlineBehavior)target; var syncedFieldsByScript = target.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static) .Where(prop => Attribute.IsDefined(prop, typeof(Sync))).ToArray(); GUILayout.BeginHorizontal("fieldPopup"); string[] fieldNames = target.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.Static).Select(f => f.Name).ToArray(); selectedField = EditorGUILayout.Popup("Fields", selectedField, fieldNames); if (GUILayout.Button("+", GUILayout.Width(20))) { obj.m_serializedFields.Add(fieldNames[selectedField]); EditorUtility.SetDirty(obj); } GUILayout.EndHorizontal(); foreach (var f in syncedFieldsByScript) { GUILayout.BeginHorizontal("scriptfield"); EditorGUILayout.LabelField(f.Name); EditorGUILayout.LabelField("(script)", GUILayout.Width(40)); GUILayout.EndHorizontal(); } foreach (var fname in obj.m_serializedFields) { GUILayout.BeginHorizontal("field"); EditorGUILayout.LabelField(fname); bool b = GUILayout.Button("-", GUILayout.Width(20)); GUILayout.EndHorizontal(); if (b) { obj.m_serializedFields.Remove(fname); EditorUtility.SetDirty(obj); break; } } } EditorGUILayout.EndFoldoutHeaderGroup(); base.OnInspectorGUI(); }
private void SendOnlineBehaviorMethodsUpdate(OnlineBehavior _obj) { using (MemoryStream m = new MemoryStream()) { using (BinaryWriter w = new BinaryWriter(m)) { w.Write(_obj.Uid); w.Write(_obj.Index); _obj.WriteCMDs(w); _obj.WriteRPCs(w); OnlineManager.Instance.SendMessage((byte)OnlineProtocol.Handler.ONLINE_OBJECT_METHODS, m.GetBuffer()); } } }
internal void RegisterOnlineBehavior(OnlineBehavior onlineBehavior) { var sameObject = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject); if (sameObject != null) { onlineBehavior.m_index = sameObject.Count; } else { onlineBehavior.m_index = 0; } m_onlineBehaviors.Add(onlineBehavior); }
internal int RegisterOnlineBehavior(OnlineBehavior onlineBehavior) { var duplicate = m_onlineBehaviors.FindAll(ob => ob.Uid == onlineBehavior.Uid && ob.gameObject != onlineBehavior.gameObject); if (duplicate.Count > 0) { OnlineManager.LogError("Online object already registered with the same Unique Id " + onlineBehavior.Uid + " first :" + duplicate[0] + " , second : " + onlineBehavior.name); return(-1); } var behaviors = m_onlineBehaviors.FindAll(ob => ob.gameObject == onlineBehavior.gameObject); m_onlineBehaviors.Add(onlineBehavior); OnlineManager.Log("registering " + onlineBehavior.GetType().FullName + " with index " + behaviors.Count); return(behaviors.Count); }
internal void UnregisterOnlineBehavior(OnlineBehavior onlineBehavior) { m_onlineBehaviors.Remove(onlineBehavior); }