Ejemplo n.º 1
0
        private void Push(FlexNode node = null)
        {
            if (m_Flexs == null)
            {
                m_Flexs = new Dictionary <int, FlexNode>();
            }
            if (m_FlexGOParent == null)
            {
                m_FlexGOParent = new GameObject("Flexs");
            }
            if (m_GizmosGO == null)
            {
                m_GizmosGO      = MazeMapGizmos.instance.gameObject;
                m_GizmosGO.name = "Maze Maker Gizmos";
            }

            OnFlexChange(true, node);
            OnOtherFlexChange();
            var flexType = (FlexType)m_SelectFlexTypeIdx;
            var n        = node ?? new FlexNode(m_Flexs.Count, flexType, m_FlexTime);
            var info     = new FlexGOInfo(n, m_FlexPosition, m_FlexForwardDir);
            var flexGO   = MazeManager.CreateFlex(info);

            flexGO.transform.localScale = Vector3.one * m_Scale;
            flexGO.transform.SetParent(m_FlexGOParent.transform);
            m_Flexs.Add(flexGO.transform.GetSiblingIndex(), n);
            UpdateGizmos();
            SaveToEditorPrebs();
        }
Ejemplo n.º 2
0
        private void OnOtherFlexChange(bool add = true)
        {
            if (m_Flexs.Count < 1)
            {
                return;
            }
            if (m_OtherFlexIdxs == null)
            {
                m_OtherFlexIdxs = new List <int[]>();
            }
            if (add)
            {
                var preFlexGO = m_FlexGOParent.transform.GetChild(m_Flexs.Keys.ToList()[m_Flexs.Count - 1]).gameObject;
                var startPos  = preFlexGO.transform.position;
                var endPos    = m_FlexPosition;
                var dir       = m_FlexForwardDir;
                var offsetNum = Vector3.Distance(startPos, endPos) / m_Scale;
                var num       = Mathf.CeilToInt(offsetNum);
                var rest      = offsetNum - num;
                rest = rest > 0 ? rest : 1 + rest;
                var goIdxs = new int[num - 1];
                for (int i = 0; i < goIdxs.Length; i++)
                {
                    var scale = m_Scale;
                    var pos   = startPos + (i + 1) * dir * scale;
                    if (i == goIdxs.Length - 1)
                    {
                        scale = m_Scale * rest;
                        pos  -= dir * (1 - scale) / 2;
                    }
                    var info   = new FlexGOInfo(new FlexNode(), pos, dir);
                    var flexGO = MazeManager.CreateFlex(info);
                    flexGO.transform.SetParent(m_FlexGOParent.transform, false);
                    flexGO.transform.localScale = new Vector3(flexGO.transform.localScale.x * m_Scale, flexGO.transform.localScale.y * m_Scale, flexGO.transform.localScale.z * scale);
                    goIdxs[i] = flexGO.transform.GetSiblingIndex();
                }

                m_OtherFlexIdxs.Add(goIdxs);
            }
            else
            {
                if (m_OtherFlexIdxs.Count > 0)
                {
                    var goIdxs     = m_OtherFlexIdxs[m_OtherFlexIdxs.Count - 1];
                    var goToRemove = new List <GameObject>();
                    foreach (var i in goIdxs)
                    {
                        var go = m_FlexGOParent.transform.GetChild(i).gameObject;
                        goToRemove.Add(go);
                    }
                    foreach (var go in goToRemove)
                    {
                        MazeManager.DestroyFlex(go);
                    }
                    m_OtherFlexIdxs.Remove(goIdxs);
                }
            }
        }