static void BakeData(MapData data, Boolean inEditor) { #if UNITY_EDITOR if (inEditor) { if (EditorSceneManager.loadedSceneCount != 1) { Debug.LogErrorFormat("Can't bake map data when more than one scene is open."); return; } // set scene name data.Asset.Settings.Scene = EditorSceneManager.GetActiveScene().name; } #endif // clear existing colliders data.Asset.Settings.StaticColliders = new MapStaticCollider[0]; // circle colliders foreach (var collider in UnityEngine.Object.FindObjectsOfType <QuantumStaticCircleCollider2D>()) { ArrayUtils.Add(ref data.Asset.Settings.StaticColliders, new MapStaticCollider { Position = collider.transform.position.ToFPVector2(), Rotation = collider.transform.rotation.ToFPRotation2D(), PhysicsMaterial = collider.Settings.PhysicsMaterial, Trigger = collider.Settings.Trigger, StaticData = GetStaticData(collider.gameObject, collider.Settings), Layer = collider.gameObject.layer, // circle ShapeType = Quantum.Core.DynamicShapeType.Circle, CircleRadius = FP.FromFloat_UNSAFE(collider.Radius.AsFloat * collider.transform.localScale.x) }); } // polygon colliders foreach (var collider in UnityEngine.Object.FindObjectsOfType <QuantumStaticPolygonCollider2D>()) { var s = collider.transform.localScale; var vertices = collider.Vertices.Select(x => { var v = x.ToUnityVector3(); return(new Vector3(v.x * s.x, v.y * s.y, v.z * s.z)); }).Select(x => x.ToFPVector2()).ToArray(); if (FPVector2.IsClockWise(vertices)) { FPVector2.MakeCounterClockWise(vertices); } var normals = FPVector2.CalculatePolygonNormals(vertices); ArrayUtils.Add(ref data.Asset.Settings.StaticColliders, new MapStaticCollider { Position = collider.transform.position.ToFPVector2(), Rotation = collider.transform.rotation.ToFPRotation2D(), PhysicsMaterial = collider.Settings.PhysicsMaterial, Trigger = collider.Settings.Trigger, StaticData = GetStaticData(collider.gameObject, collider.Settings), Layer = collider.gameObject.layer, // polygon ShapeType = Quantum.Core.DynamicShapeType.Polygon, PolygonCollider = new PolygonCollider { Vertices = vertices, Normals = normals } }); } // polygon colliders foreach (var collider in UnityEngine.Object.FindObjectsOfType <QuantumStaticBoxCollider2D>()) { var e = collider.Size.ToUnityVector3(); var s = collider.transform.localScale; e.x *= s.x; e.y *= s.y; e.z *= s.z; ArrayUtils.Add(ref data.Asset.Settings.StaticColliders, new MapStaticCollider { Position = collider.transform.position.ToFPVector2(), Rotation = collider.transform.rotation.ToFPRotation2D(), PhysicsMaterial = collider.Settings.PhysicsMaterial, Trigger = collider.Settings.Trigger, StaticData = GetStaticData(collider.gameObject, collider.Settings), Layer = collider.gameObject.layer, // polygon ShapeType = Quantum.Core.DynamicShapeType.Box, BoxExtents = e.ToFPVector2() * FP._0_50 }); } // invoke callbacks foreach (var callback in Quantum.TypeUtils.GetSubClasses(typeof(MapDataBakerCallback), "Assembly-CSharp", "Assembly-CSharp-firstpass", "Assembly-CSharp-Editor", "Assembly-CSharp-Editor-firstpass")) { if (callback.IsAbstract == false) { try { (Activator.CreateInstance(callback) as MapDataBakerCallback).OnBake(data); } catch (Exception exn) { Debug.LogException(exn); } } } if (inEditor) { Debug.LogFormat("Baked {0} static colliders", data.Asset.Settings.StaticColliders.Length); } }