A game about forced loneliness, made by TACStudios
at master 98 lines 3.2 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using UnityEngine; 5 6namespace UnityEditor.U2D.Animation 7{ 8 internal class ModuleToolGroup 9 { 10 class ToolGroupEntry 11 { 12 public BaseTool tool; 13 public Action activateCallback; 14 } 15 16 class ToolGroup 17 { 18 public int groupId; 19 public List<ToolGroupEntry> tools = new List<ToolGroupEntry>(); 20 public int previousToolIndex; 21 } 22 List<ToolGroup> m_ToolGroups = new List<ToolGroup>(); 23 24 public void AddToolToGroup(int groupId, BaseTool tool, Action toolActivatedCallback) 25 { 26 List<ToolGroupEntry> tools = null; 27 for (int i = 0; i < m_ToolGroups.Count; ++i) 28 { 29 if (m_ToolGroups[i].groupId == groupId) 30 { 31 tools = m_ToolGroups[i].tools; 32 } 33 34 var toolIndex = m_ToolGroups[i].tools.FindIndex(x => x.tool == tool); 35 if (toolIndex != -1) 36 { 37 Debug.LogError(string.Format("{0} already exist in group.", tool.name)); 38 return; 39 } 40 } 41 42 if (tools == null) 43 { 44 var toolGroup = new ToolGroup() 45 { 46 groupId = groupId 47 }; 48 tools = toolGroup.tools; 49 m_ToolGroups.Add(toolGroup); 50 } 51 52 tools.Add(new ToolGroupEntry() 53 { 54 tool = tool, 55 activateCallback = toolActivatedCallback 56 }); 57 } 58 59 public void ActivateTool(BaseTool tool) 60 { 61 var toolGroupIndex = -1; 62 var groupTool = m_ToolGroups.FirstOrDefault(x => 63 { 64 toolGroupIndex = x.tools.FindIndex(y => y.tool == tool); 65 return toolGroupIndex >= 0; 66 }); 67 68 if (groupTool != null && toolGroupIndex >= 0) 69 { 70 var previousTool = groupTool.previousToolIndex >= 0 ? groupTool.tools[groupTool.previousToolIndex] : null; 71 if (tool.isActive) // we want to deactivate the tool and switch to original 72 { 73 tool.Deactivate(); 74 if (previousTool != null && previousTool.tool != tool && previousTool.tool != null) 75 { 76 previousTool.tool.Activate(); 77 groupTool.previousToolIndex = toolGroupIndex; 78 } 79 } 80 else 81 { 82 for (int i = 0; i < groupTool.tools.Count; ++i) 83 { 84 var gt = groupTool.tools[i]; 85 if (gt.tool.isActive) 86 { 87 groupTool.previousToolIndex = i; 88 gt.tool.Deactivate(); 89 } 90 } 91 tool.Activate(); 92 if (groupTool.tools[toolGroupIndex].activateCallback != null) 93 groupTool.tools[toolGroupIndex].activateCallback(); 94 } 95 } 96 } 97 } 98}