[vjass] How can i run this at the same time?

Xorifelse

I'd love to elaborate about discussions...........
Reaction score
87
I just got back into mapping again, started to learn vjass right away, but now i'm stuck on something.
I'm not sure how i can fix this a good, easy way.

JASS:
library LibSpecialEffects
  
  
    struct effects

        private timer   t = CreateTimer()
        private static string  m 
        private static real    x
        private static real    y
        private static real    d
        
        static method Callback takes nothing returns nothing
            call DestroyEffect(AddSpecialEffect(.m, GetRandomReal( .x - .d, .x + .d ), GetRandomReal( .y - .d, .y + .d ) ) )
        endmethod
        
        method SetData takes string m, real x, real y, real d returns nothing
            set .m = m
            set .x = x
            set .y = y
            set .d = d
        endmethod

        method Start takes real timeout, string m, real x, real y, real d returns nothing
            set .m = m
            set .x = x
            set .y = y
            set .d = d
            call TimerStart( .t, timeout, true, function effects.Callback )
        endmethod
        
        method Stop takes nothing returns nothing
            call PauseTimer( .t )
        endmethod
        
        method onDestroy takes nothing returns nothing
            call PauseTimer( .t )
            call DestroyTimer( .t )
            set .t = null
        endmethod
        
    endstruct
    
endlibrary


I can't get the 2 timers working at the same time, while i did do:
JASS:
local effects sfxa = effects.create()
local effects sfxb = effects.create()


I expected vjass was making new indexes to hold sepperate values for sfxa and sfxb but it doesn't.

I'm searching for a good work around for this issue, can anyone trow me a bone?
 

Vestras

Retired
Reaction score
248
There isn't any create method, so you would have to do:

JASS:
local effects sfxa = effects.create()
local effects sfxb = effects.create()
call sfxa.Start(...)
call sfxb.Start(...)
 

Xorifelse

I'd love to elaborate about discussions...........
Reaction score
87
There isn't any create method, so you would have to do:

JASS:
local effects sfxa = effects.create()
local effects sfxb = effects.create()
call sfxa.Start(...)
call sfxb.Start(...)

Before i created this topic, i was hoping vjass worked that way but it doesn't.

If i do:

JASS:
call sfxa.Start( 0.2, "CavernDustWithDeathAnims.mdx", 2500, -2500, 3000 )
call TriggerSleepAction( 5. )
call sfxb.Start( 3, "Units\\Demon\\Infernal\\InfernalBirth.mdl", 2500, -2500, 3000 )


sfxa is only running for 5 seconds before the new values are put into by sfxb.Start( .. )
 

Flare

Stops copies me!
Reaction score
662
Well, the Callback method won't be able to run all instances (since you are only referring to the [this] instance which is being overwritten by the sfxb.Start call) without a struct attachment system - you could attach each individual struct instance to a single timer (each) using a struct attachment system, or you could loop through an array of structs

The values for sfxa still exist, it's just the fact that you refer to a different instance when you call .Start again :p
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,495
As seen in the manual:
" and should actually only use constants for default initial values "

I.e. your timer probably has a problem too.
As in, write a create method that creates a timer for each instance.
 

Gwypaas

hook DoNothing MakeGUIUsersCrash
Reaction score
50
You need an attachment system, since static methods are just like any other function.
 

Vexorian

Why no custom sig?
Reaction score
187
jasshelper can't do magic, it cannot guess that although you are deliberately using the static keyword you actually intended the variables to be instance members, and it cannot add attaching automatically.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top