thanks jonas. The most deserved compliment is for Nout (the real programmer).
A mix between the 2 car type. Smart as the "rigid car" but with suspension.
{
PosX [0]
PosY [0]
PosZ [0]
Dx [0]
Dy [0]
Dz [0]
Dx_hinge [0]
Dy_hinge [0]
Dz_hinge [0]
Dx_hinge2 [0]
Dy_hinge2 [0]
Dz_hinge2 [0]
Mass [1]
Scale [1]
ALPHA [255]
MyBodyId [-1]
SenId1 [-1]
RocketId [-1]
KeyReleased [true]
Depth [0.0]
TORQUE_REAR [0]
TORQUE_FRONT [0]
TORQUE_FRONT_L [0]
CODE [0]
MAX_STEAR_ANGLE [33]
TORQUE_LATERAL [0]
TORQUE_FORCE [340]
X_PERC [0]
Z_PERC [0]
X_FINAL_TORQUE [0]
Z_FINAL_TORQUE [0]
X_FINAL_TORQUE_HANDBRAKE [0]
Z_FINAL_TORQUE_HANDBRAKE [0]
MIX_STEER_GLOBAL [0]
MIX_STEER_LOCAL [0]
TIME [0]
FOLLOWSPEED[0]
MY_YAW [0]
MY_YAW_CHASSIS [0]
ANOTHER_YAW [0]
A_PERC [0]
B_PERC [0]
OVERRALL_STEER [0]
OVERRALL_STEER_CHASSIS [0]
LEFT_STEER [0]
RIGHT_STEER [0]
MIX_STEER [0]
FINAL_STEER [0]
LEFT_WHEEL_LOCAL [0]
RIGHT_WHEEL_LOCAL [0]
Body
{
Body0 [0]
Body1 [0]
Body2 [0]
Body3 [0]
Body4 [0]
Body5 [0]
Body6 [0]
Body7 [0]
Body8 [0]
Body9 [0]
Body10 [0]
Body11 [0]
Body12 [0]
Body13 [0]
Body14 [0]
Body15 [0]
Body16 [0]
Body17 [0]
Body18 [0]
Body19 [0]
Body20 [0]
Body21 [0]
Body22 [0]
Body23 [0]
Body24 [0]
Body25 [0]
Body26 [0]
Body27 [0]
Body28 [0]
Body29 [0]
Body30 [0]
Body31 [0]
Body32 [0]
Body33 [0]
Body34 [0]
Body35 [0]
Body36 [0]
Body37 [0]
Body38 [0]
Body39 [0]
Body40 [0]
}
Cone
{
Cone0 [0]
Cone1 [0]
Cone2 [0]
Cone3 [0]
Cone4 [0]
Cone5 [0]
Cone6 [0]
Cone7 [0]
Cone8 [0]
Cone9 [0]
Cone10 [0]
Cone11 [0]
Cone12 [0]
Cone13 [0]
Cone14 [0]
Cone15 [0]
Cone16 [0]
Cone17 [0]
Cone18 [0]
Cone19 [0]
Cone20 [0]
Cone21 [0]
Cone22 [0]
Cone23 [0]
Cone24 [0]
Cone25 [0]
Cone26 [0]
Cone27 [0]
Cone28 [0]
Cone29 [0]
Cone30 [0]
Cone31 [0]
Cone32 [0]
Cone33 [0]
Cone34 [0]
Cone35 [0]
Cone36 [0]
Cone37 [0]
Cone38 [0]
Cone39 [0]
Cone40 [0]
}
Actor
{
Actor0 [box0.act]
Actor1 [box1.act]
Actor2 [box2.act]
Actor3 [box3.act]
Actor4 [box4.act]
Actor5 [box5.act]
}
s [0]
i [0]
j [0]
Dx_box [0]
Dy_box [0]
Dz_box [0]
Init[ () //Is excecuted only once.
{
Console(false);
PosX = 0;
PosY = -340;
PosZ = 0;
DefineMaterial(1, 8, 0.3);
DefineMaterial(2, 1, 0.3);
Body[0] = CreateRigidBody("Body0", "CHASSIS",8,8,8, 255, PosX, PosY, PosZ, 0,0,0, 0,0,0 , false, ALPHA, "Box 133 20 74", 2, 0,0,0,0, Mass*8);
ExtendRigidBody(Body[0], "Body0ext1", "box_centered.act" ,1,1,1, 0, PosX, PosY, PosZ, 2,25,0, 0,0,0 , false, 0, "Box 45 12 50", 2, 0,0,0,0, Mass*8);
ExtendRigidBody(Body[0], "Body0ext2", "box_centered.act" ,1,1,1, 0, PosX, PosY, PosZ, 25,15,0, 0,0,0 , false, 0, "Box 45 12 50", 2, 0,0,0,0, Mass*8);
ExtendRigidBody(Body[0], "Body0ext3", "box_centered.act" ,1,1,1, 0, PosX, PosY, PosZ, -55,5,0, 0,0,0 , false, 0, "Box 45 12 50", 2, 0,0,0,0, Mass*4);
Dx = GetBodyBBox(Body[0], 0);
Dy = GetBodyBBox(Body[0], 1);
Dz = GetBodyBBox(Body[0], 2);
Dx_Dummy = GetBodyBBox(Body[5], 0);
Dy_Dummy = GetBodyBBox(Body[5], 1);
Dz_Dummy = GetBodyBBox(Body[5], 2);
Body[1] = CreateRigidBody("Body1", "rear_tyre.act", 9,9,9, 255, PosX+Dx*0.24, PosY-Dy*0.60, PosZ+Dz*0.47,0,0,0, 0,0,0, false, 120, "Sphere 0", 1, 0,0,0,0, Mass*1.5);
Body[2] = CreateRigidBody("Body2", "rear_tyre.act", 9,9,9, 255, PosX+Dx*0.24, PosY-Dy*0.60, PosZ-Dz*0.47,0,0,0, 0,0,0, false, 120, "Sphere 0", 1, 0,0,0,0, Mass*1.5);
Body[7] = CreateRigidBody("Dummy3", "box0.act",0.5,0.5,0.5, 255, PosX+Dx*0.24, PosY-Dy*0.6, PosZ+Dz*0.27, 0,0,0, 0,0,0 , false, 200, "Box 0", 0, 0,0,0,0, Mass/4);
Body[8] = CreateRigidBody("Dummy4", "box0.act",0.5,0.5,0.5, 255, PosX+Dx*0.24, PosY-Dy*0.6, PosZ-Dz*0.27, 0,0,0, 0,0,0 , false, 200, "Box 0", 0, 0,0,0,0, Mass/4);
CreateHingeJoint(Body[0], Body[7], PosX+Dx*0.24, PosY-Dy*0.6, PosZ+Dz*0.27, 0,0,90, -5, 0, -5, 0, Dz*1, -1, 0, 0);
CreateHingeJoint(Body[0], Body[8], PosX+Dx*0.24, PosY-Dy*0.6, PosZ-Dz*0.27, 0,0,90, 0, 5, 0, 5, Dz*1, -1, 0, 0);
CreateHingeJoint(Body[7], Body[1], PosX+Dx*0.24, PosY-Dy*0.6, PosZ+Dz*0.47, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
CreateHingeJoint(Body[8], Body[2], PosX+Dx*0.24, PosY-Dy*0.6, PosZ-Dz*0.47, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
//CreateHingeJoint(Body[0], Body[1], PosX+Dx*0.24, PosY-Dy*0.60, PosZ+Dz*0.47, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
//CreateHingeJoint(Body[0], Body[2], PosX+Dx*0.24, PosY-Dy*0.60, PosZ-Dz*0.47, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
Body[9] = CreateRigidBody("Dummy5", "box0.act",0.5,0.5,0.5, 255, PosX-Dx*0.45, PosY-Dy*0.6, PosZ+Dz*0.27, 0,0,0, 0,0,0 , false, 200, "Box 0", 0, 0,0,0,0, Mass);
Body[10] = CreateRigidBody("Dummy6", "box0.act",0.5,0.5,0.5, 255, PosX-Dx*0.45, PosY-Dy*0.6, PosZ-Dz*0.27, 0,0,0, 0,0,0 , false, 200, "Box 0", 0, 0,0,0,0, Mass);
CreateHingeJoint(Body[0], Body[9], PosX-Dx*0.45, PosY-Dy*0.6, PosZ+Dz*0.27, 0,0,90, -5, 0, -5, 0, Dz*1, -1, 0, 0);
CreateHingeJoint(Body[0], Body[10], PosX-Dx*0.45, PosY-Dy*0.6, PosZ-Dz*0.27, 0,0,90, 0, 5, 0, 5, Dz*1, -1, 0, 0);
//CreateHingeJoint(Body[9], Body[5], PosX-Dx*0.45, PosY-Dy*0.6, PosZ+Dz*0.40, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
//CreateHingeJoint(Body[10], Body[6], PosX-Dx*0.45, PosY-Dy*0.6, PosZ-Dz*0.40, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
Body[5] = CreateRigidBody("Dummy1", "box0.act",1,1,1, 0, PosX-Dx*0.45, PosY-Dy*0.60, PosZ+Dz*0.40, 0,0,0, 0,0,0 , false, 200, "Box 0", 1, 0,0,0,0, Mass);
Body[6] = CreateRigidBody("Dummy2", "box0.act",1,1,1, 0, PosX-Dx*0.45, PosY-Dy*0.60, PosZ-Dz*0.40, 0,0,0, 0,0,0 , false, 200, "Box 0", 1, 0,0,0,0, Mass);
CreateHingeJoint(Body[9], Body[5], PosX-Dx*0.45, PosY-Dy*0.60, PosZ+Dz*0.40, 0,0,0, -MAX_STEAR_ANGLE, MAX_STEAR_ANGLE, -MAX_STEAR_ANGLE, MAX_STEAR_ANGLE, Dz*0.35, -1, 0, 0);
CreateHingeJoint(Body[10], Body[6], PosX-Dx*0.45, PosY-Dy*0.60, PosZ-Dz*0.40, 0,0,0, -MAX_STEAR_ANGLE, MAX_STEAR_ANGLE, -MAX_STEAR_ANGLE, MAX_STEAR_ANGLE, Dz*0.35, -1, 0, 0);
Body[3] = CreateRigidBody("Body3", "front_tyre.act", 8,8,8, 255, PosX-Dx*0.45, PosY-Dy*0.60, PosZ+Dz*0.40, 0,0,0, 0,0,0, false, 120, "Sphere 0", 1, 0,0,0,0, Mass);
Body[4] = CreateRigidBody("Body4", "front_tyre.act", 8,8,8, 255, PosX-Dx*0.45, PosY-Dy*0.60, PosZ-Dz*0.40, 0,0,0, 0,0,0, false, 120, "Sphere 0", 1, 0,0,0,0, Mass);
CreateHingeJoint(Body[5], Body[3], PosX-Dx*0.45, PosY-Dy*0.60, PosZ+Dz*0.40, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
CreateHingeJoint(Body[6], Body[4], PosX-Dx*0.45, PosY-Dy*0.60, PosZ-Dz*0.40, 90,0,0, -180, 180,-180, 180, Dz*0.34, -1, 0, 0);
/*
Body[13] = CreateRigidBody("PortLeft", "port_left.act",7,7,7, 255, PosX-Dx*0.28, PosY, PosZ+Dz*0.38, 0,0,0, 0,0,0 , false, 200, "Box 0", 1, 0,0,0,0, Mass);
CreateHingeJoint(Body[0], Body[13], PosX-Dx*0.28, PosY, PosZ+Dz*0.38, 0,0,0, -86, -10, -86, -10, Dz*0.35, -1, 0, 0);
Body[14] = CreateRigidBody("PortRight", "port_right.act",7,7,7, 255, PosX-Dx*0.28, PosY, PosZ-Dz*0.38, 0,0,0, 0,0,0 , false, 200, "Box 0", 1, 0,0,0,0, Mass);
CreateHingeJoint(Body[0], Body[14], PosX-Dx*0.28, PosY, PosZ-Dz*0.38, 0,0,0, 10, 86, 10, 86, Dz*0.35, -1, 0, 0);
*/
for i=1 to 10
{
Cone = CreateStaticBody("Cyl"#i, "box_centered.act",1,0.2,10, 255, (PosX-400)-((Dx*2)*i), -742, PosZ, 0,0,0, 0,0,0 , true, 200, "Box 0", 0, 0,0,0,0, Mass/2);
}
Dx_box = GetBodyBBox("Body0ext1", 0);
Dy_box = GetBodyBBox("Body0ext1", 1);
Dz_box = GetBodyBBox("Body0ext1", 2);
for i=0 to 4 //unlike expected this for loop is not executed for i = 5!!
{
for j=0 to 6 //unlike expected this for loop is not executed for i = 5!!
{
s = ((i*5) + j);
Body = CreateRigidBody("domino"#s, "crate.act", 5, 5, 5, 255, PosX-2850, (-650)+((Dy_box*5)*i), ((PosZ-(Dz_box*4))*2.5)+((Dz_box*4)*j), 0,0,0, 0,0,0, false, 200, "Box 0", 0, 0,0,0,0,Mass/4);
}
}
} ]
Start[ ()
{
ShowPhysicsBBox(false);
Dx = GetBodyBBox(Body[0], 0);
Dy = GetBodyBBox(Body[0], 1);
Dz = GetBodyBBox(Body[0], 2);
TORQUE_FORCE = 340;
ApplyForce(Body[7], 0, 16, 0, true);
ApplyForce(Body[8], 0, 16, 0, true);
ApplyForce(Body[9], 0, 16, 0, true);
ApplyForce(Body[10], 0, 16, 0, true);
/*
ApplyForce(Body[7], 0, 10, 0, false);
ApplyForce(Body[8], 0, 10, 0, false);
ApplyForce(Body[9], 0, 10, 0, false);
ApplyForce(Body[10], 0, 14, 0, false);
*/
SetTorque(Body[3], X_FINAL_TORQUE, 0, Z_FINAL_TORQUE, true);
SetTorque(Body[4], X_FINAL_TORQUE, 0, Z_FINAL_TORQUE, true);
//SetTorque(Body[1], X_FINAL_TORQUE, 0, Z_FINAL_TORQUE, true);
//SetTorque(Body[2], X_FINAL_TORQUE, 0, Z_FINAL_TORQUE, true);
if(((self.leftmousekey_pressed=true)and((self.key_pressed=46)=false)and((self.key_pressed=33)=false))and(((self.key_pressed=58)=true)or((self.key_pressed=58)=false))and(((self.key_pressed=57)=true)or((self.key_pressed=57)=false)))
{
TORQUE_REAR=240;
X_FINAL_TORQUE = TORQUE_REAR*(B_PERC/100);
Z_FINAL_TORQUE = TORQUE_REAR*(A_PERC/100);
}
else
{
X_FINAL_TORQUE = -TORQUE_REAR*(B_PERC/100);
Z_FINAL_TORQUE = -TORQUE_REAR*(A_PERC/100);
if(((self.rightmousekey_pressed)and((self.key_pressed=46)=false)and((self.key_pressed=33)=false))and(((self.key_pressed=58)=true)or((self.key_pressed=58)=false))and(((self.key_pressed=57)=true)or((self.key_pressed=57)=false)))
{
TORQUE_REAR=240;
}
else
{
TORQUE_REAR=TORQUE_REAR*0.4;
if(TORQUE_REAR<2)
{
TORQUE_REAR=1;
}
}
}
if((self.key_pressed=57)=true)
{
TORQUE_FRONT = 80;
TORQUE_FRONT_L = 80;
}
else
{
if((self.key_pressed=58)=true)
{
TORQUE_FRONT = -80;
TORQUE_FRONT_L = -80;
}
else
{
TORQUE_FRONT = 0;
}
}
ApplyTwist(Body[5], 0, TORQUE_FRONT_L, 0, true);
ApplyTwist(Body[6], 0, TORQUE_FRONT, 0, true);
if((((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) < 0)and((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) > -100)) or((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) > 100))
{
TORQUE_FRONT_L = TORQUE_FRONT + 5;
}
else
{
if((((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) > 0)and((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) < 100)) or ((RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL) < -100))
{
TORQUE_FRONT_L = TORQUE_FRONT - 5;
}
if(RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL = 0)
{
TORQUE_FRONT_L = 0;
}
}
if(self.key_pressed=32)
{
ApplyImpulse(Body[0], -3, 30, -3, true);
}
if((self.key_pressed=46)=true)
{
ApplyTwist(Body[1], X_FINAL_TORQUE*4, 0, Z_FINAL_TORQUE*4, false);
ApplyTwist(Body[2], X_FINAL_TORQUE*4, 0, Z_FINAL_TORQUE*4, false);
//ApplyTwist(Body[3], X_FINAL_TORQUE*2, 0, Z_FINAL_TORQUE*4, false);
//ApplyTwist(Body[4], X_FINAL_TORQUE*2, 0, Z_FINAL_TORQUE*4, false);
if(X_FINAL_TORQUE > 0)
{
X_FINAL_TORQUE = -X_FINAL_TORQUE;
}
else
{
if(X_FINAL_TORQUE < 0)
{
X_FINAL_TORQUE = -X_FINAL_TORQUE;
}
else
{
X_FINAL_TORQUE = 0;
}
}
if(Z_FINAL_TORQUE > 0)
{
Z_FINAL_TORQUE = -Z_FINAL_TORQUE;
}
else
{
if(Z_FINAL_TORQUE < 0)
{
Z_FINAL_TORQUE = -Z_FINAL_TORQUE;
}
else
{
Z_FINAL_TORQUE = 0;
}
}
}
if(((self.key_pressed=33)=true)and((self.leftmousekey_pressed=true)or(self.leftmousekey_pressed=false)))
{
ApplyTwist(Body[3], X_FINAL_TORQUE*2, 0, Z_FINAL_TORQUE*2, false);
ApplyTwist(Body[4], X_FINAL_TORQUE*2, 0, Z_FINAL_TORQUE*2, false);
if(X_FINAL_TORQUE > 0)
{
X_FINAL_TORQUE = -X_FINAL_TORQUE;
}
else
{
if(X_FINAL_TORQUE < 0)
{
X_FINAL_TORQUE = -X_FINAL_TORQUE;
}
else
{
X_FINAL_TORQUE = 0;
}
}
if(Z_FINAL_TORQUE > 0)
{
Z_FINAL_TORQUE = -Z_FINAL_TORQUE;
}
else
{
if(Z_FINAL_TORQUE < 0)
{
Z_FINAL_TORQUE = -Z_FINAL_TORQUE;
}
else
{
Z_FINAL_TORQUE = 0;
}
}
}
/*
debug("Torque Direction - Debug");
//debug(self.key_pressed);
debug("Torque on Z Axis :" # A_PERC # " %");
debug("Torque on X Axis :" # B_PERC # " %");
debug("Overrall steer Wheel: " # OVERRALL_STEER # " %");
debug("Overrall steer Chassis: " # OVERRALL_STEER_CHASSIS # " %");
debug("Left Wheel steer: " # LEFT_STEER # " %");
debug("Right Wheel steer: " # RIGHT_STEER # " %");
debug("Left/Right Wheels Gap: " # Integer(RIGHT_WHEEL_LOCAL-LEFT_WHEEL_LOCAL));
debug("Left Mouse Button = accelerate");
debug("Right Mouse Button = decelerate / retro");
debug("Keyboard Arrows = Left/Right");
debug("8 = Change Camera");
debug("J = Apply an Upward Impulse");
debug("SPACE = HANDBRAKE");
*/
//calculemus 1 - For the torque forcfe applied on Z axis on the motor wheel
MY_YAW = Integer(LEFT_WHEEL_ATTACH.current_yaw / 0.0174532925199433);
MY_YAW_CHASSIS = Integer(CHASSIS_ATTACH.current_yaw / 0.0174532925199433);
LEFT_WHEEL_LOCAL = Integer(LEFT_WHEEL_ATTACH.current_yaw / 0.0174532925199433);
RIGHT_WHEEL_LOCAL = Integer(RIGHT_WHEEL_ATTACH.current_yaw / 0.0174532925199433);
if((MY_YAW > 0)and(MY_YAW <= 90))
{
B_PERC = Integer(100 /(90/(MY_YAW)));
A_PERC = Integer(100 - B_PERC);
}
if((MY_YAW > 90)and(MY_YAW <= 180))
{
A_PERC = -(Integer(100 /(90/(MY_YAW-90))));
B_PERC = Integer(100 + A_PERC);
}
if((MY_YAW > 180)and(MY_YAW <= 270))
{
B_PERC = -(Integer(100 /(90/(MY_YAW-180))));
A_PERC = -(Integer(100 + B_PERC));
}
if((MY_YAW > 270)and(MY_YAW <= 360))
{
A_PERC = Integer(100 /(90/(MY_YAW-270)));
B_PERC = -(Integer(100 - A_PERC));
}
if(MY_YAW = 0)
{
B_PERC=0;
A_PERC=100;
}
//calculemus 2 - For the Twist to be applied on Y axis on the steering wheel
MIX_STEER_LOCAL = OVERRALL_STEER_CHASSIS - OVERRALL_STEER;
if(MY_YAW>0)
{
OVERRALL_STEER = Integer(100 /(360/(MY_YAW)));
}
else
{
OVERRALL_STEER = 0;
}
if(MY_YAW_CHASSIS>0)
{
OVERRALL_STEER_CHASSIS = Integer(100 /(360/(MY_YAW_CHASSIS)));
}
else
{
OVERRALL_STEER_CHASSIS = 0;
}
if((RIGHT_WHEEL_LOCAL) > 0)
{
RIGHT_STEER = Integer(100 / (360/(RIGHT_WHEEL_LOCAL)));
}
else
{
RIGHT_STEER = 0;
}
if((LEFT_WHEEL_LOCAL) > 0)
{
LEFT_STEER = Integer(100 / (360/(LEFT_WHEEL_LOCAL)));
}
else
{
LEFT_STEER = 0;
}
MIX_STEER = (RIGHT_STEER - LEFT_STEER);
if((MIX_STEER > -25)or(MIX_STEER < 25))
{
MIX_STEER_GLOBAL = (MIX_STEER);
}
if(MIX_STEER < -75)
{
MIX_STEER_GLOBAL = (100+MIX_STEER);
}
if(MIX_STEER > 75)
{
MIX_STEER_GLOBAL = (100-MIX_STEER);
}
} ]
}