public static Component AddRigidbody(this GameObject go, Space_XD space) { if (space == Space_XD.SPACE_3D) { var rb = go.GetComponent <Rigidbody>(); if (!rb) { rb = go.AddComponent <Rigidbody>(); } rb.isKinematic = true; rb.interpolation = RigidbodyInterpolation.Interpolate; rb.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic; return(rb); } else { var rb = go.GetComponent <Rigidbody2D>(); if (!rb) { rb = go.AddComponent <Rigidbody2D>(); } rb.isKinematic = true; rb.interpolation = RigidbodyInterpolation2D.Interpolate; rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; return(rb); } }
/// <summary> /// Add the core components needed for all Pickup types, and add toggles to existing children. /// </summary> public static GameObject ConvertToPickup(GameObject selection, Space_XD space, Dynamics dynamics) { selection = NetObjectAssists.ConvertToBasicNetObject(selection); if (dynamics != Dynamics.Static) { selection.AddRigidbody(space); var st = selection.EnsureComponentExists <SyncTransform>(); st.transformCrusher.SclCrusher.Enabled = false; } selection.EnsureComponentExists <ContactTrigger>(); selection.EnsureComponentExists <SyncPickup>(); var ss = selection.EnsureComponentExists <SyncState>(); ss.mountableTo.mask = (1 << MountSettings.single.mountNames.Count) - 1; if (dynamics != Dynamics.Static) { selection.EnsureComponentExists <OnStateChangeKinematic>(); } /// Add OnStateChangeToggle to existing children before creating placeholder children selection.EnsureComponentOnNestedChildren <OnStateChangeToggle>(false); /// Add HitGroups, and set to default var hga = selection.EnsureComponentExists <HitGroupAssign>(); hga.hitGroupMask.Mask = 0; selection.CreateChildStatePlaceholders(space, dynamics); return(selection); }
public static void CreateChildStatePlaceholders(this GameObject go, Space_XD space, Dynamics dynamics, float scale = 1) { /// Create a placeholder for each State enum value for (int i = 0; i < itemStateEnumValues.Length; ++i) { go.AddStatePlaceholder(i, space, dynamics, scale); } }
// public static void CreateChildStatePlaceholders(this GameObject go, Space_XD space, Dynamics dynamics, float scale = 1) //{ // /// Create a placeholder for each State enum value // for (int i = 0; i < itemStateEnumValues.Count; ++i) // { // go.AddStatePlaceholder(i, space, dynamics, scale); // } //} public static void CreateChildStatePlaceholders(this GameObject go, Space_XD space, Dynamics dynamics, float scale = 1) { go.AddStatePlaceholder("Despawned", MaskLogic.Operator.EQUALS, 0, 0, ColliderType.None, PrimitiveType.Capsule, AssistColor.Black, space, dynamics, scale); go.AddStatePlaceholder("Visible", MaskLogic.Operator.AND, ObjState.Visible, 0, ColliderType.None, PrimitiveType.Sphere, AssistColor.Cyan, space, dynamics, scale); go.AddStatePlaceholder("Mounted", MaskLogic.Operator.AND, ObjState.Visible | ObjState.Mounted, 0, ColliderType.None, PrimitiveType.Cube, AssistColor.Magenta, space, dynamics, scale); go.AddStatePlaceholder("Unmounted", MaskLogic.Operator.AND, ObjState.Visible | ObjState.Anchored, ObjState.Anchored, ColliderType.Trigger, PrimitiveType.Cylinder, AssistColor.Red, space, dynamics, scale); go.AddStatePlaceholder("Attached", MaskLogic.Operator.AND, ObjState.Visible | ObjState.Anchored, 0, ColliderType.None, PrimitiveType.Capsule, AssistColor.Green, space, dynamics, scale); go.AddStatePlaceholder("Transit", MaskLogic.Operator.AND, ObjState.Visible | ObjState.Transit, 0, ColliderType.Full, PrimitiveType.Cube, AssistColor.Yellow, space, dynamics, scale) .transform.rotation = Quaternion.Euler(45, 45, 45); }
//public static GameObject CreateBasePickup(string name) //{ // GameObject selection = new GameObject(name); // ConvertToPickup(selection); // selection.CreateChildStatePlaceholders(); // return selection; //} //[MenuItem("GameObject/Simple/Convert To/Pickup : Item", false, -100)] public static void ConvertToItemPickup(GameObject selection, Space_XD space, Dynamics dynamics) { selection = ConvertToPickup(selection, space, dynamics); selection.EnsureComponentExists <InventoryContactReactors>(); var sst = selection.EnsureComponentExists <SyncSpawnTimer>(); sst.despawnEnable = false; Selection.activeGameObject = selection; }
//[MenuItem("GameObject/Simple/Convert To/Pickup : Vital", false, -100)] public static void ConvertToVitalPickup(GameObject selection, Space_XD space, Dynamics dynamics) { selection = ConvertToPickup(selection, space, dynamics); selection.EnsureComponentExists <VitalsContactReactors>(); var sst = selection.EnsureComponentExists <SyncSpawnTimer>(); sst.despawnEnable = true; sst.despawnOn = ObjState.Attached; Selection.activeGameObject = selection; }
//[MenuItem("GameObject/Simple/Convert To/Pickup : Vital", false, -100)] public static void ConvertToVitalPickup(GameObject selection, Space_XD space, Dynamics dynamics, Preset preset) { selection = ConvertToPickup(selection, space, dynamics, typeof(SyncVitals)); //selection.EnsureComponentExists<VitalsContactReactors>(); selection.EnsureComponentExists <VitalsContactReactor>().UsePreset(preset); var sst = selection.EnsureComponentExists <SyncSpawnTimer>(); sst.despawnEnable = true; sst.despawnOn = ObjState.Mounted; Selection.activeGameObject = selection; }
private static GameObject AddStatePlaceholder(this GameObject go, string name, ObjStateLogic.Operator op, ObjState mask, ObjState notmask, ColliderType colliderType, PrimitiveType primitiveType, AssistColor color, Space_XD space, Dynamics dynamics, float scale = 1) { string label = name + " Model"; var visObj = new GameObject(label); visObj.transform.parent = go.transform; var toggle = visObj.AddComponent <OnStateChangeToggle>(); toggle.stateLogic.notMask = (int)notmask; toggle.stateLogic.operation = op; toggle.stateLogic.stateMask = (int)mask; visObj.CreateNewPrimitiveAsChild(primitiveType, colliderType, label + " Placeholder", scale, color); return(visObj); }
private static void AddStatePlaceholder(this GameObject go, int enumindex, Space_XD space, Dynamics dynamics, float scale = 1) { ObjState mask = itemStateEnumValues[enumindex]; string label = itemStateEnumNames[enumindex] + " Model"; var visObj = new GameObject(label); visObj.transform.parent = go.transform; var toggle = visObj.AddComponent <OnStateChangeToggle>(); toggle.stateLogic.operation = enumindex == 0 ? ObjStateLogic.Operator.EQUALS : ObjStateLogic.Operator.AND; toggle.stateLogic.stateMask = (int)mask; /// Set the collider settings for each State ColliderType coltype = (mask == 0) ? ColliderType.None : ((mask & ObjState.Attached) != 0) ? ColliderType.None : ((mask & (ObjState.Dropped | ObjState.Transit)) != 0) ? ColliderType.Full : ColliderType.Trigger; PrimitiveType primtype = mask == ObjState.Visible ? PrimitiveType.Sphere : mask == ObjState.Attached ? PrimitiveType.Cube : mask == ObjState.Dropped ? PrimitiveType.Cylinder : PrimitiveType.Capsule; if (blackMat == null) { SetUpMaterials(); } Material material = mask == ObjState.Despawned ? blackMat : mask == ObjState.Visible ? cyanMat : mask == ObjState.Attached ? magentaMat : mask == ObjState.Dropped ? redMat : greenMat; var primitive = visObj.CreateNewPrimitiveAsChild(primtype, coltype, label + " Placeholder", scale); primitive.GetComponent <Renderer>().material = material; }
/// <summary> /// Add the core components needed for all Pickup types, and add toggles to existing children. /// </summary> public static GameObject ConvertToPickup(GameObject selection, Space_XD space, Dynamics dynamics, params System.Type[] allowedSystems) { selection = NetObjectAssists.ConvertToBasicNetObject(selection, Photon.Pun.OwnershipOption.Takeover); selection.EnsureComponentExists <ContactTrigger>(); selection.EnsureComponentExists <SyncContact>(); var ss = selection.EnsureComponentExists <SyncState>(); ss.mountableTo.mask = MountSettings.AllTrueMask; selection.EnsureComponentExists <SyncOwner>(); if (dynamics != Dynamics.Static) { selection.EnsureComponentExists <OnStateChangeKinematic>(); } /// Add OnStateChangeToggle to existing children before creating placeholder children selection.EnsureComponentOnNestedChildren <OnStateChangeToggle>(false); /// Add ContactGroups, and set to default var hga = selection.EnsureComponentExists <ContactGroupAssign>(); hga.contactGroups.Mask = 0; if (dynamics != Dynamics.Static) { selection.AddRigidbody(space); var st = selection.EnsureComponentExists <SyncTransform>(); st.transformCrusher.SclCrusher.Enabled = false; } selection.CreateChildStatePlaceholders(space, dynamics, 1.5f); return(selection); }