public override void _Ready() { base._Ready(); healthBar = (HealthBar)GetNode("HealthBar"); abilityMelee = (AbilityCircle)GetNode("AbilityMelee"); debugConsole = GetNode <InGameDebugConsole>("DebugConsole"); globalState = GetNode <GlobalState>("/root/GlobalState"); }
void OpenAbilities() { Debug.Log("abilities"); Resources.Load(""); state = ChoiceState.ABILITY; int parts = selectedUnit.abilities.Count; Vector2 cpos = selectedUnit.coordinates; double currentAngle = Math.PI / 2.0; if (useHexagonalCirclesLayout) { if (parts <= 6) { double angleDifference = (2.0 * Math.PI) / parts; for (int ii = 0; ii < parts; ii++) { AbilityCircle c = Instantiate(abilityCirclePrefab, new Vector3((float)Math.Cos(currentAngle) + cpos.x, (float)Math.Sin(currentAngle) + cpos.y), Quaternion.identity); circles.Add(c); c.Assign(selectedUnit, selectedUnit.abilities[ii]); currentAngle -= angleDifference; } } else { double angleDifference = Math.PI / 3.0; int sn = 0; int seqTreshold = 0; int lineTreshold = 0; Vector3 lineStartpoint = new Vector3(0f, 0f, 0f); Vector3 lineEndpoint = new Vector3(0f, 0f, 0f); for (int ii = 0; ii < parts; ii++) { if (ii == lineTreshold + sn) { lineTreshold += sn; if (lineTreshold == seqTreshold) { sn++; seqTreshold += 6 * sn; currentAngle = Math.PI / 6.0; lineStartpoint = new Vector3(0f, sn); } else { lineStartpoint = lineEndpoint; currentAngle -= angleDifference; } lineEndpoint = new Vector3(sn * (float)Math.Cos(currentAngle), sn * (float)Math.Sin(currentAngle)); } AbilityCircle c = Instantiate(abilityCirclePrefab, (new Vector3(cpos.x, cpos.y)) + Vector3.Lerp(lineStartpoint, lineEndpoint, (ii - lineTreshold) / sn), Quaternion.identity); circles.Add(c); c.Assign(selectedUnit, selectedUnit.abilities[ii]); } } } else { double angleDifference = (2.0 * Math.PI) / parts; float radius = parts > 6 ? 0.5f / (float)Math.Sin(Math.PI / parts) : 1.0f; for (int ii = 0; ii < parts; ii++) { AbilityCircle c = Instantiate(abilityCirclePrefab, new Vector3(radius * (float)Math.Cos(currentAngle) + cpos.x, radius * (float)Math.Sin(currentAngle) + cpos.y), Quaternion.identity); circles.Add(c); c.Assign(selectedUnit, selectedUnit.abilities[ii]); currentAngle -= angleDifference; } } }