Lobster
Old Fogey ofthe site
- Reaction score
- 90
Im making a custom combat system, similar to ff13's, and Its pretty much finished. Im just wondering: How can I make it cleaner?
Updated:
Updated:
JASS:
library CombatEngine
globals
//Configurables:
private real normalUpdate = .05 //The bar update rate when uneffected
private integer updateAmount = 1 //How much of the bar out of 100 is recovered per update
//other variables
private real array update
private multiboard array mbList
private Multibar array battleGage
private integer array value
private AbilityData array abilities
private integer totalAbilities = 0
endglobals
struct AbilityData //Register abilities mana cost
public integer Spell = 0//The spell's ID
public integer Cost = 0//How much of the bar is drained
endstruct
//========================================================
function RegisterAbility takes integer S, integer C returns nothing//Creates the struct
set abilities[totalAbilities] = AbilityData.create()
set abilities[totalAbilities].Spell = S
set abilities[totalAbilities].Cost = C
set totalAbilities = totalAbilities + 1
endfunction
private function UpdateMultiboard takes nothing returns nothing//Updates the bar every time it fires
local integer i = 0
loop
exitwhen i == 12
set value<i> = value<i> + updateAmount
call battleGage<i>.UpdateValue(value<i>,true)
set i = i+1
endloop
endfunction
//============================================
private function DrainBar takes nothing returns boolean//Compares if the casting ability is
//a registered spell, and drains the bar of that spells mana cost.
local integer i = 0
loop
exitwhen i == totalAbilities
if GetSpellAbilityId() == abilities<i>.Spell then
if value[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] >= abilities<i>.Cost then
set value[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] = value[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] - abilities<i>.Cost
else
call IssueImmediateOrder(GetTriggerUnit(), "stop")
endif
endif
set i = i +1
endloop
return false
endfunction
//========================================================
function MultiboardCreation takes player p,string title, integer col, integer row, integer barInitValue returns nothing
//Creates the multiboard with multibar, suggested: 1 row 1 column for a better look
local trigger T2 = null//Trigger
local timer Per = null//Timer
set update[GetPlayerId(p)] = normalUpdate
set Per = CreateTimer()
call TimerStart(Per, update[GetPlayerId(p)] ,true, function UpdateMultiboard)
set mbList[GetPlayerId(p)] = CreateMultiboard()
call MultiboardSetColumnCount(mbList[GetPlayerId(p)], col)
call MultiboardSetRowCount(mbList[GetPlayerId(p)], row)
call MultiboardSetTitleText(mbList[GetPlayerId(p)], title)
set battleGage[GetPlayerId(p)] = Multibar.create(mbList[GetPlayerId(p)],0,0,16,100,10,2)
call MultiboardDisplay(mbList[GetPlayerId(p)], true)
set value[GetPlayerId(p)] = barInitValue
set T2 = CreateTrigger()
call TriggerAddCondition(T2, function DrainBar)
call TriggerRegisterAnyUnitEventBJ(T2,EVENT_PLAYER_UNIT_SPELL_CAST )
endfunction
endlibrary</i></i></i></i></i></i></i>