/** * @brief Returns true if the given layers can collide. * * @param layerA Layer of the first object * @param layerB Layer of the second object **/ public static bool CollisionEnabled(int layerA, int layerB) { FrameSyncConfig tsConfig = FrameSyncManager.Config; if (tsConfig == null) { return(true); } return(!tsConfig.GetIgnoreLayerCollision(layerA, layerB)); }
void Awake() { FrameSyncConfig currentConfig = ActiveConfig; lockedTimeStep = currentConfig.lockedTimeStep; StateTracker.Init(currentConfig.rollbackWindow); // TODO: 随机数种子在这里指定,需要修改为由 Server 统一指定 FPRandom.Init(); if (currentConfig.physics2DEnabled || currentConfig.physics3DEnabled) { PhysicsManager.New(currentConfig); PhysicsManager.instance.LockedTimeStep = lockedTimeStep; PhysicsManager.instance.Init(); } StateTracker.AddTracking(this, "time"); }
private static void CreateFrameSyncConfigAsset() { FrameSyncConfig asset = ScriptableObject.CreateInstance <FrameSyncConfig>(); string path = AssetDatabase.GetAssetPath(Selection.activeObject); if (path == "") { path = "Assets"; } else if (Path.GetExtension(path) != "") { path = path.Replace(Path.GetFileName(AssetDatabase.GetAssetPath(Selection.activeObject)), ""); } string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath(path + "/FrameSyncConfig.asset"); AssetDatabase.CreateAsset(asset, assetPathAndName); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = asset; }
void Start() { instance = this; Application.runInBackground = true; ICommunicator communicator = null; // if (!PhotonNetwork.connected || !PhotonNetwork.inRoom) { // Debug.LogWarning("You are not connected to Photon. FrameSync will start in offline mode."); // } else { // communicator = new PhotonFrameSyncCommunicator(PhotonNetwork.networkingPeer); // } // if (NetMgr.Instance.srvConn.status == Connection.Status.None) // { // Debug.LogWarning("You are not connected to Server. FrameSync will start in offline mode."); // } // else // { // communicator = new RealSyncCommunicator(); // } FrameSyncConfig activeConfig = ActiveConfig; lockstep = AbstractLockstep.NewInstance( lockedTimeStep.AsFloat(), communicator, PhysicsManager.instance, activeConfig.syncWindow, activeConfig.panicWindow, activeConfig.rollbackWindow, OnGameStarted, OnGamePaused, OnGameUnPaused, OnGameEnded, OnPlayerDisconnection, OnStepUpdate, GetLocalData, ProvideInputData ); if (ReplayRecord.replayMode == ReplayMode.LOAD_REPLAY) { // ReplayPicker.replayToLoad.Load(); ReplayRecord replayRecord = ReplayRecord.replayToLoad; if (replayRecord == null) { Debug.LogError("Replay Record can't be loaded"); gameObject.SetActive(false); return; } else { lockstep.ReplayRecord = replayRecord; } } if (activeConfig.showStats) { this.gameObject.AddComponent <FrameSyncStats>().Lockstep = lockstep; } scheduler = new CoroutineScheduler(lockstep); if (ReplayRecord.replayMode != ReplayMode.LOAD_REPLAY) { if (communicator == null) { lockstep.AddPlayer(0, "Local_Player", true); } else { // List<PhotonPlayer> players = new List<PhotonPlayer>(PhotonNetwork.playerList); // players.Sort(UnityUtils.playerComparer); // // for (int index = 0, length = players.Count; index < length; index++) { // PhotonPlayer p = players[index]; // lockstep.AddPlayer((byte) p.ID, p.NickName, p.IsLocal); // } // for (int i = 0; i < GameData.Instance.RoomPlayers.Count; i++) // { // KBEngine.Avatar player = GameData.Instance.RoomPlayers[i]; // lockstep.AddPlayer((byte)(i + 1), player.id.ToString(), player.isPlayer()); // } } } FrameSyncBehaviour[] behavioursArray = FindObjectsOfType <FrameSyncBehaviour>(); for (int index = 0, length = behavioursArray.Length; index < length; index++) { generalBehaviours.Add(NewManagedBehavior(behavioursArray[index])); } initBehaviors(); initGeneralBehaviors(generalBehaviours, false); PhysicsManager.instance.OnRemoveBody(OnRemovedRigidBody); startState = StartState.BEHAVIOR_INITIALIZED; }
public override void OnInspectorGUI() { serializedObject.Update(); FrameSyncConfig settings = (FrameSyncConfig)target; Undo.RecordObject(settings, "Edit FrameSyncConfig"); EditorGUILayout.LabelField("General", EditorStyles.boldLabel); EditorGUI.indentLevel++; settings.syncWindow = EditorGUILayout.IntField("Sync Window", settings.syncWindow); if (settings.syncWindow < 0) { settings.syncWindow = 0; } settings.rollbackWindow = EditorGUILayout.IntField("Rollback Window", settings.rollbackWindow); if (settings.rollbackWindow < 0) { settings.rollbackWindow = 0; } settings.panicWindow = EditorGUILayout.IntField("Panic Window", settings.panicWindow); if (settings.panicWindow < 0) { settings.panicWindow = 0; } settings.lockedTimeStep = EditorGUILayout.FloatField("Locked Time Step", settings.lockedTimeStep.AsFloat()); if (settings.lockedTimeStep < 0) { settings.lockedTimeStep = 0; } settings.showStats = EditorGUILayout.Toggle("Show Stats", settings.showStats); EditorGUI.indentLevel--; GUILayout.Space(10); settings.physics2DEnabled = EditorGUILayout.BeginToggleGroup("2D Physics", settings.physics2DEnabled); if (settings.physics2DEnabled) { settings.physics3DEnabled = false; EditorGUI.indentLevel++; Vector2 gField2D = EditorGUILayout.Vector2Field("Gravity", settings.gravity2D.ToVector()); settings.gravity2D.x = gField2D.x; settings.gravity2D.y = gField2D.y; settings.speculativeContacts2D = EditorGUILayout.Toggle("Speculative Contacts", settings.speculativeContacts2D); physics2DCollisionFoldout = EditorGUILayout.Foldout(physics2DCollisionFoldout, "Layer Collision Matrix"); if (physics2DCollisionFoldout) { DrawLayerMatrix(settings.physics2DIgnoreMatrix); } EditorGUI.indentLevel--; } EditorGUILayout.EndToggleGroup(); settings.physics3DEnabled = EditorGUILayout.BeginToggleGroup("3D Physics", settings.physics3DEnabled); if (settings.physics3DEnabled) { settings.physics2DEnabled = false; EditorGUI.indentLevel++; Vector3 gField3D = EditorGUILayout.Vector3Field("Gravity", settings.gravity3D.ToVector()); settings.gravity3D.x = gField3D.x; settings.gravity3D.y = gField3D.y; settings.gravity3D.z = gField3D.z; settings.speculativeContacts3D = EditorGUILayout.Toggle("Speculative Contacts", settings.speculativeContacts3D); physics3DCollisionFoldout = EditorGUILayout.Foldout(physics3DCollisionFoldout, "Layer Collision Matrix"); if (physics3DCollisionFoldout) { DrawLayerMatrix(settings.physics3DIgnoreMatrix); } EditorGUI.indentLevel--; } EditorGUILayout.EndToggleGroup(); serializedObject.ApplyModifiedProperties(); GUILayout.Space(20); if (GUILayout.Button("Highlight Settings")) { EditorGUIUtility.PingObject(target); } if (GUI.changed) { EditorUtility.SetDirty(target); } }