11-23-2007 10:57
i seamed to have run into a problem in my sprint car im making, it works fine and everything fut when you go into mouse look to steer you are unable to only go forword and back i know it has something to do with CONTROL_ROT_(dirrection) and CONTROL_(dirrection) but im unable to get it to work properly

CODE

control(key id, integer levels, integer edges)
{
if(!Moving)
{
Moving = 1;
llSetStatus(STATUS_PHYSICS, TRUE);
}
SpeedVec = llGetVel() / llGetRot();
if((edges & levels & CONTROL_UP))
{
if((Gear + 1) != NumGears)
{
++Gear;
llWhisper(0, "Gear " + (string)(Gear + 1));
ForwardPower = llList2Float(ForwardPowerGears, Gear);
if(Linear.x > 0) Linear.x = ForwardPower;
}
}else if((edges & levels & CONTROL_DOWN))
{
if((Gear - 1) != -1)
{
--Gear;
llWhisper(0, "Gear " + (string)(Gear + 1));
ForwardPower = llList2Float(ForwardPowerGears, Gear);
if(Linear.x > 0) Linear.x = ForwardPower;
}
}
if((edges & levels & CONTROL_FWD))
{
Linear.x += ForwardPower;
NewSound = 1;
}else if((edges & ~levels & CONTROL_FWD))
{
Linear.x -= ForwardPower;
NewSound = 1;
}
if((edges & levels & CONTROL_BACK))
{
Linear.x += ReversePower;
NewSound = 1;
}else if((edges & ~levels & CONTROL_BACK))
{
Linear.x -= ReversePower;
NewSound = 1;
}
if(NewSound)
{
if(Linear.x) Sound = RunSound;
else Sound = IdleSound;
}
if(llFabs(SpeedVec.x) < 0.5)
{
if(levels & CONTROL_ROT_LEFT) CurDir = DIR_LEFT;
else if(levels & CONTROL_ROT_RIGHT) CurDir = DIR_RIGHT;
else CurDir = DIR_NORM;
Angular.z = 0.0;
}else{
if(SpeedVec.x < 0.0)
{
Forward = -1;
SpeedVec.x *= -TurnSpeedAdjust;
}else{
Forward = 1;
SpeedVec.x *= TurnSpeedAdjust;
}
if(levels & CONTROL_ROT_LEFT)
{
CurDir = DIR_LEFT;
Angular.z = (TurnPower - SpeedVec.x) * Forward;
}else if((edges & ~levels & CONTROL_ROT_LEFT))
{
CurDir = DIR_NORM;
Angular.z = 0;
}
if(levels & CONTROL_ROT_RIGHT)
{
CurDir = DIR_RIGHT;
Angular.z = -((TurnPower - SpeedVec.x) * Forward);
}else if((edges & ~levels & CONTROL_ROT_RIGHT))
{
CurDir = DIR_NORM;
Angular.z = 0;
}
}
}