nope
Posted: Wed Sep 01, 2004 1:09 pm
No, it is the same.
MoHAA Mapping
http://map.moh-central.net/forum/
Code: Select all
pole_prep:
local.POLE_SEPERATION = 3680 // distance between poles
local.SPEED = 1536.0 // terrain speed (3 X 512)
local.poles = $pole1::$pole2::$pole3::$pole4
local.basepoint = $polewayA.origin
local.movevec = $polewayB2.origin - local.basepoint
local.trackdist = vector_length local.movevec
local.dirvec = (1.0 / local.trackdist) * local.movevec // unit vector
local.poles[1].origin = $polewayA.origin
local.dist = 0.0 // distance travelled
//pole movement loop
while(1)
{
// space the poles along the track
for(local.i = 1; local.i <= local.poles.size; local.i++)
{
local.pole = local.poles[local.i]
local.pole show
local.dist_on_track = local.dist + local.POLE_SEPERATION * (local.i - 1)
if(local.dist_on_track > local.trackdist)
{
// move back to the beginning
local.dist_on_track -= local.trackdist
local.pole hide
}
local.pole.origin = local.basepoint + local.dist_on_track * local.dirvec
}
waitframe
local.dist += local.SPEED * 0.05
// this is only to prevent the dist variable from getting too large
if(local.dist > local.trackdist)
local.dist -= local.trackdist
}
end
Code: Select all
local.poles[1] hide
local.poles[1] time .005
local.poles[1] moveto $polewayA
local.poles[1] waitmove
local.poles[1] showCode: Select all
if(local.dist_on_track > local.trackdist)
{
// move back to the beginning
local.pole time .001
local.pole moveto $polewayC
waitmove
local.pole moveto $polewayD
waitmove
local.dist_on_track -= local.trackdist
}
I can't see why that would mattertltrude wrote:I think the problem is that it uses a "Constant array" rather than a "Targetname array" for the poles. Would it be better to just name all the poles "pole" and then index them with a for loop?
local.a -= local.b means local.a = local.a - local.b, and similar for +=. Hence the origin of the poles does not increase with 1 unit but with 0.05 * local.SPEED each frametltrude wrote:So, how do I fix it?
I don't really understand how your thread moves the poles.
Is it changing the poles origin by one unit 14720 times?
What does (-=) and (+=) mean?
Yes... I personally hate to use targetnames all throughout a script because they may be subject to change... hence I usually store them in some universal variable somewhere at the top of the script... it's only personal preference though so you can change it as you like.Can I replace "local.basepoint" with "$polewayA.origin"?
No not at allI'm guessing that to get the pole to go back, the vector direction is reversed from ( 0 -14720 0) to ( 0 14720 0).
Am I right?
Code: Select all
if(local.dist_on_track > local.trackdist)
{
// move back to the beginning
local.dist_on_track -= local.trackdist
}
local.pole.origin = local.basepoint + local.dist_on_track * local.dirvec
Code: Select all
// Test poles
// ARCHITECTURE: ATOMIC
// SCRIPTING: ATOMIC & TLTRUDE
main:
// set scoreboard messages
setcvar "g_obj_alliedtext1" "test poles!"
setcvar "g_obj_alliedtext2" ""
setcvar "g_obj_alliedtext3" ""
setcvar "g_obj_axistext1" ""
setcvar "g_obj_axistext2" ""
setcvar "g_obj_axistext3" ""
setcvar "g_scoreboardpic" ""
level waittill prespawn
//***Precache Dm Stuff
exec global/DMprecache.scr
level.script = maps/dm/test_jpoles.scr
exec global/ambient.scr m6l3a // for background sound
spawn info_waypoint targetname "polewayB2"
$polewayB2.origin = ($polewayB.origin + ( -3680 0 0 ))
thread pole_prep
level waittill spawn
end
//------------------------------>
// Pole Thread
//------------------------------>
pole_prep:
local.poles = $pole1::$pole2::$pole3::$pole4
local.poles[1].origin = $polewayA.origin
local.dist = 0.0
//pole movement loop
while(1)
{
for(local.i = 1; local.i <= local.poles.size; local.i++)
{
local.poles[local.i].offset = ( 0 0 0 )
local.pole = local.poles[local.i]
local.dist_on_track = local.dist + 3680 * (local.i - 1)
if( local.dist_on_track > 14720 )
{
local.dist_on_track = ( local.dist_on_track - 14720 )
local.poles[local.i].offset = ( 0 0 -1000 )
}
local.pole.origin = $polewayA.origin + ((local.dist_on_track * ( -1 0 0 )) + local.poles[local.i].offset )
}
waitframe
local.dist = ( local.dist + 76.8 )
if( local.dist > 14720 )
local.dist = ( local.dist - 14720 )
}
end
Code: Select all
local.script_object_poles = $pole1::$pole2::$pole3::$pole4
for(local.i = 1; local.i <= local.script_object_poles.size; local.i++)
{
local.poles[local.i] = waitthread reclassobject local.script_object_poles[local.i] Entity
}
// (...)
// -------------------
// spawns a new object with same brushmodel and removes old object
reclassobject local.object local.newclass:
local.newobj = spawn local.newclass origin local.object.origin angles local.object.angles model local.object.brushmodel
local.object remove
end local.newobj
Code: Select all
main:
// set scoreboard messages
setcvar "g_obj_alliedtext1" "test poles!"
setcvar "g_obj_alliedtext2" ""
setcvar "g_obj_alliedtext3" ""
setcvar "g_obj_axistext1" ""
setcvar "g_obj_axistext2" ""
setcvar "g_obj_axistext3" ""
setcvar "g_scoreboardpic" ""
level waittill prespawn
//***Precache Dm Stuff
exec global/DMprecache.scr
level.script = maps/dm/test_jpoles.scr
exec global/ambient.scr m6l3a // for background sound
spawn info_waypoint targetname "polewayB2"
$polewayB2.origin = ($polewayB.origin + ( -3760 0 0 ))
spawn info_waypoint targetname "polewayA2"
$polewayA2.origin = ($polewayA.origin + ( 3600 0 0 ))
thread pole_prep
level waittill spawn
end
//------------------------------>
// Pole Thread
//------------------------------>
pole_prep:
local.poles = $pole1::$pole2::$pole3::$pole4::$pole5
local.poles[1].origin = $polewayA2.origin
local.dist = 0.0
//poles movement loop
while(1)
{
for(local.i = 1; local.i <= local.poles.size; local.i++)
{
local.pole = local.poles[local.i]
local.dist_on_track = local.dist + 3680 * (local.i - 1)
if( local.dist_on_track > 18400 )
{
local.dist_on_track = ( local.dist_on_track - 18400 )
}
local.pole.origin = $polewayA2.origin + (local.dist_on_track * ( -1 0 0 ))
}
waitframe
local.dist = ( local.dist + 76.8 )
if( local.dist > 18400 )
local.dist = ( local.dist - 18400 )
}
end