Exemplo n.º 1
0
 private void SetManagerDirty(IKManager2D manager)
 {
     if (manager && manager.isActiveAndEnabled)
     {
         m_DirtyManagers.Add(manager);
     }
 }
Exemplo n.º 2
0
        public void Setup()
        {
            go = new GameObject();
            var childGO = new GameObject();

            childGO.transform.parent = go.transform;

            var targetGO = new GameObject();

            targetGO.transform.parent = childGO.transform;

            go.transform.position       = Vector3.zero;
            childGO.transform.position  = new Vector3(1.0f, 0.0f, 0.0f);
            targetGO.transform.position = new Vector3(3.0f, 0.0f, 0.0f);

            ikGO    = new GameObject();
            manager = ikGO.AddComponent <IKManager2D>();
            var lsGO = new GameObject();

            solver = lsGO.AddComponent <LimbSolver2D>();
            lsGO.transform.parent = ikGO.transform;

            effectorGO = new GameObject();
            effectorGO.transform.parent = solver.transform;

            chain          = solver.GetChain(0);
            chain.target   = targetGO.transform;
            chain.effector = effectorGO.transform;

            solver.Initialize();

            manager.AddSolver(solver);
        }
Exemplo n.º 3
0
        private void StoreSolverPositionOverrides(Solver2D solver)
        {
            Debug.Assert(solver.allChainsHaveTargets == false);

            m_ChainPositionOverrides.Clear();

            IKManager2D manager = IKEditorManager.instance.FindManager(solver);

            foreach (Solver2D l_solver in manager.solvers)
            {
                if (l_solver == null || l_solver.allChainsHaveTargets)
                {
                    continue;
                }

                for (int i = 0; i < l_solver.chainCount; ++i)
                {
                    var chain = l_solver.GetChain(i);
                    if (chain.effector != null)
                    {
                        m_ChainPositionOverrides[chain] = chain.effector.position;
                    }
                }
            }
        }
 private void OnEnable()
 {
     m_Manager         = target as IKManager2D;
     m_SolverTypes     = GetDerivedTypes <Solver2D>();
     m_SolversProperty = serializedObject.FindProperty("m_Solvers");
     m_WeightProperty  = serializedObject.FindProperty("m_Weight");
     SetupReordeableList();
 }
Exemplo n.º 5
0
        public void DoSolverGUI(Solver2D solver)
        {
            if (solver == null || !solver.isValid)
            {
                return;
            }

            IKManager2D manager = IKEditorManager.instance.FindManager(solver);

            if (!solver.isActiveAndEnabled || manager == null || !manager.isActiveAndEnabled)
            {
                return;
            }

            var solverData = manager.GetSolverEditorData(solver);

            if (!solverData.showGizmo)
            {
                return;
            }
            DrawSolver(solver, solverData);

            var allChainsHaveTargets = solver.allChainsHaveTargets;

            for (int i = 0; i < solver.chainCount; ++i)
            {
                var chain = solver.GetChain(i);
                if (chain == null)
                {
                    continue;
                }

                if (allChainsHaveTargets)
                {
                    if (!IsTargetTransformSelected(chain))
                    {
                        DoTargetGUI(solver, chain);
                    }
                }
                else if (chain.target == null)
                {
                    DoIkPoseGUI(solver, chain);
                }
            }

            if (GUIUtility.hotControl == 0)
            {
                isDragging = false;
            }
        }
        public void Setup()
        {
            editorManager = IKEditorManager.instance;

            go = new GameObject();
            var child1GO = new GameObject();

            child1GO.transform.parent = go.transform;

            var child2GO = new GameObject();

            child2GO.transform.parent = child1GO.transform;

            var child3GO = new GameObject();

            child3GO.transform.parent = child2GO.transform;

            targetGO = new GameObject();
            targetGO.transform.parent = child3GO.transform;

            go.transform.position       = Vector3.zero;
            child1GO.transform.position = new Vector3(1.0f, 0.0f, 0.0f);
            child2GO.transform.position = new Vector3(3.0f, 0.0f, 0.0f);
            child3GO.transform.position = new Vector3(6.0f, 0.0f, 0.0f);
            targetGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f);

            ikGO    = new GameObject();
            manager = ikGO.AddComponent <IKManager2D>();
            var lsGO = new GameObject();

            solver = lsGO.AddComponent <FabrikSolver2D>();
            lsGO.transform.parent = ikGO.transform;

            effectorGO = new GameObject();
            effectorGO.transform.parent   = solver.transform;
            effectorGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f);

            chain                = solver.GetChain(0);
            chain.target         = targetGO.transform;
            chain.effector       = effectorGO.transform;
            chain.transformCount = 5;

            solver.Initialize();

            manager.AddSolver(solver);

            editorManager.Initialize();
        }
