- Joined
- May 9, 2010
- Messages
- 266
Hi guys.
It looks like i`m stupid, but i got a problem.
That`s how my variable calculates.
So every SS_Period time this variable recalculates.
Question: should this variable be the same with different value of SS_Period?
Here`s full triggers if u need.
edit: yeah, btw if u find any leaks or problems in this code (they are gonna be there absolutely, cuz i`m just learning JASS), please tell me ! =)
It looks like i`m stupid, but i got a problem.
That`s how my variable calculates.
JASS:
set udg_SS_SpeedFactor = udg_SS_SpeedFactor * Pow(bj_E, (-udg_SS_SlowLiquidFactorX * udg_SS_LiquidResistance * udg_SS_Period / udg_SS_Mass )) - udg_SS_SlowFactor * udg_SS_g * udg_SS_Period
Question: should this variable be the same with different value of SS_Period?
-
Set SS_Period = 0.02
-
Set SS_Period = 0.01
Here`s full triggers if u need.
JASS:
function GroupCounter takes nothing returns nothing
set udg_SS_GroupInteger = udg_SS_GroupInteger + 1
endfunction
function TouchGroupFilter takes nothing returns boolean
return (GetFilterUnit() != udg_SS_Orb1) and (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0) and (GetUnitAbilityLevel(GetFilterUnit(),udg_SS_OrbDefinitor) != 0)
endfunction
function SS_EnumActions takes nothing returns nothing
set udg_SS_GroupInteger = 0
call ForGroup(udg_SS_group, function GroupCounter)
if ( udg_SS_GroupInteger != 0 ) then
set udg_SS_Orb2 = GetEnumUnit()
set udg_SS_OrbLocation2 = GetUnitLoc(udg_SS_Orb2)
set udg_SS_EnumKey = GetHandleId(udg_SS_Orb2)
set udg_SS_SizeEnum = LoadReal(udg_SS_hash,udg_SS_EnumKey,StringHash("Size"))
set udg_SS_SpeedFactorEnum = LoadReal(udg_SS_hash, udg_SS_EnumKey,StringHashBJ("SpeedFactor") )
call TriggerExecute( gg_trg_Nearing_main_trigger )
call RemoveLocation(udg_SS_OrbLocation2)
set udg_SS_OrbLocation2 = null
endif
endfunction
function SS_LoopActions takes nothing returns nothing
local group g = CreateGroup()
local boolexpr TouchGroupBoolexpr = Condition(function TouchGroupFilter)
set udg_SS_Orb1 = GetEnumUnit()
set udg_SS_x = GetUnitX(udg_SS_Orb1)
set udg_SS_y = GetUnitY(udg_SS_Orb1)
set udg_SS_OrbLocation = Location(udg_SS_x, udg_SS_y)
set udg_SS_key = GetHandleId(GetEnumUnit())
set udg_SS_RA = LoadReal(udg_SS_hash,udg_SS_key,StringHash("Angle"))
set udg_SS_SpeedFactor = LoadReal(udg_SS_hash,udg_SS_key,StringHash("SpeedFactor"))
set udg_SS_DamageFactor = LoadReal(udg_SS_hash,udg_SS_key,StringHashBJ("DF"))
set udg_SS_Size = LoadReal(udg_SS_hash,udg_SS_key, StringHash("Size"))
set udg_SS_Density = LoadReal(udg_SS_hash,udg_SS_key,StringHash("Density"))
set udg_SS_SlowFactor = LoadReal(udg_SS_hash,udg_SS_key,StringHash("SlowF") )
set udg_SS_EnergyFactor = LoadReal(udg_SS_hash,udg_SS_key, StringHash("EF"))
set udg_SS_LiquidResistance = LoadReal(udg_SS_hash, udg_SS_key,StringHash("LR"))
set udg_SS_SlowLiquidFactorX = LoadReal(udg_SS_hash,udg_SS_key, StringHash("SLFX") )
call SaveBoolean(udg_SS_hash, udg_SS_key, StringHash("ISOBS"), false )
set udg_SS_Mass = ( ( 4.00 / 3.00 ) * ( bj_PI * ( Pow(( udg_SS_Size / 1000.00 ), 3.00) * udg_SS_Density ) ) )
if ( udg_SS_IsSphereOnBounceStage == false ) then
if (udg_SS_SpeedFactor>udg_SS_StopFactor) then
set udg_SS_SpeedFactor = udg_SS_SpeedFactor * Pow(bj_E, (-udg_SS_SlowLiquidFactorX * udg_SS_LiquidResistance * udg_SS_Period / udg_SS_Mass )) - udg_SS_SlowFactor * udg_SS_g * udg_SS_Period
call SaveReal(udg_SS_hash, udg_SS_key, StringHash("SpeedFactor"), udg_SS_SpeedFactor )
call DisplayTextToForce( GetPlayersAll(), R2S(udg_SS_SpeedFactor) )
call SetUnitTimeScale( udg_SS_Orb1, udg_SS_AnimationFactor * udg_SS_SpeedFactor*0.01 )
call SetUnitFlyHeight( udg_SS_Orb1, udg_SS_Size * Pow(( 1 + udg_SS_SpeedFactor ), 0.50) / udg_SS_HeightFactor , 5000.00 )
call SaveReal(udg_SS_hash, udg_SS_key, StringHash("SLFX"),1.00)
else
call SaveReal(udg_SS_hash, udg_SS_key, StringHash("SpeedFactor"), 0 )
set udg_SS_SpeedFactor = 0
call SetUnitTimeScale( udg_SS_Orb1, 0 )
endif
endif
if (udg_SS_SpeedFactor>0) then
set udg_SS_xn = udg_SS_x + udg_SS_SpeedFactor*Cos(udg_SS_RA*bj_DEGTORAD)
set udg_SS_yn = udg_SS_y + udg_SS_SpeedFactor*Sin(udg_SS_RA*bj_DEGTORAD)
set udg_CP_Point = Location(udg_SS_xn, udg_SS_yn)
call TriggerExecute( gg_trg_Check_Walkability )
if ( udg_CP_PointIsWalkable == false ) then
call TriggerExecute( gg_trg_Wall_bounce_main_trigger )
endif
set udg_SS_IsSphereOnBounceStage = LoadBoolean(udg_SS_hash, udg_SS_key,StringHash("ISOBS"))
if ( udg_SS_IsSphereOnBounceStage == false ) then
call SetUnitPosition(udg_SS_Orb1, udg_SS_xn, udg_SS_yn)
endif
call RemoveLocation(udg_CP_Point)
endif
call GroupEnumUnitsInRangeOfLoc(g, udg_SS_OrbLocation, udg_SS_TouchKoefficient * udg_SS_Size, TouchGroupBoolexpr)
call ForGroup( g, function SS_EnumActions )
call DestroyBoolExpr(TouchGroupBoolexpr)
call DestroyGroup(g)
call RemoveLocation(udg_SS_OrbLocation)
set g = null
set udg_SS_OrbLocation = null
endfunction
function SS_MainLoop takes nothing returns nothing
set udg_SS_GroupInteger = 0
call ForGroup(udg_SS_group, function GroupCounter)
if ( udg_SS_GroupInteger!= 0 ) then
call ForGroup( udg_SS_group, function SS_LoopActions )
else
call PauseTimer(udg_SS_Timer)
endif
endfunction
function SS_Run takes nothing returns nothing
local location CasterLoc = GetUnitLoc(GetTriggerUnit())
local location TargetLoc = GetSpellTargetLoc()
set udg_SS_RA = bj_RADTODEG * Atan2(GetLocationY(TargetLoc) - GetLocationY(CasterLoc), GetLocationX(TargetLoc) - GetLocationX(CasterLoc))
set udg_SS_Unit = CreateUnit(GetTriggerPlayer(),udg_SS_UnitType, GetLocationX(CasterLoc) + udg_SS_BasicOffset * Cos(udg_SS_RA * bj_DEGTORAD),GetLocationY(CasterLoc) + udg_SS_BasicOffset * Sin(udg_SS_RA * bj_DEGTORAD), udg_SS_RA)
set udg_SS_HandleId0 = GetHandleId(udg_SS_Unit)
call SetUnitPathing( udg_SS_Unit, false )
set udg_SS_SpeedFactor = ( udg_SS_SpeedFactor * udg_SS_Period )
set udg_SS_LiquidResistance = 6.00 * bj_PI * udg_SS_SlowLiquidFactor * udg_SS_Size/100
call SaveUnitHandle( udg_SS_hash,udg_SS_HandleId0, StringHash("Unit"), udg_SS_Unit )
call SaveReal( udg_SS_hash , udg_SS_HandleId0, StringHash("Angle"),udg_SS_RA )
call SaveReal( udg_SS_hash, udg_SS_HandleId0, StringHash("DF"), udg_SS_DamageFactor)
call SaveReal(udg_SS_hash, udg_SS_HandleId0, StringHash("SpeedFactor"), udg_SS_SpeedFactor )
call SaveReal( udg_SS_hash,udg_SS_HandleId0 , StringHash("Size"), udg_SS_Size )
call SaveReal( udg_SS_hash, udg_SS_HandleId0, StringHash("Density"), udg_SS_Density )
call SaveReal( udg_SS_hash, udg_SS_HandleId0, StringHash("SlowF") ,udg_SS_SlowFactor )
call SaveReal(udg_SS_hash, udg_SS_HandleId0,StringHash("EF"), udg_SS_EnergyFactor )
call SaveReal(udg_SS_hash, udg_SS_HandleId0,StringHash("SLFX"), 1.00 )
call SaveReal( udg_SS_hash, udg_SS_HandleId0,StringHash("LR"), udg_SS_LiquidResistance )
call SaveInteger( udg_SS_hash ,udg_SS_HandleId0,StringHashBJ("STD"), udg_SS_SpellTypeDetector)
call SaveStr( udg_SS_hash, udg_SS_HandleId0,StringHash("OnEO") ,udg_SS_OnExlodeOrder )
call SaveInteger(udg_SS_hash, udg_SS_HandleId0, StringHash("OnES"),udg_SS_OnExplodeSpell )
call SaveStr( udg_SS_hash ,udg_SS_HandleId0, StringHash("StrikeSFX"), udg_SS_StrikeSFX )
call SaveStr( udg_SS_hash,udg_SS_HandleId0, StringHash("WallBounceSFX"), udg_SS_BounceSFX)
call SaveBoolean( udg_SS_hash , udg_SS_HandleId0,StringHash("ISOBS"), false)
call SetUnitMoveSpeed( udg_SS_Unit, 0.00 )
call GroupAddUnit( udg_SS_group,udg_SS_Unit)
call UnitAddAbility( udg_SS_Unit,udg_SS_FlyingAbility )
call UnitRemoveAbility( udg_SS_Unit,udg_SS_FlyingAbility )
call SetUnitScale(udg_SS_Unit, udg_SS_Size * 0.01, udg_SS_Size * 0.01, udg_SS_Size * 0.01)
call SetUnitTimeScale( udg_SS_Unit, ( udg_SS_AnimationFactor * udg_SS_SpeedFactor*0.01 ) )
call SetUnitFlyHeight( udg_SS_Unit, ( udg_SS_Size / udg_SS_HeightFactor ), 100.00 )
call RemoveLocation(CasterLoc)
call RemoveLocation(TargetLoc)
call TimerStart(udg_SS_Timer,udg_SS_Period,true,function SS_MainLoop)
set CasterLoc = null
set TargetLoc = null
endfunction
//===========================================================================
function InitTrig_engine_initiate_main_Jass takes nothing returns nothing
set gg_trg_engine_initiate_main_Jass = CreateTrigger( )
set udg_SS_Timer = CreateTimer()
call TriggerAddAction( gg_trg_engine_initiate_main_Jass, function SS_Run )
endfunction