Exemplo n.º 1
0
    void OnGUI()
    {
        //if(!battleStarted) return;
                #if customGui
        GUI.skin = Resources.Load("Skins/Fantasy-Colorable") as GUISkin;
                #endif

        DrawOverlay();

        List <UnitTB> unitList = UnitControl.GetAllUnit();

        int length = 40;
        int height = 3;

        for (int i = 0; i < unitList.Count; i++)
        {
            UnitTB unit = unitList[i];

            if (GameControlTB.EnableFogOfWar())
            {
                if (!unit.IsVisibleToPlayer())
                {
                    continue;
                }
            }



#if hoverInfo
            Camera  cam       = CameraControl.GetActiveCamera();
            Vector3 screenPos = cam.WorldToScreenPoint(unitList[i].thisT.position);
            screenPos.y = Screen.height - screenPos.y;

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

            float hpRatio = (float)unit.HP / (float)unit.GetFullHP() * length;
            float apRatio = (float)unit.AP / (float)unit.GetFullAP() * length;


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

            style.fontSize = 20;



            style.fontSize = 20;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperCenter;
            GUI.Label(new Rect(startPosX - x_offset, startPosY + y_offset, 90, 90), "\n HP:" + unit.HP + "/" + unit.GetFullHP() + "\n AP:" + unit.AP + "/" + unit.GetFullAP(), style);


            GUI.color = Color.white;
            //draw the hp and AP
            //GUI.Box(new Rect(startPosX, startPosY-20, 200, 200), UI.texBar);
#else
            Camera  cam       = CameraControl.GetActiveCamera();
            Vector3 screenPos = cam.WorldToScreenPoint(unitList[i].thisT.position);
            screenPos.y = Screen.height - screenPos.y;

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

            float hpRatio = (float)unit.HP / (float)unit.GetFullHP() * length;
            float apRatio = (float)unit.AP / (float)unit.GetFullAP() * length;

            GUI.color = new Color(.5f, .5f, .5f, 1);
            GUI.DrawTexture(new Rect(startPosX - 1, startPosY - 1, length + 2, 2 * height + 2), UI.texBar);
            GUI.color = Color.green;
            //TODO: Add the numbers for AP and HP here, we have startpos X and Y, and other values
            //are calculated elsewhere
            GUI.DrawTexture(new Rect(startPosX, startPosY, hpRatio, height), UI.texBar);
            //GUI.Label(new Rect(screenPos.x, screenPos.y, 500, 500), "5555");
            GUI.color = new Color(0f, 1f, 1f, 1);
            GUI.DrawTexture(new Rect(startPosX, startPosY + height, apRatio, height), UI.texBar);
            Texture fIcon = UnitControl.GetFactionIcon(unitList[i].factionID);
            if (fIcon != null)
            {
                fIcon = UI.texBar;
            }

            GUI.color = Color.white;
            GUI.DrawTexture(new Rect(startPosX - 15, startPosY - 5, 15, 15), UI.texBar);


            GUI.color = UnitControl.GetFactionColor(unit.factionID);
            GUI.DrawTexture(new Rect(startPosX - 14, startPosY - 4, 13, 13), UI.texBar);

            GUI.color = Color.white;
#endif
        }

        if (tileHovered != null)
        {
            DrawHoverInfo();
        }
        ///Draw text box with selected unit health and AP
                #if ibox
        /*
         *
         * void ShowTooltip(UnitAbility ability){
         * GUIStyle style=new GUIStyle();
         * style.fontStyle=FontStyle.Bold;
         *
         * 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-220, width, height), ability.name, style);
         *
         * 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), ability.cost+"AP", style);
         *
         * 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), ability.desp, style);
         *
         * GUI.color=Color.white;
         * }
         * */

        if (UnitControl.selectedUnit != null)         //only perform this calculation once every second
        //get the selected unit
        {
            UnitTB selectedUnit = UnitControl.selectedUnit;
            string name         = selectedUnit.unitName;


            Camera  cam       = CameraControl.GetActiveCamera();
            Vector3 screenPos = cam.WorldToScreenPoint(UnitControl.selectedUnit.thisT.position);
            screenPos.y = Screen.height - screenPos.y;

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



            styleA.fontSize = 20;



            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:" + UnitControl.selectedUnit.HP + "/" + UnitControl.selectedUnit.GetFullHP() + "\n AP:" + UnitControl.selectedUnit.AP + "/" + UnitControl.selectedUnit.GetFullAP() + "\n Moves:" + UnitControl.selectedUnit.moveRemain + "\n Attacks:" + UnitControl.selectedUnit.attackRemain, styleA);


            GUI.color = Color.white;


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

            int w = w_width;
            int h = w_height;

            style.fontSize = 20;

            style.fontSize = 20;      style.normal.textColor = UI.colorH;       style.alignment = TextAnchor.UpperCenter;
#if window
            //Color c = GUI.color;
            //GUI.color = Color.red;
            //windowRect0 = GUI.Window(0,windowRect0,DoMyWindow, "Green Window");
            //GUI.color = c;

                        #if devIbox
            GUI.Box(new Rect(Screen.width / 2 - 750 / 2, -80, 750, h), "");
            GUI.Label(new Rect(Screen.width / 2 - w / 2, 0, w, h), name + " HP:" + selectedUnit.HP + " AP:" + selectedUnit.AP + " Remaining Moves:" + selectedUnit.moveRemain + " Remaining Attacks: " + selectedUnit.attackRemain, style);
#endif
#if mo
            if (timeSinceCheck > .25)
            {
                //TODO: This method is not efficient, change it later
                //get the unit position
                //get the gameObject first
                GameObject g = selectedUnit.thisObj;
                //get the camera
                Camera  c         = GameObject.Find("MainCamera").GetComponent <Camera>();
                Vector3 screenPos = camera.WorldToScreenPoint(g.transform.position);

                Debug.Log(screenPos.x + " : " + screenPos.y);
                //put a simplified version of the ibox at the unit position
                GUI.Box(new Rect(screenPos.x, screenPos.y, 100, 30), "");
                GUI.Label(new Rect(screenPos.x, screenPos.y, 100, 30), " HP:" + selectedUnit.HP + " AP:" + selectedUnit.AP, style);
            }
#endif

            //print unit information
            //GUI.Label(new Rect(Screen.width/2-250, 0, 500, 20), name+" HP:"+selectedUnit.HP+" AP:"+selectedUnit.AP+" Remaining Moves:"+selectedUnit.moveRemain +" Remaining Attacks: " +selectedUnit.attackRemain);
            if (lastCheck >= waitTime)
            {
                lastCheck = 0;
                idleUnits = totalUnits;
                //get idle units
                //get an array of their units
                p_units = UnitControl.GetAllUnitsOfFaction(p_factionId);
                //loop through the array
                foreach (UnitTB unit in p_units)
                {
                    if (unit.AreAllActionsCompleted())
                    {
                        /*GameObject g = unit.thisObj;
                         * Renderer r = g.renderer;
                         * r.material.color = Color.grey;*/
                        idleUnits--;
                    }
                    else if (false)                     //TODO: if the unit has no more moves, cannot use an ability, and cannot attack anyone

                    {
                    }
                    //if a unit has moves left, or attacks left, increment idle units
                }
            }
            else
            {
                lastCheck += Time.deltaTime;
            }
            //print idle information
            if (idleUnits == 0)
            {
                //TODO: change coords to put it right above next turn button
                //GUI.Label(new Rect(Screen.width/2-w/2, 25, w, h), "All units have exhausted their moves, hit the next turn.", style);
                //only toggle glow once per turn
                if (!messageSent)
                {
                    BroadcastMessage("toggleGlow");
                    messageSent = true;
                }
                //GUI.Label (new Rect(Screen.width/2-250, 15, 500, 20), "All units have exhausted their moves, hit the next turn.");
            }
            else
            {
                BroadcastMessage("turnoffGlow");
                GUI.Label(new Rect(Screen.width - 100, Screen.height - 65 - 20, 60, 60), idleUnits + "/" + totalUnits + " idle units", style);

                //GUI.Label (new Rect(Screen.width/2-250, 15, 500, 20),idleUnits + "/"+ totalUnits + " units still have available actions.");
            }
#else
            GUI.Box(new Rect(Screen.width / 2 - 750 / 2, -80, 750, h), "");
            GUI.Label(new Rect(Screen.width / 2 - w / 2, 0, w, h), name + " HP:" + selectedUnit.HP + " AP:" + selectedUnit.AP + " Remaining Moves:" + selectedUnit.moveRemain + " Remaining Attacks: " + selectedUnit.attackRemain, style);

            //print unit information
            //GUI.Label(new Rect(Screen.width/2-250, 0, 500, 20), name+" HP:"+selectedUnit.HP+" AP:"+selectedUnit.AP+" Remaining Moves:"+selectedUnit.moveRemain +" Remaining Attacks: " +selectedUnit.attackRemain);
            if (lastCheck >= waitTime)
            {
                lastCheck = 0;
                idleUnits = totalUnits;
                //get idle units
                //get an array of their units
                p_units = UnitControl.GetAllUnitsOfFaction(p_factionId);
                //loop through the array
                foreach (UnitTB unit in p_units)
                {
                    if (unit.AreAllActionsCompleted())
                    {
                        idleUnits--;
                    }
                    else if (false)                     //TODO: if the unit has no more moves, cannot use an ability, and cannot attack anyone

                    {
                    }
                    //if a unit has moves left, or attacks left, increment idle units
                }
            }
            else
            {
                lastCheck += Time.deltaTime;
            }
            //print idle information
            if (idleUnits == 0)
            {
                GUI.Label(new Rect(Screen.width / 2 - w / 2, 25, w, h), "All units have exhausted their moves, hit the next turn.", style);
                //GUI.Label (new Rect(Screen.width/2-250, 15, 500, 20), "All units have exhausted their moves, hit the next turn.");
            }
            else
            {
                GUI.Label(new Rect(Screen.width / 2 - w / 2, 25, w, h), idleUnits + "/" + totalUnits + " units still have available actions.", style);

                //GUI.Label (new Rect(Screen.width/2-250, 15, 500, 20),idleUnits + "/"+ totalUnits + " units still have available actions.");
            }
#endif
        }
                #endif
    }