Exemplo n.º 7
0
    protected virtual void Awake()
    {
        anim         = GetComponent <Animator>();
        chrTransform = transform;
        rb2D         = GetComponent <Rigidbody2D>();
        feet         = GetComponentInChildren <CharacterFeet>();
        manager      = GetComponent <IKManager2D>();
        self         = gameObject;

        gunSlot      = Instantiate <Gun>(weapon);
        gunSlot.name = weapon.name;
        gunSlot.Initialize(this, weaponArm, weaponPosition.localPosition);

        itemSlot      = Instantiate <Item>(item);
        itemSlot.name = item.name;
        itemSlot.Initialize(this);
    }
Exemplo n.º 8
0
        public void Setup()
        {
            go = new GameObject();
            var child1GO = new GameObject();

            child1GO.transform.parent = go.transform;

            var child2GO = new GameObject();

            child2GO.transform.parent = child1GO.transform;

            var child3GO = new GameObject();

            child3GO.transform.parent = child2GO.transform;

            targetGO = new GameObject();
            targetGO.transform.parent = child3GO.transform;

            go.transform.position       = Vector3.zero;
            child1GO.transform.position = new Vector3(1.0f, 0.0f, 0.0f);
            child2GO.transform.position = new Vector3(3.0f, 0.0f, 0.0f);
            child3GO.transform.position = new Vector3(6.0f, 0.0f, 0.0f);
            targetGO.transform.position = new Vector3(10.0f, 0.0f, 0.0f);

            ikGO    = new GameObject();
            manager = ikGO.AddComponent <IKManager2D>();
            var lsGO = new GameObject();

            // Using FABRIKSolver2D here, but tests are generalised for all Solver2Ds
            solver = lsGO.AddComponent <FabrikSolver2D>();
            lsGO.transform.parent = ikGO.transform;

            effectorGO = new GameObject();
            effectorGO.transform.parent = solver.transform;

            var chain = solver.GetChain(0);

            chain.target         = targetGO.transform;
            chain.effector       = effectorGO.transform;
            chain.transformCount = 5;
            chain.Initialize();

            manager.AddSolver(solver);
        }
Exemplo n.º 9
0
        private void DrawSolver(Solver2D solver)
        {
            if (Event.current.type != EventType.Repaint)
            {
                return;
            }

            IKManager2D manager           = IKEditorManager.instance.FindManager(solver);
            bool        isManagerDisabled = !solver.isActiveAndEnabled || manager == null || !manager.isActiveAndEnabled;

            for (int i = 0; i < solver.chainCount; ++i)
            {
                var chain = solver.GetChain(i);
                if (chain != null)
                {
                    DrawChain(chain, isManagerDisabled, solver.allChainsHaveTargets);
                }
            }
        }
Exemplo n.º 10
0
 public void UpdateManagerImmediate(IKManager2D manager, bool recordRootLoops)
 {
     SetManagerDirty(manager);
     UpdateDirtyManagers(recordRootLoops);
 }
Exemplo n.º 11
0
        private void DoUndo(IKManager2D manager, string undoName, bool record)
        {
            foreach (var solver in manager.solvers)
            {
                if (solver == null || !solver.isActiveAndEnabled)
                {
                    continue;
                }

                if (!solver.isValid)
                {
                    solver.Initialize();
                }

                if (!solver.isValid)
                {
                    continue;
                }

                for (int i = 0; i < solver.chainCount; ++i)
                {
                    var chain = solver.GetChain(i);

                    if (record)
                    {
                        foreach (var t in chain.transforms)
                        {
                            if (m_IgnoreTransformsOnUndo.Contains(t))
                            {
                                continue;
                            }

                            Undo.RecordObject(t, undoName);
                        }


                        if (chain.effector && !m_IgnoreTransformsOnUndo.Contains(chain.effector))
                        {
                            Undo.RecordObject(chain.effector, undoName);
                        }
                    }
                    else
                    {
                        foreach (var t in chain.transforms)
                        {
                            if (m_IgnoreTransformsOnUndo.Contains(t))
                            {
                                continue;
                            }

                            Undo.RegisterCompleteObjectUndo(t, undoName);
                        }

                        if (chain.effector && !m_IgnoreTransformsOnUndo.Contains(chain.effector))
                        {
                            Undo.RegisterCompleteObjectUndo(chain.effector, undoName);
                        }
                    }
                }

                m_IgnorePostProcessModifications = true;
            }
        }
Exemplo n.º 12
0
 public void RegisterUndo(IKManager2D manager, string undoName)
 {
     DoUndo(manager, undoName, false);
 }
Exemplo n.º 13
0
 public void Record(IKManager2D manager, string undoName)
 {
     DoUndo(manager, undoName, true);
 }
 public void Setup()
 {
     ikGO    = new GameObject();
     manager = ikGO.AddComponent <IKManager2D>();
 }