Ticket #3468: 3468.diff
File 3468.diff, 12.0 KB (added by , 9 years ago) |
---|
-
binaries/data/mods/public/gui/session/selection_details.js
111 111 }); 112 112 } 113 113 114 // TODO: Stamina 114 // Stamina 115 let player = Engine.GetPlayerID(); 116 if (entState.stamina && (entState.player == player || g_DevSettings.controlAll)) 117 { 118 let unitStaminaBar = Engine.GetGUIObjectByName("staminaBar"); 119 let staminaSize = unitStaminaBar.size; 120 staminaSize.rright = 100*Math.max(0, Math.min(1, entState.stamina.stamina / entState.stamina.maxStamina)); 121 unitStaminaBar.size = staminaSize; 122 123 Engine.GetGUIObjectByName("staminaStats").caption = sprintf(translate("%(stamina)s / %(maxStamina)s"), { 124 stamina: Math.ceil(entState.stamina.stamina), 125 maxStamina: entState.stamina.maxStamina 126 }); 127 Engine.GetGUIObjectByName("staminaSection").hidden = false; 128 } 129 else 130 Engine.GetGUIObjectByName("staminaSection").hidden = true; 115 131 116 132 // Experience 117 133 Engine.GetGUIObjectByName("experience").hidden = !entState.promotion; … … 295 311 var maxCapturePoints = 0; 296 312 var capturePoints = (new Array(9)).fill(0); 297 313 var playerID = 0; 314 let averageStamina = 0; 315 let maxStamina = 0; 298 316 299 317 for (let i = 0; i < selection.length; i++) 300 318 { … … 312 330 maxCapturePoints += entState.maxCapturePoints; 313 331 capturePoints = entState.capturePoints.map(function(v, i) { return v + capturePoints[i]; }); 314 332 } 333 if (entState.stamina) 334 { 335 averageStamina += entState.stamina.stamina; 336 maxStamina += entState.stamina.maxStamina; 337 } 315 338 } 316 339 317 340 Engine.GetGUIObjectByName("healthMultiple").hidden = averageHealth <= 0; … … 357 380 Engine.GetGUIObjectByName("captureMultiple").tooltip = capturePointsTooltip; 358 381 } 359 382 360 // TODO: Stamina 361 // Engine.GetGUIObjectByName("staminaBarMultiple"); 383 if (averageStamina > 0) 384 { 385 let unitStaminaBar = Engine.GetGUIObjectByName("staminaBarMultiple"); 386 let staminaSize = unitStaminaBar.size; 387 staminaSize.rtop = 100-100*Math.max(0, Math.min(1, averageStamina / maxStamina)); 388 unitStaminaBar.size = staminaSize; 389 390 let staminaLabel = "[font=\"sans-bold-13\"]" + translate("Stamina:") + "[/font]" 391 let stamina = sprintf(translate("%(label)s %(current)s / %(max)s"), { label: staminaLabel, current: averageStamina, max: maxStamina }); 392 let staminaMultiple = Engine.GetGUIObjectByName("staminaMultiple"); 393 staminaMultiple.tooltip = stamina; 394 staminaMultiple.hidden = false; 395 } 396 else 397 { 398 Engine.GetGUIObjectByName("staminaMultiple").hidden = true; 399 } 362 400 363 401 Engine.GetGUIObjectByName("numberOfUnits").caption = selection.length; 364 402 -
binaries/data/mods/public/simulation/components/GuiInterface.js
238 238 "rallyPoint": null, 239 239 "resourceCarrying": null, 240 240 "rotation": null, 241 "stamina": null, 241 242 "trader": null, 242 243 "unitAI": null, 243 244 "visibility": null, … … 410 411 "hasRaisedAlert": cmpAlertRaiser.HasRaisedAlert(), 411 412 }; 412 413 } 413 414 var cmpStamina = Engine.QueryInterface(ent, IID_Stamina); 415 416 if (cmpStamina) 417 { 418 ret.stamina = { 419 "stamina": cmpStamina.GetStamina(), 420 "maxStamina": cmpStamina.GetMaxStamina(), 421 }; 422 } 423 414 424 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 415 425 ret.visibility = cmpRangeManager.GetLosVisibility(ent, player); 416 426 -
binaries/data/mods/public/simulation/components/interfaces/Stamina.js
1 1 Engine.RegisterInterface("Stamina"); 2 3 4 // Message of the form { "from": 100, "to", 90 }, 5 // sent whenever stamina changes. 6 Engine.RegisterMessageType("StaminaChanged"); 7 No newline at end of file -
binaries/data/mods/public/simulation/components/Stamina.js
1 1 function Stamina() {} 2 2 3 3 Stamina.prototype.Schema = 4 "<element name='Max' a:help='Maximum stamina (msecs of running)'>" + 5 "<data type='positiveInteger'/>" + 6 "</element>"; 4 "<element name='Max' a:help='Maximum stamina'>" + 5 "<ref name='nonNegativeDecimal'/>" + 6 "</element>" + 7 "<element name='RegenRate' a:help='Stamina regeneration rate per second.'>" + 8 "<ref name='nonNegativeDecimal'/>" + 9 "</element>" + 10 "<optional>" + 11 "<element name='Initial' a:help='Initial stamina. Default if unspecified is equal to 0'>" + 12 "<ref name='nonNegativeDecimal'/>" + 13 "</element>" + 14 "</optional>"; 7 15 8 /* 9 * TODO: this all needs to be designed and implemented 10 */ 11 12 Engine.RegisterComponentType(IID_Stamina, "Stamina", Stamina); 16 Stamina.prototype.Init = function() 17 { 18 this.maxStamina = +this.template.Max; 19 this.regenRate = +this.template.RegenRate; 20 21 this.stamina = +(this.template.Initial || 0); 22 23 this.CheckRegenTimer(); 24 }; 25 26 Stamina.prototype.GetStamina = function() 27 { 28 return this.stamina; 29 }; 30 31 Stamina.prototype.GetMaxStamina = function() 32 { 33 return this.maxStamina; 34 }; 35 36 Stamina.prototype.CheckRegenTimer = function() 37 { 38 if ((this.stamina == this.maxStamina && this.regenRate > 0) || (this.stamina == 0 && this.regenRate < 0)) 39 { 40 // We don't need to regenerate stamina 41 if (this.regenTimer) 42 { 43 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 44 cmpTimer.CancelTimer(this.regenTimer); 45 this.regenTimer = undefined; 46 } 47 return; 48 } 49 50 // We need to regenerate, enable a timer if one doesn't exist 51 if (this.regenTimer) 52 return; 53 54 var cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); 55 this.regenTimer = cmpTimer.SetInterval(this.entity, IID_Stamina, "UpdateStamina", 1000, 1000, null); 56 }; 57 58 Stamina.prototype.ToggleStaminaConsumer = function(enabled, costRate) 59 { 60 if (costRate >= 0) 61 { 62 warn("Activated stamina consumer with wrong cost"); 63 return; 64 } 65 66 if (enabled) 67 { 68 if (this.regenRate > 0) 69 this.regenRate = 0; 70 this.regenRate += costRate; 71 } 72 else 73 { 74 this.regenRate -= costRate; 75 if (this.regenRate >= 0) 76 this.regenRate = +this.template.RegenRate; 77 } 78 this.CheckRegenTimer(); 79 }; 80 81 Stamina.prototype.UpdateStamina = function() 82 { 83 if (this.regenRate == 0) 84 return; 85 86 let oldStamina = this.stamina; 87 this.stamina += this.regenRate; 88 if (this.stamina > this.maxStamina) 89 this.stamina = this.maxStamina; 90 91 Engine.PostMessage(this.entity, MT_StaminaChanged, { "from": oldStamina, "to": this.stamina }); 92 }; 93 94 Stamina.prototype.OnStaminaChanged = function(msg) 95 { 96 this.CheckRegenTimer(); 97 }; 98 99 Engine.RegisterComponentType(IID_Stamina, "Stamina", Stamina); -
binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
91 91 </Sound> 92 92 <Stamina> 93 93 <Max>2000</Max> 94 <RegenRate>20</RegenRate> 95 <Initial>1000</Initial> 94 96 </Stamina> 95 97 <StatusBars> 96 98 <HeightOffset>6.5</HeightOffset> -
binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml
55 55 </SoundGroups> 56 56 </Sound> 57 57 <Stamina> 58 <Max>2500</Max> 58 <Max>2500</Max>4 59 <RegenRate>20</RegenRate> 60 <Initial>1000</Initial> 59 61 </Stamina> 60 62 <StatusBars> 61 63 <HeightOffset>6.5</HeightOffset> -
binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml
55 55 </Sound> 56 56 <Stamina> 57 57 <Max>2500</Max> 58 <RegenRate>20</RegenRate> 59 <Initial>1000</Initial> 58 60 </Stamina> 59 61 <StatusBars> 60 62 <HeightOffset>6.5</HeightOffset> -
binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml
46 46 </Sound> 47 47 <Stamina> 48 48 <Max>1500</Max> 49 <RegenRate>20</RegenRate> 49 50 </Stamina> 50 51 <UnitMotion> 51 52 <WalkSpeed>8.5</WalkSpeed> -
binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml
47 47 </Sound> 48 48 <Stamina> 49 49 <Max>2500</Max> 50 <RegenRate>20</RegenRate> 51 <Initial>1000</Initial> 50 52 </Stamina> 51 53 <StatusBars> 52 54 <HeightOffset>6.5</HeightOffset> -
binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml
33 33 <wood>10</wood> 34 34 <metal>10</metal> 35 35 </Loot> 36 <Stamina>37 <Max>1200</Max>38 </Stamina>39 36 <UnitMotion> 40 37 <WalkSpeed>8.5</WalkSpeed> 41 38 <Run> -
binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
120 120 </Sound> 121 121 <Stamina> 122 122 <Max>1000</Max> 123 <RegenRate>15</RegenRate> 123 124 </Stamina> 124 125 <UnitMotion> 125 126 <WalkSpeed>9</WalkSpeed> -
binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
95 95 </Sound> 96 96 <Stamina> 97 97 <Max>500</Max> 98 <RegenRate>5</RegenRate> 98 99 </Stamina> 99 100 <UnitAI> 100 101 <AlertReactiveLevel>1</AlertReactiveLevel>