Exemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            base.serializedObject.Update();
            Effector2D effector2D = this.target as Effector2D;

            this.m_ShowColliderMask.target = effector2D.useColliderMask;
            EditorGUILayout.PropertyField(this.m_UseColliderMask, new GUILayoutOption[0]);
            if (EditorGUILayout.BeginFadeGroup(this.m_ShowColliderMask.faded))
            {
                EditorGUILayout.PropertyField(this.m_ColliderMask, new GUILayoutOption[0]);
            }
            EditorGUILayout.EndFadeGroup();
            base.serializedObject.ApplyModifiedProperties();
            base.OnInspectorGUI();
            if (effector2D.GetComponents <Collider2D>().Any((Collider2D collider) => collider.enabled && collider.usedByEffector))
            {
                return;
            }
            if (effector2D.requiresCollider)
            {
                EditorGUILayout.HelpBox("This effector will not function until there is at least one enabled 2D collider with 'Used by Effector' checked on this GameObject.", MessageType.Warning);
            }
            else
            {
                EditorGUILayout.HelpBox("This effector can optionally work without a 2D collider.", MessageType.Info);
            }
        }
Exemplo n.º 2
0
        public static void CheckEffectorWarnings(Collider2D collider)
        {
            if (!collider.usedByEffector)
            {
                return;
            }
            Effector2D component = collider.GetComponent <Effector2D>();

            if (component == null || !component.enabled)
            {
                EditorGUILayout.HelpBox("This collider will not function with an effector until there is at least one enabled 2D effector on this GameObject.", MessageType.Warning);
                if (component == null)
                {
                    return;
                }
            }
            if (component.designedForNonTrigger && collider.isTrigger)
            {
                EditorGUILayout.HelpBox("This collider has 'Is Trigger' checked but this should be unchecked when used with the '" + component.GetType().Name + "' component which is designed to work with collisions.", MessageType.Warning);
            }
            else if (component.designedForTrigger && !collider.isTrigger)
            {
                EditorGUILayout.HelpBox("This collider has 'Is Trigger' unchecked but this should be checked when used with the '" + component.GetType().Name + "' component which is designed to work with triggers.", MessageType.Warning);
            }
        }
        //===============================================================================================
        //                                                    Private methods
        //===============================================================================================
        protected override void CheckCollider(Component component)
        {
            var effectorType = effector != null?effector.GetType() : null;

            //get existing
            TempEffectors.Clear();
            component.GetComponents(TempEffectors);

            //find target
            Effector2D targetEffector = null;

            for (var i = TempEffectors.Count - 1; i >= 0; i--)
            {
                var tempEffector = TempEffectors[i];
                if (effectorType == tempEffector.GetType())
                {
                    targetEffector = tempEffector;
                }
                else
                {
                    BGCurve.DestroyIt(tempEffector);
                }
            }

            TempEffectors.Clear();

            if (effector == null)
            {
                return;
            }

            if (targetEffector == null)
            {
                targetEffector = (Effector2D)component.gameObject.AddComponent(effectorType);
            }


            //copy values
            var fields = GetFields(effectorType);

            foreach (var field in fields)
            {
                if (field.IsStatic)
                {
                    continue;
                }
                field.SetValue(targetEffector, field.GetValue(effector));
            }

            var props = GetProperties(effectorType);

            foreach (var prop in props)
            {
                if (!prop.CanWrite || !prop.CanWrite || prop.Name == "name")
                {
                    continue;
                }
                prop.SetValue(targetEffector, prop.GetValue(effector, null), null);
            }
        }
Exemplo n.º 4
0
        public override void OnInspectorGUI()
        {
            this.serializedObject.Update();
            Effector2D target = this.target as Effector2D;

            this.m_ShowColliderMask.target = target.useColliderMask;
            EditorGUILayout.PropertyField(this.m_UseColliderMask);
            if (EditorGUILayout.BeginFadeGroup(this.m_ShowColliderMask.faded))
            {
                EditorGUILayout.PropertyField(this.m_ColliderMask);
            }
            EditorGUILayout.EndFadeGroup();
            this.serializedObject.ApplyModifiedProperties();
            base.OnInspectorGUI();
            if (((IEnumerable <Collider2D>)target.GetComponents <Collider2D>()).Any <Collider2D>((Func <Collider2D, bool>)(collider =>
            {
                if (collider.enabled)
                {
                    return(collider.usedByEffector);
                }
                return(false);
            })))
            {
                return;
            }
            if (target.requiresCollider)
            {
                EditorGUILayout.HelpBox("This effector will not function until there is at least one enabled 2D collider with 'Used by Effector' checked on this GameObject.", MessageType.Warning);
            }
            else
            {
                EditorGUILayout.HelpBox("This effector can optionally work without a 2D collider.", MessageType.Info);
            }
        }
    private static bool CheckEffectorForce(GameObject i_Go)
    {
        if (i_Go == null)
        {
            return(true);
        }

        Effector2D effector2D = i_Go.GetComponent <Effector2D>();

        if (effector2D == null)
        {
            LogWarning(i_Go.name + " hasn't a valid effector.");
            return(true);
        }

        bool errorOccurred = false;

        if (effector2D is AreaEffector2D)
        {
            AreaEffector2D areaEffector2D = (AreaEffector2D)effector2D;
            errorOccurred = (Mathf.Abs(areaEffector2D.forceMagnitude) < 0.1f);
        }

        if (errorOccurred)
        {
            LogWarning(i_Go.name + " has an invalid force magnitude.");
        }

        return(errorOccurred);
    }
    private static bool CheckEffectorAngle(GameObject i_Go, float i_Angle)
    {
        if (i_Go == null)
        {
            return(true);
        }

        Effector2D effector2D = i_Go.GetComponent <Effector2D>();

        if (effector2D == null)
        {
            LogWarning(i_Go.name + " hasn't a valid effector.");
            return(true);
        }

        bool errorOccurred = false;

        if (effector2D is AreaEffector2D)
        {
            AreaEffector2D areaEffector2D = (AreaEffector2D)effector2D;
            errorOccurred = !Mathf.Approximately(areaEffector2D.forceAngle, i_Angle);
        }

        if (errorOccurred)
        {
            LogWarning(i_Go.name + " has an invalid force angle.");
        }

        return(errorOccurred);
    }
