trb92
Throwing science at the wall to see what sticks
- Reaction score
- 142
I'm making a spell, and as a part of it dummies with a fireball model should spin around the caster. This is the code that should make them spin.
What should happen is that the d.Fires[] units should spin around the point (d.cx,d.cy). They don't move. x and y jump between just a few values. d.angle increases properly, a BJDebugMsg() showed that.
Thanks in advance for any help offered.
Full code so far, if needed.
JASS:
private function Spin takes nothing returns boolean
local Data d = TT_GetData()
local integer i = 1
local real x
local real y
loop
exitwhen i>NUM_OF_FIRES
set d.angle = d.angle + ANGLE_INCREASE//Increase the angle
set x = d.cx + (i*SPACING) * Cos(d.angle * bj_DEGTORAD)//Calculate new position, using new angle
set y = d.cy + (i*SPACING) * Sin(d.angle * bj_DEGTORAD)//Same as above
call SetUnitX(d.Fires<i>,x)//Set to new position
call SetUnitY(d.Fires<i>,y)//Same as above
call BJDebugMsg("x: " + R2S(x))
call BJDebugMsg("y: " + R2S(y))
set i = i + 1
endloop
set d.ticks = d.ticks - 1
if d.ticks == 0 then
call d.destroy()
return true
endif
return false
endfunction</i></i>
What should happen is that the d.Fires[] units should spin around the point (d.cx,d.cy). They don't move. x and y jump between just a few values. d.angle increases properly, a BJDebugMsg() showed that.
Thanks in advance for any help offered.
Full code so far, if needed.
JASS:
scope ConcussorFireShield initializer Init
globals
//Rawcode of the spell
private constant integer SPELLID = 039;A000039;
//Rawcode of the dummy unit
private constant integer DUMMYID = 039;u001039;
//Number of units created
private constant integer NUM_OF_FIRES = 5
//The angle at which the line extends from the unit
private constant real STARTING_ANGLE = 75.
//The distance between each dummy
private constant real SPACING = 80.
//The amount the angle increases by each tick
private constant real ANGLE_INCREASE = 36.
//Base number of spins
private constant integer BASE_SPINS = 4
//Increase in number of spins per level
private constant integer INCREASE_SPINS = 1
endglobals
private struct Data
unit c
real cx
real cy
unit array Fires[NUM_OF_FIRES]
real angle
real array Distances[NUM_OF_FIRES]
integer ticks
static method create takes unit c returns Data
local Data d = Data.allocate()
local integer i = 1
local real x
local real y
set d.c = c
set d.cx = GetUnitX(c)
set d.cy = GetUnitY(c)
set d.angle = STARTING_ANGLE
loop
exitwhen i>NUM_OF_FIRES
set x = d.cx + (i*SPACING) * Cos(d.angle * bj_DEGTORAD)
set y = d.cy + (i*SPACING) * Sin(d.angle * bj_DEGTORAD)
set d.Fires<i> = CreateUnit(GetOwningPlayer(c),DUMMYID,x,y,0.)
set x = x - d.cx
set y = y - d.cy
set d.Distances<i> = (x * x) + (y * y)
set i = i + 1
endloop
set d.ticks = R2I((BASE_SPINS + INCREASE_SPINS) / TT_PERIOD)
return d
endmethod
method onDestroy takes nothing returns nothing
local integer i = 0
loop
exitwhen i>NUM_OF_FIRES
call RemoveUnit(.Fires<i>)
set i = i + 1
endloop
endmethod
endstruct
private function Spin takes nothing returns boolean
local Data d = TT_GetData()
local integer i = 1
local real x
local real y
loop
exitwhen i>NUM_OF_FIRES
set d.angle = d.angle + ANGLE_INCREASE
set x = d.cx + (i*SPACING) * Cos(d.angle * bj_DEGTORAD)
set y = d.cy + (i*SPACING) * Sin(d.angle * bj_DEGTORAD)
call SetUnitX(d.Fires<i>,x)
call SetUnitY(d.Fires<i>,y)
call BJDebugMsg("x: " + R2S(x))
call BJDebugMsg("y: " + R2S(y))
set i = i + 1
endloop
set d.ticks = d.ticks - 1
if d.ticks == 0 then
call d.destroy()
return true
endif
return false
endfunction
private function Conditions takes nothing returns boolean
return GetSpellAbilityId() == SPELLID
endfunction
private function Cast takes nothing returns nothing
local Data d = Data.create(GetSpellAbilityUnit())
call TT_Start(function Spin,d)
endfunction
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function Conditions))
call TriggerAddAction(t,function Cast)
endfunction
endscope</i></i></i></i></i>