static Collider AllocCollider(ProxyForceFieldPrimitive.FieldPrimitiveType pt) { if (!s_ColliderCoreObject) { const string k_tempObjName = "TempForceFieldPrimPosedForCollision"; s_ColliderCoreObject = new GameObject(); s_ColliderCoreObject.hideFlags = HideFlags.HideAndDontSave; s_ColliderCoreObject.name = k_tempObjName; } var gm = s_ColliderCoreObject; switch (pt) { case ProxyForceFieldPrimitive.FieldPrimitiveType.Box: case ProxyForceFieldPrimitive.FieldPrimitiveType.PlaneForward: case ProxyForceFieldPrimitive.FieldPrimitiveType.LineOnX: return(gm.AddComponent <BoxCollider>()); case ProxyForceFieldPrimitive.FieldPrimitiveType.Sphere: return(gm.AddComponent <SphereCollider>()); default: throw new System.NotImplementedException("Collider for " + pt); } }
static Collider EnsureCollider(int argIndex, ProxyForceFieldPrimitive.FieldPrimitiveType pt) { const int maxArgs = 2; const int maxTypes = (int)(ProxyForceFieldPrimitive.FieldPrimitiveType.COUNT_TYPES); if (s_CollidersByArgByPrimType != null) { // already allocted } else { s_CollidersByArgByPrimType = new Collider[maxArgs][]; for (var ai = 0; ai < maxArgs; ai++) { s_CollidersByArgByPrimType[ai] = new Collider[maxTypes]; } } var typeIndex = (int)pt; var col = s_CollidersByArgByPrimType[argIndex][typeIndex]; if (col) { return(col); } col = AllocCollider(pt); s_CollidersByArgByPrimType[argIndex][typeIndex] = col; return(col); }