Example #1
0
        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);
            }
        }
Example #2
0
        /// <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);
        }
Example #3
0
 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);
     }
 }
Example #4
0
        //      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);
        }
Example #5
0
        //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;
        }
Example #6
0
        //[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;
        }
Example #7
0
        //[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;
        }
Example #8
0
        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);
        }
Example #9
0
        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;
        }
Example #10
0
        /// <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);
        }