Exemple #1
0
    void DrawHoverInfo()
    {
        UnitTB selectedUnit = UnitControl.selectedUnit;

#if hoverHP
        if (tileHovered.unit != null)
        {
            //draw hp and AP for unit
            UnitTB hUnit = tileHovered.unit;

            Camera  camA       = CameraControl.GetActiveCamera();
            Vector3 screenPosA = camA.WorldToScreenPoint(hUnit.thisT.position);
            screenPosA.y = Screen.height - screenPosA.y;

            int startPosX = (int)(screenPosA.x - 40 / 2 + 7);
            int startPosY = (int)screenPosA.y + 5;

            styleA.fontSize = 20;     styleA.normal.textColor = UI.colorH;      styleA.alignment = TextAnchor.UpperCenter;
            GUI.Box(new Rect(startPosX - x_offset - 25, startPosY + y_offset, 140, 140), "");

            GUI.Label(new Rect(startPosX - x_offset - 25, startPosY + y_offset, 140, 140), "\n HP:" + hUnit.HP + "/" + hUnit.GetFullHP() + "\n AP:" + hUnit.AP + "/" + hUnit.GetFullAP() + "\n Moves:" + hUnit.moveRemain + "\n Attacks:" + hUnit.attackRemain, styleA);
        }
#endif
        if (tileHovered.attackableToSelected)
        {
            UnitTB unit = tileHovered.unit;

            int    dmgMin = 0, dmgMax = 0;
            string hit = "", crit = "";

            int dist = GridManager.Distance(tileHovered, selectedUnit.occupiedTile);

            int   armorType   = unit.armorType;
            int   damageType  = selectedUnit.damageType;
            float dmgModifier = DamageTable.GetModifier(armorType, damageType);

            if (dist == 1 && selectedUnit.attackMode != _AttackMode.Range)
            {
                dmgMin = (int)((float)selectedUnit.GetMeleeDamageMin() * dmgModifier);
                dmgMax = (int)((float)selectedUnit.GetMeleeDamageMax() * dmgModifier);

                hit  = (selectedUnit.GetTotalHitChanceMelee(unit) * 100).ToString("f0") + "%";
                crit = (selectedUnit.GetTotalCritChanceMelee(unit) * 100).ToString("f0") + "%";
            }
            else
            {
                dmgMin = (int)((float)selectedUnit.GetRangeDamageMin() * dmgModifier);
                dmgMax = (int)((float)selectedUnit.GetRangeDamageMax() * dmgModifier);

                hit  = (selectedUnit.GetTotalHitChanceRange(unit) * 100).ToString("f0") + "%";
                crit = (selectedUnit.GetTotalCritChanceRange(unit) * 100).ToString("f0") + "%";
            }

            string text = "";
            text += hit + "chance to hit\n";
            text += "Damage: " + dmgMin + "-" + dmgMax + "\n\n";
            if (crit != "0%")
            {
                text += "Critical Chance: " + crit;
            }


            bool counter = false;
            if (GameControlTB.IsCounterAttackEnabled())
            {
                if (dist >= unit.GetAttackRangeMin() && dist <= unit.GetAttackRangeMax() && unit.counterAttackRemain > 0)
                {
                    counter = true;
                }
            }

            int cost = 0;
            if (GameControlTB.AttackAPCostRule() == _AttackAPCostRule.PerAttack)
            {
                cost = selectedUnit.APCostAttack;
            }

            GUIStyle style = new GUIStyle();
            style.fontStyle = FontStyle.Bold;

#if mousePos
            int width    = 500;
            int w_offset = 50;
            int height   = 160;
            int h_offset = 20;


            //get pos X and Y once every second to prevent flicker
            getMousePos();

            /*for(int i=0; i<3; i++) GUI.Box(new Rect(posX-(width+w_offset)/2, posY-230, width+w_offset, height), "");
             *
             * style.fontSize=20;	style.normal.textColor=UI.colorH;	style.alignment=TextAnchor.UpperCenter;
             * GUI.Label(new Rect(posX-width/2, posY-240, width, height), ability.name, style);
             *
             * style.fontSize=16;	style.normal.textColor=UI.colorH;	style.alignment=TextAnchor.UpperRight;
             * GUI.Label(new Rect(posX-width/2-5, posY-240, width, height), ability.cost+"AP", style);
             *
             * style.fontSize=16;	style.normal.textColor=UI.colorN;	style.alignment=TextAnchor.UpperCenter;	style.wordWrap=true;
             * GUI.Label(new Rect(posX-width/2, posY-190, width, height), ability.desp, style);
             *
             * GUI.color=Color.white;*/

            //for(int i=0; i<3; i++) GUI.Box(new Rect(posX-(width +w_offset)/2, posY, width+w_offset, height), "");


            GUI.Box(new Rect(posX - (width / 2) / 2, Screen.height - posY + 40, width / 2, height - 20), "");       // to remove flicker comment out this line

            style.fontSize = 20;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperCenter;
            GUI.Label(new Rect(posX - (width) / 2, Screen.height - posY + 40 + h_offset, width, height), "Attack", style);


            if (cost > 0)
            {
                style.fontSize = 16;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperRight;
                GUI.Label(new Rect(posX - width / 2 - 5, Screen.height - posY + 50 + h_offset, width, height), cost + "AP", style);
            }

            //reposition to be at location of mouse
            style.fontSize = 16;      style.normal.textColor = UI.colorN;       style.alignment = TextAnchor.UpperCenter; style.wordWrap = true;
            GUI.Label(new Rect(posX - width / 2, Screen.height - posY + 60 + h_offset, width, height), text, style);
            if (counter)
            {
                style.fontSize = 14;      style.normal.textColor = UI.colorH;       style.wordWrap = false;
                GUI.Label(new Rect(posX - width / 2, Screen.height - posY + 40 + h_offset, width, height), "Target will counter attack", style);
            }
#else
            int width  = 500;
            int height = 160;
            for (int i = 0; i < 3; i++)
            {
                GUI.Box(new Rect(Screen.width / 2 - width / 2, Screen.height - 230, width, height), "");
            }

            style.fontSize = 20;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperCenter;
            GUI.Label(new Rect(Screen.width / 2 - width / 2, Screen.height - 240, width, height), "Attack", style);

            if (cost > 0)
            {
                style.fontSize = 16;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperRight;
                GUI.Label(new Rect(Screen.width / 2 - width / 2 - 5, Screen.height - 220, width, height), cost + "AP", style);
            }

            //reposition to be at location of mouse
            style.fontSize = 16;      style.normal.textColor = UI.colorN;       style.alignment = TextAnchor.UpperCenter; style.wordWrap = true;
            GUI.Label(new Rect(Screen.width / 2 - width / 2, Screen.height - 190, width, height), text, style);
            if (counter)
            {
                style.fontSize = 14;      style.normal.textColor = UI.colorH;       style.wordWrap = false;
                GUI.Label(new Rect(Screen.width / 2 - width / 2, Screen.height - 120, width, height), "Target will counter attack", style);
            }
#endif

            GUI.color = Color.white;
        }
        else
        {
            if (tileHovered.walkableToSelected && selectedUnit != null)
            {
                //Vector3 screenPos = cam.WorldToScreenPoint(tileHovered.pos);
                //hoverObject.transform.localPosition=screenPos+new Vector3(-40, 40, 0);

                List <Vector3> list = AStar.SearchWalkablePos(tileHovered, selectedUnit.occupiedTile);
                int            dist = list.Count;
                string         text = "Move: " + (dist * selectedUnit.APCostMove) + "AP";
                //string text="Move: "+Random.Range(0, 9999)+"AP";
                GUIContent cont = new GUIContent(text);

                GUI.color = Color.white;
                GUIStyle style = new GUIStyle();
                style.fontStyle        = FontStyle.Bold;
                style.fontSize         = 16;
                style.normal.textColor = UI.colorN;
                style.alignment        = TextAnchor.LowerRight;

                Camera  cam       = CameraControl.GetActiveCamera();
                Vector3 screenPos = cam.WorldToScreenPoint(tileHovered.pos);
                screenPos.y = Screen.height - screenPos.y;

                float widthMin = 0; float widthMax = 0;
                style.CalcMinMaxWidth(cont, out widthMin, out widthMax);
#if ibox
#else
                GUI.Box(new Rect(screenPos.x - widthMax - 50, screenPos.y - 50, widthMax + 25, 22), "");
                GUI.Label(new Rect(screenPos.x - widthMax - 50, screenPos.y - 50, widthMax + 25 - 4, 20), text, style);
#endif
            }
        }
    }