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(); }
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); } } }