A game about forced loneliness, made by TACStudios
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}