Beispiel #1
0
    public override void _Ready()
    {
        base._Ready();

        healthBar    = (HealthBar)GetNode("HealthBar");
        abilityMelee = (AbilityCircle)GetNode("AbilityMelee");
        debugConsole = GetNode <InGameDebugConsole>("DebugConsole");
        globalState  = GetNode <GlobalState>("/root/GlobalState");
    }
Beispiel #2
0
    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;
            }
        }
    }