void DrawSelectedUnit(UnitTB unit) { GUIStyle style = new GUIStyle(); style.fontSize = 20; style.fontStyle = FontStyle.Bold; style.normal.textColor = UI.colorH; style.alignment = TextAnchor.UpperCenter; int winWidth = 300; int winHeight = 550; int startX = Screen.width / 2 - 350; int startY = Screen.height / 2 - winHeight / 2; for (int i = 0; i < 3; i++) { GUI.Box(new Rect(startX, startY, winWidth, winHeight), ""); } startX += 15; winWidth -= 30; GUI.Label(new Rect(startX, startY + 10, winWidth, winHeight), unit.unitName, style); GUI.Label(new Rect(startX, startY + 12, winWidth, winHeight), "_________________________________________________", style); startY += 40; GUI.DrawTexture(new Rect(startX + 10, startY, 60, 60), texBar); GUI.DrawTexture(new Rect(startX + 13, startY + 3, 54, 54), unit.icon); style.alignment = TextAnchor.UpperLeft; style.fontSize = 16; GUI.Label(new Rect(startX + 80, startY + 10, winWidth - 80, winHeight), "Hit Point:\nAction Point:", style); style.alignment = TextAnchor.UpperRight; GUI.Label(new Rect(startX + 80, startY + 10, winWidth - 80, winHeight), unit.fullHP + "\n" + unit.fullAP, style); startY += 70; if (infoTab == _InfoTab.General) { style.alignment = TextAnchor.UpperCenter; style.wordWrap = true; style.normal.textColor = UI.colorN; GUI.Label(new Rect(startX, startY, winWidth, 100), unit.desp, style); } else { string offText = ""; string offVText = ""; if (unit.attackMode == _AttackMode.Hybrid) { offText = "Damage (melee/range):\nHit (melee/range):\nCritical (melee/range):\nAttack Range"; offVText += unit.GetMeleeDamageMin() + "-" + unit.GetMeleeDamageMax() + "/" + unit.GetRangeDamageMin() + "-" + unit.GetRangeDamageMax() + "\n"; offVText += (unit.GetMeleeAttack() * 100).ToString("f0") + "/" + (unit.GetRangeAttack() * 100).ToString("f0") + "%" + "\n"; offVText += (unit.GetMeleeCritical() * 100).ToString("f0") + "/" + (unit.GetRangeCritical() * 100).ToString("f0") + "%" + "\n"; offVText += unit.GetAttackRangeMax().ToString("f0") + "\n"; } else { offText = "Attack Damage:\nHit Chance:\nCritical Hit Chance:\nAttack Range:"; } if (unit.attackMode == _AttackMode.Melee) { offVText += unit.GetMeleeDamageMin() + "-" + unit.GetMeleeDamageMax() + "\n"; offVText += (unit.GetMeleeAttack() * 100).ToString("f0") + "%" + "\n"; offVText += (unit.GetMeleeCritical() * 100).ToString("f0") + "%" + "\n"; offVText += unit.GetAttackRangeMax().ToString("f0") + "\n"; } else if (unit.attackMode == _AttackMode.Range) { offVText += unit.GetRangeDamageMin() + "-" + unit.GetRangeDamageMax() + "\n"; offVText += (unit.GetRangeAttack() * 100).ToString("f0") + "%" + "\n"; offVText += (unit.GetRangeCritical() * 100).ToString("f0") + "%" + "\n"; int dist = unit.GetAttackRangeMin(); if (dist <= 0) { offVText += unit.GetAttackRangeMax().ToString("f0") + "\n"; } else { offVText += unit.GetRangeDamageMin() + "-" + unit.GetRangeDamageMax() + "\n"; } } string defText = "Armour:\nDodge Chance:\nCritical Immunity:"; string miscText = "Mobility:\nSpeed:\nAbilities:"; string defVText = ""; defVText += unit.GetDmgReduc().ToString("f0") + "\n"; defVText += (unit.GetDefend() * 100).ToString("f0") + "%" + "\n"; defVText += (unit.GetCritDef() * 100).ToString("f0") + "%" + "\n"; string miscVText = ""; miscVText += unit.GetMoveRange().ToString("f0") + "\n"; miscVText += unit.GetTurnPriority().ToString("f0") + "\n"; style.alignment = TextAnchor.UpperLeft; style.fontSize = 16; style.normal.textColor = UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Offense:", style); style.fontSize = 12; style.normal.textColor = UI.colorN; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), offText, style); style.alignment = TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), offVText, style); startY += 90; style.alignment = TextAnchor.UpperLeft; style.fontSize = 16; style.normal.textColor = UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Defense:", style); style.fontSize = 12; style.normal.textColor = UI.colorN; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), defText, style); style.alignment = TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), defVText, style); startY += 75; style.alignment = TextAnchor.UpperLeft; style.fontSize = 16; style.normal.textColor = UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Misc:", style); style.fontSize = 12; style.normal.textColor = UI.colorN; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), miscText, style); style.alignment = TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY + 18, winWidth, winHeight), miscVText, style); startY += 65; List <int> abilityIDList = unit.abilityIDList; for (int i = 0; i < abilityIDList.Count; i++) { foreach (UnitAbility uAB in unitAbilityList) { if (uAB.ID == abilityIDList[i]) { GUI.DrawTexture(new Rect(15 + startX + i * 35, startY, 31, 31), texBar); GUI.DrawTexture(new Rect(15 + startX + i * 35 + 2, startY + 2, 27, 27), uAB.icon); GUIContent cont = new GUIContent("", uAB.ID.ToString()); GUI.Label(new Rect(15 + startX + i * 35, startY + 3, 25, 25), cont); } } } startY += 40; if (GUI.tooltip != "") { int ID = int.Parse(GUI.tooltip); foreach (UnitAbility uAB in unitAbilityList) { if (uAB.ID == ID) { style.alignment = TextAnchor.UpperCenter; style.wordWrap = true; GUI.Label(new Rect(startX + 3, startY + 3, winWidth, 50), uAB.desp.ToString()); } } } } string buttonText = "Less Details"; if (infoTab == _InfoTab.General) { buttonText = "More Details"; } bool switchFlag = GUI.Button(new Rect(startX + winWidth / 2 - 60, Screen.height / 2 + winHeight / 2 - 40, 120, 30), buttonText, UI.buttonStyle); if (switchFlag) { if (infoTab == _InfoTab.General) { infoTab = _InfoTab.Stats; } else { infoTab = _InfoTab.General; } } }
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 } } }
void DrawSelectedUnit(UnitTB unit) { GUIStyle style=new GUIStyle(); style.fontSize=20; style.fontStyle=FontStyle.Bold; style.normal.textColor=UI.colorH; style.alignment=TextAnchor.UpperCenter; int winWidth=300; int winHeight=550; int startX=Screen.width/2-350; int startY=Screen.height/2-winHeight/2; for(int i=0; i<3; i++) GUI.Box(new Rect(startX, startY, winWidth, winHeight), ""); startX+=15; winWidth-=30; GUI.Label(new Rect(startX, startY+10, winWidth, winHeight), unit.unitName, style); GUI.Label(new Rect(startX, startY+12, winWidth, winHeight), "_________________________________________________", style); startY+=40; GUI.DrawTexture(new Rect(startX+10, startY, 60, 60), texBar); GUI.DrawTexture(new Rect(startX+13, startY+3, 54, 54), unit.icon); style.alignment=TextAnchor.UpperLeft; style.fontSize=16; GUI.Label(new Rect(startX+80, startY+10, winWidth-80, winHeight), "Hit Point:\nAction Point:", style); style.alignment=TextAnchor.UpperRight; GUI.Label(new Rect(startX+80, startY+10, winWidth-80, winHeight), unit.fullHP+"\n"+unit.fullAP, style); startY+=70; if(infoTab==_InfoTab.General){ style.alignment=TextAnchor.UpperCenter; style.wordWrap=true; style.normal.textColor=UI.colorN; GUI.Label(new Rect(startX, startY, winWidth, 100), unit.desp, style); } else{ string offText=""; string offVText=""; if(unit.attackMode==_AttackMode.Hybrid){ offText="Damage (melee/range):\nHit (melee/range):\nCritical (melee/range):\nAttack Range"; offVText+=unit.GetMeleeDamageMin()+"-"+unit.GetMeleeDamageMax()+"/"+unit.GetRangeDamageMin()+"-"+unit.GetRangeDamageMax()+"\n"; offVText+=(unit.GetMeleeAttack()*100).ToString("f0")+"/"+(unit.GetRangeAttack()*100).ToString("f0")+"%"+"\n"; offVText+=(unit.GetMeleeCritical()*100).ToString("f0")+"/"+(unit.GetRangeCritical()*100).ToString("f0")+"%"+"\n"; offVText+=unit.GetAttackRangeMax().ToString("f0")+"\n"; } else{ offText="Attack Damage:\nHit Chance:\nCritical Hit Chance:\nAttack Range:"; } if(unit.attackMode==_AttackMode.Melee){ offVText+=unit.GetMeleeDamageMin()+"-"+unit.GetMeleeDamageMax()+"\n"; offVText+=(unit.GetMeleeAttack()*100).ToString("f0")+"%"+"\n"; offVText+=(unit.GetMeleeCritical()*100).ToString("f0")+"%"+"\n"; offVText+=unit.GetAttackRangeMax().ToString("f0")+"\n"; } else if(unit.attackMode==_AttackMode.Range){ offVText+=unit.GetRangeDamageMin()+"-"+unit.GetRangeDamageMax()+"\n"; offVText+=(unit.GetRangeAttack()*100).ToString("f0")+"%"+"\n"; offVText+=(unit.GetRangeCritical()*100).ToString("f0")+"%"+"\n"; int dist=unit.GetAttackRangeMin(); if(dist<=0) offVText+=unit.GetAttackRangeMax().ToString("f0")+"\n"; else offVText+=unit.GetRangeDamageMin()+"-"+unit.GetRangeDamageMax()+"\n"; } string defText="Armour:\nDodge Chance:\nCritical Immunity:"; string miscText="Mobility:\nSpeed:\nAbilities:"; string defVText=""; defVText+=unit.GetDmgReduc().ToString("f0")+"\n"; defVText+=(unit.GetDefend()*100).ToString("f0")+"%"+"\n"; defVText+=(unit.GetCritDef()*100).ToString("f0")+"%"+"\n"; string miscVText=""; miscVText+=unit.GetMoveRange().ToString("f0")+"\n"; miscVText+=unit.GetTurnPriority().ToString("f0")+"\n"; style.alignment=TextAnchor.UpperLeft; style.fontSize=16; style.normal.textColor=UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Offense:", style); style.fontSize=12; style.normal.textColor=UI.colorN; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), offText, style); style.alignment=TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), offVText, style); startY+=90; style.alignment=TextAnchor.UpperLeft; style.fontSize=16; style.normal.textColor=UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Defense:", style); style.fontSize=12; style.normal.textColor=UI.colorN; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), defText, style); style.alignment=TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), defVText, style); startY+=75; style.alignment=TextAnchor.UpperLeft; style.fontSize=16; style.normal.textColor=UI.colorH; GUI.Label(new Rect(startX, startY, winWidth, winHeight), "Misc:", style); style.fontSize=12; style.normal.textColor=UI.colorN; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), miscText, style); style.alignment=TextAnchor.UpperRight; GUI.Label(new Rect(startX, startY+18, winWidth, winHeight), miscVText, style); startY+=65; List<int> abilityIDList=unit.abilityIDList; for(int i=0; i<abilityIDList.Count; i++){ foreach(UnitAbility uAB in unitAbilityList){ if(uAB.ID==abilityIDList[i]){ GUI.DrawTexture(new Rect(15+startX+i*35, startY, 31, 31), texBar); GUI.DrawTexture(new Rect(15+startX+i*35+2, startY+2, 27, 27), uAB.icon); GUIContent cont=new GUIContent("", uAB.ID.ToString()); GUI.Label(new Rect(15+startX+i*35, startY+3, 25, 25), cont); } } } startY+=40; if(GUI.tooltip!=""){ int ID=int.Parse(GUI.tooltip); foreach(UnitAbility uAB in unitAbilityList){ if(uAB.ID==ID){ style.alignment=TextAnchor.UpperCenter; style.wordWrap=true; GUI.Label(new Rect(startX+3, startY+3, winWidth, 50), uAB.desp.ToString()); } } } } string buttonText="Less Details"; if(infoTab==_InfoTab.General) buttonText="More Details"; bool switchFlag=GUI.Button(new Rect(startX+winWidth/2-60, Screen.height/2+winHeight/2-40, 120, 30), buttonText, UI.buttonStyle); if(switchFlag){ if(infoTab==_InfoTab.General) infoTab=_InfoTab.Stats; else infoTab=_InfoTab.General; } }