Exemplo n.º 7
0
        public override void OnInspectorGUI()
        {
            base.serializedObject.Update();
            Effector2D target = base.target as Effector2D;

            this.m_ShowColliderMask.target = target.useColliderMask;
            EditorGUILayout.PropertyField(this.m_UseColliderMask, new GUILayoutOption[0]);
            if (EditorGUILayout.BeginFadeGroup(this.m_ShowColliderMask.faded))
            {
                EditorGUILayout.PropertyField(this.m_ColliderMask, new GUILayoutOption[0]);
            }
            EditorGUILayout.EndFadeGroup();
            base.serializedObject.ApplyModifiedProperties();
            if (< > f__am$cache0 == null)
            {
    public static int get_colliderMask(IntPtr l)
    {
        int result;

        try
        {
            Effector2D effector2D = (Effector2D)LuaObject.checkSelf(l);
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, effector2D.colliderMask);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
Exemplo n.º 9
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            Effector2D effector2D = this.target as Effector2D;

            if (effector2D.GetComponents <Collider2D>().Any((Collider2D collider) => collider.enabled && collider.usedByEffector))
            {
                return;
            }
            if (effector2D.requiresCollider)
            {
                EditorGUILayout.HelpBox("This effector will not function until there is at least one enabled 2D collider with 'Used by Effector' checked on this GameObject.", MessageType.Warning);
            }
            else
            {
                EditorGUILayout.HelpBox("This effector can optionally work without a 2D collider.", MessageType.Info);
            }
        }
    public static int set_useColliderMask(IntPtr l)
    {
        int result;

        try
        {
            Effector2D effector2D = (Effector2D)LuaObject.checkSelf(l);
            bool       useColliderMask;
            LuaObject.checkType(l, 2, out useColliderMask);
            effector2D.useColliderMask = useColliderMask;
            LuaObject.pushValue(l, true);
            result = 1;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
    private static bool CheckEffector(GameObject i_Go)
    {
        if (i_Go == null)
        {
            return(true);
        }

        Effector2D effector2D = i_Go.GetComponent <Effector2D>();

        if (effector2D == null)
        {
            LogWarning(i_Go.name + " hasn't a valid effector.");
            return(true);
        }

        Collider2D collider2D = i_Go.GetComponent <Collider2D>();

        if (collider2D == null)
        {
            LogWarning(i_Go.name + " hasn't a valid collider.");
            return(true);
        }

        if (collider2D.usedByEffector && !collider2D.isTrigger)
        {
            LogWarning(i_Go.name + " is not a valid trigger.");
            return(true);
        }

        if (collider2D.sharedMaterial != null)
        {
            LogWarning(i_Go.name + " has a PhysicsMaterial2D assigned. Remove it.");
            return(true);
        }

        return(false);
    }
    private static bool CheckEffectorColliderMask(GameObject i_Go, int i_LayerMask)
    {
        if (i_Go == null)
        {
            return(true);
        }

        Effector2D effector2D = i_Go.GetComponent <Effector2D>();

        if (effector2D == null)
        {
            LogWarning(i_Go.name + " hasn't a valid effector.");
            return(true);
        }

        bool errorOccurred = (!effector2D.useColliderMask || ((effector2D.colliderMask & i_LayerMask) == 0));

        if (errorOccurred)
        {
            LogWarning(i_Go.name + " has an effector with an invalid ColliderMask.");
        }

        return(errorOccurred);
    }
Exemplo n.º 13
0
 public EffectorEmbed(Effector2D effector, MagneticBehaviour.Side side) {
     this.side = side;
     this.effector = effector;
     effectorDistance = calculateEffectorDistance();
 }
Exemplo n.º 14
0
 private void Awake()
 {
     m_effector         = GetComponent <Effector2D>();
     m_effector.enabled = false;
 }
Exemplo n.º 15
0
 // initialization
 void Start()
 {
     _rbody  = GetComponent <Rigidbody2D>();
     _effect = GetComponent <Effector2D>();
 }