Knockback Help

killingdyl

Active Member
Reaction score
6
Ok ive searched thehelper.net for a good way to do knockback but everything i found was really really confusing. How do i do it in jass and implement t32? Please please make it as simple as possible. and if you dont know how to implement t32, its ok.
 

SineCosine

I'm still looking for my Tangent
Reaction score
77
Uh..
Something like this?

JASS:


scope KnockBack

     globals
          private constant real KnockBackDistPerSecond = 600.00 //This means that for every one second, 32 ticks, the unit will be knocked back 600 units.. Do modify this..
          private constant real KBPTick = KnockBackDistPerSecond / 32 //Don't modify this, lol
     endglobals

     struct KB

          unit Targ
          real Dist
          integer ticks
          integer MAXticks
          
          real Rad
          real x
          real y

          boolean MakeUnitPaused
          boolean TurnOffPathing
          
          private method periodic takes nothing returns nothing
               local KB k = this

               if k.ticks < k.MAXticks then
                    set k.x = GetUnitX(k.Targ) + KBPTick * Cos(k.Rad)
                    set k.y = GetUnitY(k.Targ) + KBPTick * Sin(k.Rad)

                    call SetUnitPosition(k.Targ, k.x, k.y)
               set k.ticks = k.ticks + 1
               else
                    call k.stopPeriodic()
                    call k.destroy()
               endif
          endmethod

          implement T32x

          static method KBInit takes unit Source, unit Target, real Distance, boolean PauseTheUnit, boolean TurnOffPathingUnit returns nothing
               local KB k = KB.allocate()

               set k.ticks = 1
               set k.Targ = Target
               set k.Dist = Distance
               set k.MAXticks = R2I(Distance / KBPTick) + 1
               set k.x = GetUnitX(k.Targ)
               set k.y = GetUnitY(k.Targ)
               set k.Rad = Atan2(k.y - GetUnitY(Source), k.x - GetUnitX(Source))
               
               set k.MakeUnitPaused = PauseTheUnit
               set k.TurnOffPathing = TurnOffPathingUnit

               if k.MakeUnitPaused == true then
                    call PauseUnit(k.Targ, true)
               endif

               if k.TurnOffPathing == true then
                    call SetUnitPathing(k.Targ, false)
               endif

               call k.startPeriodic()
          endmethod


          method onDestroy takes nothing returns nothing
                    if k.MakeUnitPaused == true then
                         call PauseUnit(k.Targ, false)
                    endif

                    if k.TurnOffPathing == true then
                         call SetUnitPathing(k.Targ, true)
                    endif

               set .Targ = null
          endmethod

     endstruct

endscope


Note: This is un-tested, eh, free-handed =x
So no effects, add them yourself xD
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Your knockback library failed.
-> Does not have collision option.
-> Does not provide stopping interface.
-> Does not use T32_Tick.
-> Does not follow proper naming convention.
-> Does not use constants provided by T32_Tick (Incorrect value with T32 constants will cause it to fail)
-> Does not privatelize struct members. (Naughty users will change the value and cause it to fail)
-> Does not preload Sin/Cos even they are preloadable.
-> Does not follow the rule of friction.
 

SineCosine

I'm still looking for my Tangent
Reaction score
77
(He said to make it simple =/ )

Oh, yea..

I guess I could have unit-collision detected..
Stopping interface? o.0 (What's that?)
I also assumed he wouldn't mess with the value 0.03125 =x
Preload as in, [lJASS]set k.SinRad = Sin(Rad)[/lJASS] ? o.0

And what do you mean by friction? o.0
(Do you mean the slowing down of the knock-back?)
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
I guess I could have unit-collision detected..
I meant let the user to choose SetUnitX/Y or SetUnitPosition.

Stopping interface? o.0 (What's that?)
call StopKnockback(unit)

Preload as in, set k.SinRad = Sin(Rad) ? o.0
Yes.

(Do you mean the slowing down of the knock-back?)
Yes.

Bingo. :p

Example : This | This(By Kenny, but i can't find it.)
 

SineCosine

I'm still looking for my Tangent
Reaction score
77
In what instances would someone want to intentionally stop a knock-back in progress? o.0

I just saw the system.
Very diverse indeed ._.

I didn't know you could do this:
JASS:
private struct STH     

     static method Some takes nothing returns nothing
          local Something d = Something.allocate()
          //Stuff
          return d
     endmethod
endstruct

function sth takes nothign returns nothing
     local Something d = 0
     set d = STH.Some()
endfunction
 

killingdyl

Active Member
Reaction score
6
ok i got it thanks! all i really needed was to see a simple trigger so i could learn. thanks +rep
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top