[TeamTalk 325]: [861] trunk/usarsim: Import from USARSim.

tk@edam.speech.cs.cmu.edu tk at edam.speech.cs.cmu.edu
Mon Oct 29 14:21:45 EDT 2007


An HTML attachment was scrubbed...
URL: http://mailman.srv.cs.cmu.edu/pipermail/teamtalk-developers/attachments/20071029/6ef222c7/attachment-0001.html
-------------- next part --------------
Modified: trunk/usarsim/System/USARBot.ini
===================================================================
--- trunk/usarsim/System/USARBot.ini	2007-10-26 04:16:10 UTC (rev 860)
+++ trunk/usarsim/System/USARBot.ini	2007-10-29 18:21:44 UTC (rev 861)
@@ -186,7 +186,7 @@
 JointParts=(PartName="LeftRWheel",PartClass=class'USARModels.P2ATTire',DrawScale3D=(X=1.0,Y=0.55,Z=1.0),bSteeringLocked=True,bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=-0.20399979,X=-0.13199987,Z=0.13104749),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.0,X=0.12799986,Z=-0.21599978),PkgClass=Class'USARMisPkg.CameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F1",Position=(X=0.14499985,Y=-0.12999986,Z=-0.0),Direction=(Y=0.0,Z=-1.5707964,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F2",Position=(X=0.1849998,Y=-0.114999875,Z=-0.0),Direction=(Y=0.0,Z=-0.87264335,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F3",Position=(X=0.21999978,Y=-0.079999916,Z=-0.0),Direction=(Y=0.0,Z=-0.52356684,X=0.0))
@@ -226,7 +226,7 @@
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.0,X=0.12799986,Z=-0.21599978),PkgClass=Class'USARMisPkg.CameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=-0.04,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0)) ; Left Eye
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.04,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))  ; Right Eye
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F1",Position=(X=0.14499985,Y=-0.12999986,Z=-0.0),Direction=(Y=0.0,Z=-1.5707964,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F2",Position=(X=0.1849998,Y=-0.114999875,Z=-0.0),Direction=(Y=0.0,Z=-0.87264335,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F3",Position=(X=0.21999978,Y=-0.079999916,Z=-0.0),Direction=(Y=0.0,Z=-0.52356684,X=0.0))
@@ -263,7 +263,7 @@
 JointParts=(PartName="RearWheel",PartClass=class'USARModels.P2DXSmallTire',DrawScale3D=(X=1.0,Y=0.5,Z=1.0),bSteeringLocked=False,bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=0.0,X=-0.1919998,Z=0.167857),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.0,X=0.039999958,Z=-0.21599978),PkgClass=Class'USARMisPkg.CameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="CameraTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="CameraTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F1",Position=(X=0.114999875,Y=-0.12999986,Z=-0.0),Direction=(Y=0.0,Z=-1.5707964,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F2",Position=(X=0.15499984,Y=-0.114999875,Z=-0.0),Direction=(Y=0.0,Z=-0.87264335,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="F3",Position=(X=0.1899998,Y=-0.079999916,Z=-0.0),Direction=(Y=0.0,Z=-0.52356684,X=0.0))
@@ -298,7 +298,7 @@
 JointParts=(PartName="LeftRWheel",PartClass=class'USARModels.AtrvLTire',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),bSteeringLocked=True,bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=-0.2559997,X=-0.1939998,Z=0.1919998),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.0,X=0.124,Z=-0.14),PkgClass=Class'USARMisPkg.CameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight1",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight1",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.079999916,Z=0.06399993),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="S1",Position=(X=0.33495012,Y=-0.104390375,Z=-0.0),Direction=(Y=0.0,Z=-0.52356684,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="S2",Position=(X=0.34040916,Y=-0.049910426,Z=-0.0),Direction=(Y=0.0,Z=-0.26183134,X=0.0))
 Sensors=(ItemClass=class'USARBot.SonarSensor',ItemName="S3",Position=(X=0.3470606,Y=0.0,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
@@ -430,6 +430,28 @@
 Effecters=(ItemClass=class'USARBot.RFIDReleaser',ItemName="Gun",Position=(X=0.0,Y=0.0,Z=0.0095238),Direction=(x=0.0,y=0.0,z=0.0))
 Sensors=(ItemClass=class'USARBot.GroundTruth',ItemName="GroundTruth",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
 
+[USARBot.UnitLoader]
+bDebug=False
+Weight=50
+Payload=25
+ChassisMass=100.000000
+MaxTorque=32000.0
+MotorTorque=2400.0
+bMountByUU=False
+JointParts=(PartName="RightFWheel",PartClass=class'USARModels.UnitLoaderTireRight',DrawScale3D=(X=1,Y=1,Z=1),bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=0.30,X=0.30,Z=0.2),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
+JointParts=(PartName="LeftFWheel",PartClass=class'USARModels.UnitLoaderTireLeft',DrawScale3D=(X=1,Y=1,Z=1),bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=-0.30,X=0.30,Z=0.2),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
+JointParts=(PartName="RightRWheel",PartClass=class'USARModels.UnitLoaderTireRight',DrawScale3D=(X=1,Y=1,Z=1),bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=0.30,X=-0.30,Z=0.2),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
+JointParts=(PartName="LeftRWheel",PartClass=class'USARModels.UnitLoaderTireLeft',DrawScale3D=(X=1,Y=1,Z=1),bSuspensionLocked=true,Parent="",JointClass=class'KCarWheelJoint',ParentPos=(Y=-0.30,X=-0.30,Z=0.2),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
+JointParts=(PartName="Light",PartClass=class'USARModels.SpinLight',DrawScale3D=(X=1,Y=1,Z=1),Parent="",JointClass=class'USARBot.KSpinHinge',ParentPos=(Y=0.0,X=0.45,Z=-1.33),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
+MisPkgs=(PkgName="UnitLoaderTop",Location=(Y=0,X=-0.17,Z=-0.32),PkgClass=Class'USARMisPkg.UnitLoaderTop')
+MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0,X=0.6,Z=-.55),PkgClass=Class'USARMisPkg.CameraPanTilt')
+Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
+Sensors=(ItemClass=class'USARBot.GroundTruth',ItemName="GroundTruth",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
+Sensors=(ItemClass=class'USARBot.INSSensor',ItemName="INS",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(x=0.0,y=0.0,z=0.0))
+Sensors=(ItemClass=class'USARModels.SICKLMS',ItemName="Scanner1",Position=(X=0.875,Y=0.0,Z=0.1),Direction=(Y=0.0,Z=0.0,X=0.0))
+Sensors=(ItemClass=class'USARModels.SICKLMS',ItemName="Scanner2",Position=(X=-0.75,Y=0.0,Z=-0.3),Direction=(Y=0.0,Z=3.145,X=0.0))
+Effecters=(ItemClass=class'USARBot.Roller',ItemName="Roller",Parent="UnitLoaderTop_Link1",Position=(Y=0.0,X=0.0,Z=-0.1),Direction=(Y=0.0,Z=0.0,X=0.0))
+
 [USARBot.Hummer]
 bDebug=False
 Weight=50
@@ -445,7 +467,7 @@
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.00857142,X=0.7857136,Z=-1.047237),PkgClass=Class'USARMisPkg.CameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARModels.SICKLMS',ItemName="Scanner1",Position=(X=1.8133314,Y=0.00857142,Z=-0.5523804),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.00857142,X=1.7238077,Z=-0.7485706),Direction=(Y=-0.479369,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.00857142,X=1.7238077,Z=-0.7485706),Direction=(Y=-0.479369,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.GroundTruth',ItemName="GroundTruth",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
 
 [USARBot.SnowStorm]
@@ -466,7 +488,7 @@
 Sensors=(ItemClass=class'USARBot.GPSSensor',ItemName="GPS",Position=(X=0.0,Y=0.0,Z=-1.0),Direction=(x=0.0,y=0.0,z=0.0))
 Sensors=(ItemClass=class'USARBot.INSSensor',ItemName="Compass",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(X=0.0,Z=1.5664821,Y=0.0))
 Sensors=(ItemClass=class'USARModels.SICKLMS',ItemName="Scanner1",Position=(X=1.8133314,Y=0.00857142,Z=-0.5523804),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.00857142,X=1.7238077,Z=-0.7485706),Direction=(Y=-0.479369,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.00857142,X=1.7238077,Z=-0.7485706),Direction=(Y=-0.479369,Z=0.0,X=0.0))
 
 [USARBot.Sedan]
 bDebug=False
@@ -510,7 +532,7 @@
 MisPkgs=(PkgName="CameraPanTilt",Location=(Y=0.0,X=0.83809435,Z=-0.420571),PkgClass=Class'USARMisPkg.UnderwaterCameraPanTilt')
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="CameraPanTilt_Link2",Position=(Y=0.0,X=0.06,Z=-0.0088),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARModels.Pinger',ItemName="Scanner1",Position=(X=-0.9904752,Y=0.0,Z=0.42476144),Direction=(Y=-1.5707964,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.0,X=2.0857122,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="HeadLight",Parent="",Position=(Y=0.0,X=2.0857122,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=class'USARBot.GroundTruth',ItemName="GroundTruth",Position=(X=0.0,Y=0.0,Z=-0.0),Direction=(Y=0.0,Z=0.0,X=0.0))
 
 [USARBot.AirRobot]
@@ -573,7 +595,7 @@
 Sensors=(ItemClass=Class'USARBot.AccelerationSensor',Parent=,ItemName="ACC",Position=(X=0.0,Y=0.0,Z=-0.0),direction=(Y=0.0,Z=0.0,X=0.0))
 Sensors=(ItemClass=Class'USARBot.BallHSensor',Parent="HC",ItemName="BHS",Position=(X=0.076000005,Y=0.0,Z=0.016),direction=(Y=0.0,Z=0.0,X=0.0))
 Cameras=(ItemClass=Class'USARBot.AIBOCamera',Parent="HC",ItemName="Camera",Position=(X=0.076000005,Y=0.0,Z=0.016),direction=(Y=0.0,Z=0.0,X=0.0))
-Headlights=(ItemClass=None,Parent=,ItemName=,Position=(X=0.0,Y=0.0,Z=-0.0),direction=(Y=0.0,Z=0.0,X=0.0),LightGlow=True)
+Headlights=(ItemClass=None,Parent=,ItemName=,Position=(X=0.0,Y=0.0,Z=-0.0),direction=(Y=0.0,Z=0.0,X=0.0))
 
 [USARBot.QRIO]
 msgTimer=0.2
@@ -629,7 +651,7 @@
 JointParts=(PartName="RRTrack",PartClass=class'USARModels.SoryuTrack',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),bSteeringLocked=True,bSuspensionLocked=true,Parent="RearCarPitch",JointClass=class'KCarWheelJoint',ParentPos=(Y=0.054287,X=0.12143,Z=0.0),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
 JointParts=(PartName="LRTrack",PartClass=class'USARModels.SoryuTrack',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),bSteeringLocked=True,bSuspensionLocked=true,Parent="RearCarPitch",JointClass=class'KCarWheelJoint',ParentPos=(Y=-0.054287,X=0.12143,Z=0.0),ParentAxis=(Z=1.0),ParentAxis2=(Y=1.0),SelfPos=(Z=-0.0),SelfAxis=(Z=1.0),SelfAxis2=(Y=1.0))
 Cameras=(ItemClass=class'USARBot.RobotCamera',ItemName="Camera",Parent="FrontCarPitch",Position=(Y=0.0,X=0.15715,Z=0),Direction=(Y=0.0,Z=0.0,X=0.0))
-HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="FrontCarPitch",Position=(Y=0.0,X=0.15715,Z=0.0),Direction=(Y=-0.5,Z=0.0,X=0.0),LightGlow=True)
+HeadLights=(ItemClass=class'USARBot.USARHeadLight',ItemName="Headlight",Parent="FrontCarPitch",Position=(Y=0.0,X=0.15715,Z=0.0),Direction=(Y=-0.5,Z=0.0,X=0.0))
 
 [USARBot.Kurt2D]
 bDebug=False

Modified: trunk/usarsim/System/USARMisPkg.ini
===================================================================
--- trunk/usarsim/System/USARMisPkg.ini	2007-10-26 04:16:10 UTC (rev 860)
+++ trunk/usarsim/System/USARMisPkg.ini	2007-10-29 18:21:44 UTC (rev 861)
@@ -60,6 +60,12 @@
 Links=(LinkNumber=3,LinkClass=Class'USARMisPkg.TeleMaxAuxWheel',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),ParentLinkNumber=1,ParentMount="C",SelfMount="A")
 Links=(LinkNumber=4,LinkClass=Class'USARMisPkg.TeleMaxAuxWheel',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),ParentLinkNumber=1,ParentMount="D",SelfMount="A")
 
+;--------------------------------------------------------------------------------------------------------------
+; Table Mission Package for the UnitLoader
+;--------------------------------------------------------------------------------------------------------------
+[USARMisPkg.UnitLoaderTop]
+Links=(LinkNumber=1,LinkClass=Class'USARMisPkg.UnitLoaderTable',DrawScale3D=(X=1.0,Y=1.0,Z=1.0),ParentLinkNumber=-1,ParentMount="B",SelfMount="A")
+
 ;--------------------------------------------------------------------------------------------------------------
 ; Camera Pan/Tilt mission package used for the AirRobot
 ;--------------------------------------------------------------------------------------------------------------
@@ -284,6 +290,20 @@
 MaxRange=0
 
 ;--------------------------------------------------------------------------------------------------------------
+; UnitLoader Links used for the USARMisPkg.UnitLoader mission package
+;--------------------------------------------------------------------------------------------------------------
+[USARMisPkg.UnitLoaderTable]
+MountPoints=(Name="A",JointType="Scissor",Location=(X=0,Y=0,Z=-0.15),Orientation=(X=0.0,Y=-1.5707963267948966192313216916398,Z=0.0))
+MountPoints=(Name="B",JointType="Scissor",Location=(X=0,Y=0,Z=-1.15),Orientation=(X=0.0,Y=-1.5707963267948966192313216916398,Z=0.0))
+; max translation speed in m/s
+MaxSpeed=0.5
+MaxTorque=300
+; MinRange should always be zero - for prismatic joints
+; MaxRange defines how far along the Z-Axis the part can move - for prismatic joints
+MinRange=0
+MaxRange=0.8
+
+;--------------------------------------------------------------------------------------------------------------
 ; Camera Links used for the USARMisPkg.AirRobotCameraPanTilt mission package
 ;--------------------------------------------------------------------------------------------------------------
 [USARMisPkg.AirRobotCameraBase]

Modified: trunk/usarsim/USARBot/Classes/Effecter.uc
===================================================================
--- trunk/usarsim/USARBot/Classes/Effecter.uc	2007-10-26 04:16:10 UTC (rev 860)
+++ trunk/usarsim/USARBot/Classes/Effecter.uc	2007-10-29 18:21:44 UTC (rev 861)
@@ -1,43 +1,50 @@
-class Effecter extends Item abstract;
-
-function String GetConfHead()
-{
-	local string outstring;
-
-	outstring="CONF {Type "$ItemType$"}";
-
-	return outstring;
-}
-
-function String GetConfData()
-{
-	return "{Name "$ItemName$"}";
-}
-
-function string GetGeoHead()
-{
-	local string outstring;
-
-	outstring="GEO {Type "$ItemType$"}";
-
-	return outstring;
-}
-
-function string GetGeoData()
-{
-	local string outstring;
-
-	if (converter==None)
-		outstring="{Name "$ItemName$" Location "$(Location-Base.Location)$" Orientation "$(Rotation-Base.Rotation)$" Mount "$ItemMount$"}";
-	else 
-		outstring="{Name "$ItemName$" Location "$(converter.Str_LengthVectorFromUU(Location-Base.Location))
-		                       $" Orientation "$(converter.Str_RotatorFromUU(Rotation-Base.Rotation))
-		                             $" Mount "$ItemMount$"}";
-	return outstring;
-}
-
-defaultproperties
-{
-	ItemType="Effecter"
-	bHidden=true
+class Effecter extends Item abstract;
+
+var String confType;
+var float minVal;
+var float maxVal;
+
+function String GetConfHead()
+{
+	local string outstring;
+
+	outstring="CONF {Type "$ItemType$"}";
+
+	return outstring;
+}
+
+function String GetConfData()
+{	
+	if(confType=="")
+		return "{Name "$ItemName$"}";
+	else
+		return "{Name "$ItemName$"} {Cmd \""$confType$"\"} {MaxVal "$maxVal$"} {MinVal "$minVal$"}";
+}
+
+function string GetGeoHead()
+{
+	local string outstring;
+
+	outstring="GEO {Type "$ItemType$"}";
+
+	return outstring;
+}
+
+function string GetGeoData()
+{
+	local string outstring;
+
+	if (converter==None)
+		outstring="{Name "$ItemName$" Location "$(Location-Base.Location)$" Orientation "$(Rotation-Base.Rotation)$" Mount "$ItemMount$"}";
+	else 
+		outstring="{Name "$ItemName$" Location "$(converter.Str_LengthVectorFromUU(Location-Base.Location))
+		                       $" Orientation "$(converter.Str_RotatorFromUU(Rotation-Base.Rotation))
+		                             $" Mount "$ItemMount$"}";
+	return outstring;
+}
+
+defaultproperties
+{
+	ItemType="Effecter"
+	bHidden=true
 }
\ No newline at end of file

Modified: trunk/usarsim/USARBot/Classes/KRobot.uc
===================================================================
--- trunk/usarsim/USARBot/Classes/KRobot.uc	2007-10-26 04:16:10 UTC (rev 860)
+++ trunk/usarsim/USARBot/Classes/KRobot.uc	2007-10-29 18:21:44 UTC (rev 861)
@@ -1,2707 +1,2707 @@
-class KRobot extends KVehicle config(USARBot) abstract;
-
-////////////////////////////////////////////////
-//	PHYSICAL ROBOT
-////////////////////////////////////////////////
-
-// Part Definiens
-struct JointPart {
-    // Part
-    var() name                  PartName;
-    var() class<KActor>         PartClass;
-    var() vector                DrawScale3D;
-
-    // Joint
-    var() class<KConstraint>    JointClass;
-    var() bool                  bSteeringLocked;
-    var() bool                  bSuspensionLocked;
-    var() float                 BrakeTorque;
-    var() name                  Parent;
-    var() vector                ParentPos;
-    //var() rotator             ParentRot;
-    var() vector                ParentAxis;
-    var() vector                ParentAxis2;
-    var() vector                SelfPos;
-    var() vector                SelfAxis;
-    var() vector                SelfAxis2;
-};
-var config array<JointPart> JointParts;
-
-// Mission Package Data Structure
-struct MisPkg
-{
-    var() name              PkgName;
-    var() vector            Location;
-    var() class<MisPkgInfo> PkgClass;
-};
-var config array<MisPkg> MisPkgs;
-
-var array<MisPkgInfo> allMisPkgs; // Holds information about all the mission packages
-var array<MisPkgLinkInfo> allMisPkgsLinks; // Holds information about all the mission packages' links
-
-// Joint Control
-struct JointControl {
-	var byte	state; // Control state:
-                       // 0: no commands;
-                       // 1: new command;
-                       // 2: finished;
-	var float	steer; // Steer angle
-	var byte	order; // Specify the followed value.
-	var float	value; // Control value:
-                       // order =  0 , value=absolute angle;
-                       // order =  1 , value=absolute speed;
-                       // order =  2 , value=absolute torque;
-                       // order = 10 , value=relative angle;
-                       // order = 11 , value=relative speed;
-                       // order = 12 , value=relative torque;
-
-	var byte	lastCommandId; // There are new commands if lastCommandId != RS_JointsCommandId
-
-	//Variables used only by order = 0 control:
-	var float	angle; // the desired spining angle. used for order=0 control.
-	var int		startAng; // the start angle. used for compare spined angle.
-};
-var array<JointControl>		JointsControl;
-
-struct RobotSkin
-{
-    var string Name;
-    var texture Skin;
-    var string Comment;
-};
-var config array<RobotSkin> RobotSkins;
-
-//=======================
-// Networking RobotState
-//=======================
-//
-// Replication variables used to update Robot State on clients
-
-var KRBVec		RS_ChassisPosition;
-var Quat		RS_ChassisQuaternion;
-var KRBVec		RS_ChassisLinVel;
-var KRBVec		RS_ChassisAngVel;
-
-// dynamic array canot be replicated. So we must use static array here.
-// Here, to make the client and server have the same state, we directly
-// replicate the RigidBodyState. In the KCar class, it replicates the
-// RigidBodyState related to the chassis. I don't know why they use relative
-// state. I had tried to use relative state. But it involves vector and
-// quaternion calculation. We need to calculate the relative pos and relative
-// quat. For relative pos, it's just subtract part's (wheel's) pos from chassis
-// pos. For relative quat, we need to use the third axis, that's
-// Joints[i].KPriAxis1 Cross Joints[i].KSecAxis1), to calculate the relative
-// quat. However, I cannot figure out the correct calculating method for general
-// case, such as connect the y axis of the part to the x axis of the chassis
-// through a joint. ANYWAY, the simplest, most stable and straightforward method
-// is replicating all the (absolute) RigidBodyState. If the server is correct,
-// then the client should also be correct. The only weakness of this method is we
-// need to replicate more data.
-
-var KRBVec		RS_PartsPos[32];
-var Quat		RS_PartsQuat[32];
-var vector		RS_PartsLinVel[32];
-var vector		RS_PartsAngVel[32];
-
-var float		RS_JointsSteer[32];
-var byte		RS_JointsOrder[32];
-var float		RS_JointsValue[32];
-var byte		RS_JointsCommandId[32];
-
-// It denotes new replicated robot state. VehicleStateReceived will
-// load on client side these new params and set bNewRobotState to true.
-// Should be a boolean but it's a byte that increments at each replication,
-// otherwise replication mechanism would not work becasue bool var would be
-// always true on server (read the code for further details).
-// (using struct wuold be a possible solution to replication, but it's not necessary)
-var byte        RS_RobotUpdateId;
-
-//Used to change the robot skin
-var string      RS_skinName;
-var byte        RS_skinUpdateId;
-
-// -- End Replication variables
-
-// if CacheRobotUpdateId on client is different from RS_RobotUpdateId received from server
-// then ther's a new robot state to be loaded. At this point CacheRobotUpdateId is set
-// equal to RS_RobotUpdateId and bNewRobotState is set to true.
-var byte		CacheRobotUpdateId;
-
-var byte        CacheSkinUpdateId;
-
-// New RB params were loaded from replication and we must notify
-// Karma to update RB state on client side
-var bool		bNewRobotState;
-
-var bool		bNewCommand;        //only used on server in ProcessCarInput()
-var float		NextNetUpdateTime;	// Next time we should force an update of vehicles state.
-var float		MaxNetUpdateInterval;
-
-// Parts that build a robot (every part has a part a parent and a joint)
-var array<KActor>			Parts;
-var array<Actor>			Parents;
-var array<KConstraint>		Joints;
-
-//========================
-// KCarWheelJoint settings
-//========================
-
-// Steering
-var float       SteerPropGap;
-var float       SteerTorque;
-var float       SteerSpeed;
-
-// KCarWheelSuspension setting
-var float       SuspStiffness;
-var float       SuspDamping;
-var float       SuspHighLimit;
-var float       SuspLowLimit;
-var float       SuspRef;
-
-// The Max torque for all the joints
-var config float		MaxTorque;
-var config float        SafeForce;
-var config float		ProtectTime;
-
-// KDHinge Joint settings
-var config float        HingePropGap;
-
-// KCarWheelJoint defalut working torque
-var config float		MotorTorque;
-var config float		MotorSpeed;
-var float               uuMotorSpeed;
-var config float        maxSpinSpeed;
-
-//========================
-// KTire settings
-//========================
-
-var float       TireRollFriction;
-var float       TireLateralFriction;
-var float       TireRollSlip;
-var float       TireLateralSlip;
-var float       TireMinSlip;
-var float       TireSlipRate;
-var float       TireSoftness;
-var float       TireAdhesion;
-var float       TireRestitution;
-//========================
-
-// Robot parameters
-var config float		Payload;
-var config float		Weight;
-var KRigidBodyState		ChassisState;
-var KRigidBodyState		TeleportLocation; //!< Used to move the robot with MoveRobot() function.
-var config float		ChassisMass;
-var config InterpCurve	TorqueCurve; // Engine RPM in, Torque out.
-var float		HitSoundThreshold;
-var float WheelRadius;
-var vector Dimensions;
-
-// Flip
-var config float	FlipTorque;
-var config float	FlipTime;
-var float			FlipTimeLeft;
-
-//===============================
-// Items mounted on the robot
-//===============================
-
-// Item mount structure
-struct sItem {
-	var class<Actor>	ItemClass;
-	var name			Parent;
-	var string			ItemName;
-	var vector			Position;
-	var vector			Direction;
-	var rotator         uuDirection;
-};
-
-struct lightItem extends sItem
-{
-	var bool LightGlow;
-};
-
-// Sensors
-var config array<sItem> Sensors;
-var config float msgTimer; // Timer used for sending out sensor data
-var array<Sensor> SensorList;
-var array<byte>			ProcessedSensors;
-// Effecters
-var config array<sItem> Effecters;
-var array<Effecter>     EffecterList;
-
-// Battery
-var config int batteryLife;
-var int startTime;
-var int myLife;
-
-// Headlight
-var config array<lightItem>	 HeadLights;
-var array<USARHeadlight> HeadlightList;
-var bool 		 bHeadlightOn;
-var byte		 HeadlightItensity;
-
-// Camera
-var config array<sItem>	Cameras;
-var array<RobotCamera>  CamList;
-var RobotCamera		myCamera;
-var float		PanSpeed, TiltSpeed;
-
-// DrawHud Variables (to determine how many screens, which camera, etc...)
-var int viewportMode;  // 0 is single view, 1 is dualviewhorizontal, 2 is dualviewvertical, and 3 is quad view
-var int CamsToView[4]; // Store the camera indexes of the camera view to be displayed on the viewport
-var bool bDrawHud;
-
-//=========================
-//	Others
-//=========================
-
-// Variables used for programming
-var string RobotName;
-var config bool bDebug;
-var int			CurrentPart;
-var config bool bDisplayTeamBeacon;
-var float       lastTime, previousTime;
-var vector      lastLocation, previousLocation;
-var bool        bRobotBuilt;
-var name        fpsLogger;
-var config string ConverterClass;
-var USARConverter converter;
-var USARUtils utils;
-var USARDraw Draw;
-var config bool   bMountByUU;
-var config float  logging_period;
-var config bool   bBarCode;
-var float         old_time;
-var FileLog       PosLog;
-var FileLog       CollLog;
-var KSimParams oldKSP, newKSP;
-var name          tmpName; // Used to convert string to name
-
-//var bool bstats; //used for bump/touch events.
-//var int bump_touch_cnt;
-
-// MultiView Addon
-var int			ViewNum;	//Viewport number (assigned by Register()) used by DrawHUD to render the scene
-var MultiView   ViewManager; //the actual ViewManager actor (a bot)
-
-//#############################################################################
-//                              KROBOT CODE
-//#############################################################################
-
-replication
-{
-	// We replicate the robot state.
-
-	reliable if(Role == ROLE_Authority)
-		RS_ChassisPosition, RS_ChassisQuaternion, RS_ChassisLinVel, RS_ChassisAngVel,
-		RS_PartsPos, RS_PartsQuat, RS_PartsLinVel, RS_PartsAngVel,RS_RobotUpdateId;
-
-	reliable if(Role == ROLE_Authority)
-        RS_JointsSteer, RS_JointsOrder, RS_JointsValue, RS_JointsCommandId;
-
-	reliable if(Role == ROLE_Authority)
-		FlipTimeLeft, bHeadlightOn, RobotName;
-
-	reliable if(Role == ROLE_Authority)
-        RS_skinName, RS_skinUpdateId, ViewManager, ViewNum;
-}
-
-simulated event PreBeginPlay()
-{
-	local class<USARConverter> cClass;
-	local int i,j;
-
-	Super.PreBeginPlay();
-	utils = New class'USARUtils';
-        draw = New class'USARDraw';
-	bNoTeamBeacon=!bDisplayTeamBeacon;
-	cClass = class<USARConverter>(DynamicLoadObject(ConverterClass, class'Class'));
-	converter = new cClass;
-	ConvertParam(converter);
-	if (MotorTorque>MaxTorque)
-		MotorTorque = MaxTorque;
-
-        // Set up the mission package information (allocate space)
-        for(i=0; i<MisPkgs.length; i++)
-        {
-            allMisPkgs[i] = New MisPkgs[i].PkgClass;
-
-            for(j=0; j<allMisPkgs[i].Links.length; j++)
-            {
-                allMisPkgsLinks[i*allMisPkgs[i].Links.length+j] = New allMisPkgs[i].Links[j].LinkClass;
-            }
-        }
-
-	//Adjust Karma params
-   	KGetSimParams(oldKSP);
-	newKSP = oldKSP;
-
-	newKSP.Epsilon = 0.03;
-	newKSP.GammaPerSec = 0.5;
-//	newKSP.ContactSoftness = 0.001;
-    newKSP.MaxPenetration = 1;
-	newKSP.PenetrationScale = 5;
-
-	KSetSimParams(newKSP);
-}
-
-simulated function ConvertParam(USARConverter converter)
-{
-    local int i;
-
-    if (converter==None) {
-        uuMotorSpeed = MotorSpeed;
-    } else {
-        uuMotorSpeed = converter.SpinSpeedToUU(MotorSpeed);
-    }
-    if (!bMountByUU && converter!=None) {
-        for (i=0;i<JointParts.length;i++) {
-		    JointParts[i].ParentPos = converter.LengthVectorToUU(JointParts[i].ParentPos);
-		    JointParts[i].SelfPos = converter.LengthVectorToUU(JointParts[i].SelfPos);
-        }
-	for (i=0;i<Headlights.length;i++) {
-		    HeadLights[i].Position = converter.LengthVectorToUU(HeadLights[i].Position);
-		    HeadLights[i].uuDirection = converter.RotatorToUU(HeadLights[i].Direction);
-		}
-       	for (i=0;i<Cameras.length;i++) {
-		    Cameras[i].Position = converter.LengthVectorToUU(Cameras[i].Position);
-		    Cameras[i].uuDirection = converter.RotatorToUU(Cameras[i].Direction);
-		}
-       	for (i=0;i<Sensors.length;i++) {
-		    Sensors[i].Position = converter.LengthVectorToUU(Sensors[i].Position);
-		    Sensors[i].uuDirection = converter.RotatorToUU(Sensors[i].Direction);
-		}
-       	for (i=0;i<Effecters.length;i++) {
-		    Effecters[i].Position = converter.LengthVectorToUU(Effecters[i].Position);
-		    Effecters[i].uuDirection = converter.RotatorToUU(Effecters[i].Direction);
-		}
-    } else {
-	for (i=0;i<Headlights.length;i++) {
-		    HeadLights[i].uuDirection.Roll  = int(HeadLights[i].Direction.X);
-		    HeadLights[i].uuDirection.Pitch = int(HeadLights[i].Direction.Y);
-		    HeadLights[i].uuDirection.Yaw   = int(HeadLights[i].Direction.Z);
-		}
-       	for (i=0;i<Cameras.length;i++) {
-		    Cameras[i].uuDirection.Roll  = int(Cameras[i].Direction.X);
-		    Cameras[i].uuDirection.Pitch = int(Cameras[i].Direction.Y);
-		    Cameras[i].uuDirection.Yaw   = int(Cameras[i].Direction.Z);
-		}
-       	for (i=0;i<Sensors.length;i++) {
-		    Sensors[i].uuDirection.Roll  = int(Sensors[i].Direction.X);
-		    Sensors[i].uuDirection.Pitch = int(Sensors[i].Direction.Y);
-		    Sensors[i].uuDirection.Yaw   = int(Sensors[i].Direction.Z);
-		}
-       	for (i=0;i<Effecters.length;i++) {
-		    Effecters[i].uuDirection.Roll  = int(Effecters[i].Direction.X);
-		    Effecters[i].uuDirection.Pitch = int(Effecters[i].Direction.Y);
-		    Effecters[i].uuDirection.Yaw   = int(Effecters[i].Direction.Z);
-		}
-    }
-}
-
-// Register to the game
-function Register()
-{
-	local USARDeathMatch UsarGame;
-	local int Index;
-
- 	UsarGame = USARDeathMatch(Level.Game);
-	Index = UsarGame.Vehicles.length;
-	UsarGame.Vehicles.Insert(Index,1);
-	UsarGame.Vehicles[Index]=self;
-
-    //bstats = UsarGame.bstats;
-
-    old_time = startTime;
-
-    if(myCamera != none)
-    {
-        foreach AllActors(class'MultiView', ViewManager) break;
-    }
-    if(ViewManager != None)
-    	ViewNum = ViewManager.RegisterView();
-    else
-        ViewNum = -1;
-}
-
-// Unregister from the game
-function Unregister()
-{
-	local USARDeathMatch UsarGame;
-	local int i;
-
-	UsarGame = USARDeathMatch(Level.Game);
-	for (i=0;i<UsarGame.Vehicles.length;i++) {
-		if (UsarGame.Vehicles[i]==self) {
-			UsarGame.Vehicles.Remove(i,1);
-			break;
-		}
-	}
-    if(ViewManager != None)
-    {
-    	ViewManager.DeleteView(ViewNum);
-    }
-}
-
-// When new information is received, see if its new. If so, pass bits off the the wheels.
-// Each part will then update its rigid body position via the KUpdateState event.
-// JTODO: This is where clever unpacking would happen.
-simulated event VehicleStateReceived()
-{
-	local KTire Tire;
-	local KDPart Part;
-	local int i;
-	local bool UpdateParts;
-
-	/*
-	KGetRigidBodyState(ChassisState);
-	log("State<<"@ChassisState.Position.X at ChassisState.Position.Y@ChassisState.Position.Z);
-	log("       "@ChassisState.Quaternion.X at ChassisState.Quaternion.Y@ChassisState.Quaternion.Z at ChassisState.Quaternion.W);
-	log("       "@ChassisState.LinVel.X at ChassisState.LinVel.Y@ChassisState.LinVel.Z);
-	log("       "@ChassisState.AngVel.X at ChassisState.AngVel.Y@ChassisState.AngVel.Z@">>");
-
-	log("Receive<<"@RS_ChassisPosition.X at RS_ChassisPosition.Y@RS_ChassisPosition.Z);
-	log("         "@RS_ChassisQuaternion.X at RS_ChassisQuaternion.Y@RS_ChassisQuaternion.Z);
-	log("         "@RS_ChassisLinVel.X at RS_ChassisLinVel.Y@RS_ChassisLinVel.Z);
-	log("         "@RS_ChassisAngVel.X at RS_ChassisAngVel.Y@RS_ChassisAngVel.Z@">>");
-	*/
-
-	// Don't do anything if vehicle isn't started up.
-	if(!bRobotBuilt) {
-        if(Parts.length == 0)
-            return;
-        for (i=0; i<Parts.length; i++)
-            if (Parts[i] == None) return;
-        bRobotBuilt = true;
-	}
-
-    //Serves a skin update request
-    if(cacheSkinUpdateId != RS_skinUpdateId)
-    {
-        SetSkin(RS_skinName);
-        cacheSkinUpdateId = RS_skinUpdateId;
-    }
-
-    ///////////////////////////
-    // Update root chassis info
-    ///////////////////////////
-    if (CacheRobotUpdateId != RS_RobotUpdateId)
-    {
-        ChassisState.Position = RS_ChassisPosition;
-    	ChassisState.Quaternion = RS_ChassisQuaternion;
-    	ChassisState.LinVel = RS_ChassisLinVel;
-    	ChassisState.AngVel = RS_ChassisAngVel;
-    	UpdateParts = true;
-        CacheRobotUpdateId = RS_RobotUpdateId;
-        bNewRobotState = true;
-    }
-
-	// Figure out new state of parts
-	for (i=0;i<Parts.length;i++) {
-
-	    ///////////////////////////
-	    // Update Parts
-	    ///////////////////////////
-	    if (UpdateParts)
-	    {
-        	if (Parts[i].IsA('KTire'))
-            {
-        		Tire = KTire(Parts[i]);
-        		Tire.KGetRigidBodyState(Tire.ReceiveState);
-
-        		Tire.ReceiveState.Position = RS_PartsPos[i];
-        		Tire.ReceiveState.Quaternion = RS_PartsQuat[i];
-        		Tire.ReceiveState.LinVel = KRBVecFromVector(RS_PartsLinVel[i]);
-        		Tire.ReceiveState.AngVel = KRBVecFromVector(RS_PartsAngVel[i]);
-        		Tire.bReceiveStateNew = true;
-        	}
-        	else if (Parts[i].IsA('KDPart'))
-            {
-        		Part = KDPart(Parts[i]);
-        		Part.KGetRigidBodyState(Part.ReceiveState);
-
-        		Part.ReceiveState.Position = RS_PartsPos[i];
-        		Part.ReceiveState.Quaternion = RS_PartsQuat[i];
-        		Part.ReceiveState.LinVel = KRBVecFromVector(RS_PartsLinVel[i]);
-        		Part.ReceiveState.AngVel = KRBVecFromVector(RS_PartsAngVel[i]);
-        		Part.bReceiveStateNew = true;
-        	}
-		}
-
-	    ///////////////////////////
-	    // Update Commands
-	    ///////////////////////////
-		if (JointsControl[i].lastCommandId!=RS_JointsCommandId[i]) {
-			JointsControl[i].steer = RS_JointsSteer[i];
-			JointsControl[i].order = RS_JointsOrder[i];
-			JointsControl[i].value = RS_JointsValue[i];
-			JointsControl[i].state = 1;
-			JointsControl[i].lastCommandId = RS_JointsCommandId[i];
-		}
-	}
-}
-
-// This only update the chassis. The parts update themselves.
-simulated event bool KUpdateState(out KRigidBodyState newState)
-{
-	// This should never get called on the server - but just in case!
-	if(Role == ROLE_Authority)
-	{
-        if(!bNewRobotState)
-    		return false;
-    	else
-    	{
-    	   // bNewRobotState will be true on server only if we're trying
-    	   // to teleport the robot from one location to another.
-    	   newState = TeleportLocation;
-    	   bNewRobotState = false;
-    	   return true;
-    	}
-    }
-	// Apply received data as new position of car chassis.
-	newState = ChassisState;
-	bNewRobotState = false;
-	return true;
-}
-
-// Pack current state of whole car into the state struct, to be sent to the client.
-// Should only get called on the server.
-function PackState()
-{
-	local KRigidBodyState RBState;
-	local int i;
-	local bool UpdateParts;
-
-	if(!KIsAwake() && !bNewCommand)
-    	return; // Never send updates if physics is at rest
-
-    if(Level.TimeSeconds > NextNetUpdateTime)
-    {
-        ///////////////////////////
-        // Pack Chassis state
-        ///////////////////////////
-    	KGetRigidBodyState(RBState);
-    	RS_ChassisPosition = RBState.Position;
-    	RS_ChassisQuaternion = RBState.Quaternion;
-    	RS_ChassisLinVel = RBState.LinVel;
-    	RS_ChassisAngVel = RBState.AngVel;
-        UpdateParts = true;
-        RS_RobotUpdateId += 1;
-        NextNetUpdateTime = Level.TimeSeconds + MaxNetUpdateInterval;
-    }
-
-	// Get each part's state.
-	for (i=0;i<Parts.length;i++) {
-        ///////////////////////////
-        // Pack Parts State
-        ///////////////////////////
-        if(UpdateParts)
-        {
-    		Parts[i].KGetRigidBodyState(RBState);
-     		RS_PartsPos[i] = RBState.Position;
-       		RS_PartsQuat[i] = RBState.Quaternion;
-    		RS_PartsLinVel[i] = KRBVecToVector(RBState.LinVel);
-    		RS_PartsAngVel[i] = KRBVecToVector(RBState.AngVel);
-        }
-        ///////////////////////////
-        // Pack Commands State
-        ///////////////////////////
-
-        if (JointsControl[i].state==1)
-        {
-            RS_JointsCommandId[i]+=1;
-            RS_JointsSteer[i] = JointsControl[i].steer;
-            RS_JointsOrder[i] = JointsControl[i].order;
-            RS_JointsValue[i] = JointsControl[i].value;
-        }
-	}
-}
-
-function RobotCamera GetCamera(String name)
-{
-	local int i;
-
-	for (i=0;i<CamList.length;i++)
-		if (CamList[i].ItemName==name)
-			return CamList[i];
-
-	return myCamera;
-}
-
-simulated function Actor FindPart(name PartName)
-{
-	local int i;
-
-	if (PartName == '' || PartName == 'None') return self;
-
-	for (i=0;i<JointParts.length;i++) {
-		if (JointParts[i].PartName == PartName) {
-			return Parts[i];
-		}
-	}
-	return None;
-}
-
-simulated function int FindLinkParent(MisPkgInfo Package, int ParentLinkNumber)
-{
-    local int i;
-
-    for(i=0; i<Package.Links.length; i++)
-    {
-        if(Package.Links[i].LinkNumber == ParentLinkNumber)
-        {
-            return i;
-        }
-    }
-    return -1;
-}
-
-simulated function MisPkgLinkInfo getMisPkgLinkInfo(int PartNumber, string MisPkgName)
-{
-    local int i,j;
-
-    if(MisPkgName == "")
-    {
-        for(i=0; i<allMisPkgs.Length; i++)
-        {
-            for(j=0; j<allMisPkgs[i].Links.Length; j++)
-            {
-                if(allMisPkgs[i].Links[j].LinkNumber == PartNumber)
-                {
-                    return allMisPkgsLinks[i*allMisPkgs[i].Links.length+j];
-                }
-            }
-        }
-    }
-    else
-    {
-        for(i=0; i<MisPkgs.Length; i++)
-        {
-            if(string(MisPkgs[i].PkgName) == MisPkgName)
-            {
-                for(j=0; j<allMisPkgs[i].Links.Length; j++)
-                {
-                    if(allMisPkgs[i].Links[j].LinkNumber == PartNumber)
-                    {
-                       return allMisPkgsLinks[i*allMisPkgs[i].Links.length+j];
-                    }
-                }
-
-                break;
-            }
-        }
-    }
-
-    return None;
-}
-
-simulated function int FindMisPkgLinkIndex(Name LinkName)
-{
-    local int i;
-
-    for(i=0; i<Joints.Length; i++)
-    {
-        if(JointParts[i].PartName == LinkName)
-        {
-            return i;
-        }
-    }
-    return -1;
-}
-
-simulated function name getMisPkgPartName_str(string PkgName, int LinkNumber)
-{
-    tmpName = '';
-
-    if(LinkNumber >= 0)
-    {
-        SetPropertyText("tmpName", PkgName $ "_Link" $ string(LinkNumber));
-    }
-
-    return tmpName;
-}
-
-simulated function name getMisPkgPartName(Name PkgName, int LinkNumber)
-{
-    tmpName = '';
-
-    if(LinkNumber >= 0)
-    {
-        SetPropertyText("tmpName", string(PkgName) $ "_Link" $ string(LinkNumber));
-    }
-
-    return tmpName;
-}
-
-simulated function int getLinkNumber(string strLink)
-{
-    return int(Right(strLink, Len(strLink) - (InStr(strLink, "Link") + 4)));
-}
-
-simulated function string getMisPkgName(string strLink)
-{
-    return Left(strLink, InStr(strLink, "_Link"));
-}
-
-simulated function PostNetBeginPlay()
-{
-    local int i, j;
-    local Actor Parent;
-    local vector RotX, RotY, RotZ, offset;
-    local sItem headlight;
-
-    Super.PostNetBeginPlay();
-
-    // Turn the information about the mission packages into joint parts
-    for(i=0; i<allMisPkgs.Length; i++)
-    {
-        for(j=0; j<allMisPkgs[i].Links.length; j++)
-        {
-            JointParts.Insert(JointParts.length, 1); // Make space in the dynamic array to add a part from the mission package
-            JointParts[JointParts.length - 1].PartName = getMisPkgPartName(MisPkgs[i].PkgName, allMisPkgs[i].Links[j].LinkNumber);
-            JointParts[JointParts.length - 1].PartClass = allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].ModelClass;
-            JointParts[JointParts.length - 1].DrawScale3D = allMisPkgs[i].Links[j].DrawScale3D;
-            JointParts[JointParts.length - 1].bSteeringLocked = true;
-            JointParts[JointParts.length - 1].bSuspensionLocked = true;
-            JointParts[JointParts.length - 1].BrakeTorque = 0;
-            JointParts[JointParts.length - 1].Parent = getMisPkgPartName(MisPkgs[i].PkgName, allMisPkgs[i].Links[j].ParentLinkNumber);
-
-            if(Caps(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointJointType(allMisPkgs[i].Links[j].SelfMount)) == "REVOLUTE")
-            {
-                JointParts[JointParts.length - 1].JointClass = class'USARBot.KDHinge';
-
-                if(j == 0)
-                    JointParts[JointParts.length - 1].ParentPos = converter.LengthVectorToUU(MisPkgs[i].Location);
-                else
-                    JointParts[JointParts.length - 1].ParentPos = converter.LengthVectorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+FindLinkParent(allMisPkgs[i], allMisPkgs[i].Links[j].ParentLinkNumber)].getMountPointLocation(allMisPkgs[i].Links[j].ParentMount) * allMisPkgs[i].Links[FindLinkParent(allMisPkgs[i], allMisPkgs[i].Links[j].ParentLinkNumber)].DrawScale3D);
-
-                JointParts[JointParts.length - 1].ParentAxis = (Vect(0,0,-1) >> converter.RotatorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointOrientation(allMisPkgs[i].Links[j].SelfMount))) * Vect(-1,-1,-1);
-                JointParts[JointParts.length - 1].SelfAxis = JointParts[JointParts.length - 1].ParentAxis;
-                JointParts[JointParts.length - 1].ParentAxis2 = (Vect(0,1,0) >> converter.RotatorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointOrientation(allMisPkgs[i].Links[j].SelfMount))) * Vect(-1,-1,-1);
-                JointParts[JointParts.length - 1].SelfAxis2 = JointParts[JointParts.length - 1].ParentAxis2;
-
-                JointParts[JointParts.length - 1].SelfPos = converter.LengthVectorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointLocation(allMisPkgs[i].Links[j].SelfMount) * allMisPkgs[i].Links[j].DrawScale3D);
-            }
-            else if(Caps(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointJointType(allMisPkgs[i].Links[j].SelfMount)) == "PRISMATIC")
-            {
-                JointParts[JointParts.length - 1].JointClass = class'USARBot.KSlider';
-
-                if(j == 0)
-                    JointParts[JointParts.length - 1].ParentPos = converter.LengthVectorToUU(MisPkgs[i].Location - (allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointLocation(allMisPkgs[i].Links[j].SelfMount) * allMisPkgs[i].Links[j].DrawScale3D));
-                else
-                    JointParts[JointParts.length - 1].ParentPos = converter.LengthVectorToUU((allMisPkgsLinks[i*allMisPkgs[i].Links.length+FindLinkParent(allMisPkgs[i], allMisPkgs[i].Links[j].ParentLinkNumber)].getMountPointLocation(allMisPkgs[i].Links[j].ParentMount) * allMisPkgs[i].Links[FindLinkParent(allMisPkgs[i], allMisPkgs[i].Links[j].ParentLinkNumber)].DrawScale3D) - (allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointLocation(allMisPkgs[i].Links[j].SelfMount) * allMisPkgs[i].Links[j].DrawScale3D));
-
-                JointParts[JointParts.length - 1].ParentAxis = (Vect(0,1,0) >> converter.RotatorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointOrientation(allMisPkgs[i].Links[j].SelfMount))) * Vect(-1,-1,-1);
-                JointParts[JointParts.length - 1].SelfAxis = JointParts[JointParts.length - 1].ParentAxis;
-                JointParts[JointParts.length - 1].ParentAxis2 = (Vect(1,0,0) >> converter.RotatorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointOrientation(allMisPkgs[i].Links[j].SelfMount))) * Vect(-1,-1,-1);
-                JointParts[JointParts.length - 1].SelfAxis2 = JointParts[JointParts.length - 1].ParentAxis2;
-
-                JointParts[JointParts.length - 1].SelfPos = converter.LengthVectorToUU(-allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].MaxRange * (Vect(0,0,-1) >> converter.RotatorToUU(allMisPkgsLinks[i*allMisPkgs[i].Links.length+j].getMountPointOrientation(allMisPkgs[i].Links[j].SelfMount))));
-            }
-        }
-    }
-
-    ////////////////////////////////
-    // Create physical robot
-    ////////////////////////////////
-    for (CurrentPart=0;CurrentPart<JointParts.length;CurrentPart++) {
-        // Find parent
-        Parent = FindPart(JointParts[CurrentPart].Parent);
-        if (Parent==None) continue;
-        Parents[CurrentPart] = Parent;
-        if (bDebug) log("<"@Parent at Parent.Location@Parent.Rotation@">");
-        GetAxes(Parent.Rotation,RotX,RotY,RotZ);
-
-        //Spawn Joint (any KConstraint class)
-        Joints[CurrentPart] = spawn(JointParts[CurrentPart].JointClass,Parent);
-
-        if (Joints[CurrentPart].IsA('KSlider')) {
-        	  KSlider(Joints[CurrentPart]).init1(Parent,JointParts[CurrentPart].ParentPos,JointParts[CurrentPart].ParentAxis,JointParts[CurrentPart].ParentAxis2,
-        	                                     JointParts[CurrentPart].SelfPos,JointParts[CurrentPart].SelfAxis,JointParts[CurrentPart].SelfAxis2);
-            offset = JointParts[CurrentPart].ParentPos - JointParts[CurrentPart].SelfPos;
-            Parts[CurrentPart] = spawn(JointParts[CurrentPart].PartClass, KSlider(Joints[CurrentPart]).Part2,, Parent.Location + offset.X*RotX + offset.Y*RotY + offset.Z*RotZ,Parent.Rotation);
-            Parts[CurrentPart].SetDrawScale3D(JointParts[CurrentPart].DrawScale3D);
-            log("Init"@Joints[CurrentPart]);
-            KSlider(Joints[CurrentPart]).init2(JointParts[CurrentPart].ParentPos,JointParts[CurrentPart].ParentAxis,JointParts[CurrentPart].ParentAxis2,
-                                               Parts[CurrentPart],JointParts[CurrentPart].SelfPos,JointParts[CurrentPart].SelfAxis,JointParts[CurrentPart].SelfAxis2);
-        } else {
-            //Spawn Part
-            offset = JointParts[CurrentPart].ParentPos - JointParts[CurrentPart].SelfPos;
-            Parts[CurrentPart] = spawn(JointParts[CurrentPart].PartClass, Parent,, Parent.Location + offset.X*RotX + offset.Y*RotY + offset.Z*RotZ,Parent.Rotation);
-            Parts[CurrentPart].SetDrawScale3D(JointParts[CurrentPart].DrawScale3D);
-            
-            //Set primary constraint params
-            Joints[CurrentPart].KConstraintActor1 = Parent;
-            Joints[CurrentPart].KPos1 = JointParts[CurrentPart].ParentPos/50;
-            Joints[CurrentPart].KPriAxis1 = JointParts[CurrentPart].ParentAxis;
-            if (VSize(JointParts[CurrentPart].ParentAxis2)>0)
-                Joints[CurrentPart].KSecAxis1 = JointParts[CurrentPart].ParentAxis2;
-            
-            //Set secondary constraint params
-            Joints[CurrentPart].KConstraintActor2 = Parts[CurrentPart];
-            Joints[CurrentPart].KPos2 = JointParts[CurrentPart].SelfPos/50;
-            Joints[CurrentPart].KPriAxis2 = JointParts[CurrentPart].SelfAxis;
-            if (VSize(JointParts[CurrentPart].SelfAxis2)>0)
-                Joints[CurrentPart].KSecAxis2 = JointParts[CurrentPart].SelfAxis2;
-
-            Joints[CurrentPart].SetPhysics(PHYS_Karma);
-        }
-
-		if (ClassIsChildOf(JointParts[CurrentPart].PartClass,class'KTire') &&
-		    Joints[CurrentPart].IsA('KCarWheelJoint')) {
-			(KTire(Parts[CurrentPart])).WheelJoint = KCarWheelJoint(Joints[CurrentPart]);
-			(KTire(Parts[CurrentPart])).WheelJoint.KUpdateConstraintParams();
-			if (Joints[CurrentPart].IsA('KSCarWheelJoint')) {
-				KSCarWheelJoint(Joints[CurrentPart]).KForceThreshold = SafeForce;
-				KSCarWheelJoint(Joints[CurrentPart]).StallTime = ProtectTime;
-			}
-		} else if (ClassIsChildOf(JointParts[CurrentPart].PartClass,class'USARBot.KDPart'))
-			(KDPart(Parts[CurrentPart])).setJoint(Joints[CurrentPart]);
-
-		if(Role != ROLE_Authority)
-			KarmaParams(Parts[CurrentPart].KParams).bDestroyOnSimError = False;
-	}
-	if (bDebug) {
-		//DumpPackages();
-		DumpJoints();
-	}
-
-	// Initially make sure parameters are sync'ed with Karma
-	KVehicleUpdateParams();
-
-        // For KImpact event
-        KSetImpactThreshold(HitSoundThreshold);
-
-	// If this is not 'authority' version - don't destroy it if there is a problem.
-	// The network should sort things out.
-	if(Role != ROLE_Authority)
-		KarmaParams(KParams).bDestroyOnSimError = False;
-
-	// init the array size
-	JointsControl.length = JointParts.length;
-
-	/////////////////////////////////
-	// Mount Items
-	/////////////////////////////////
-
-	// Mount headlights
-	for (i=0;i<Headlights.length;i++)
-        {
-		headlight=Headlights[i]; //spawn won't take variables from lightItem, so temp sItem needs to be used
-		
-		Parent = FindPart(headlight.Parent);
-		if (Parent!=None)
-		{
-			GetAxes(Parent.Rotation,RotX,RotY,RotZ);
-			HeadlightList[i] = USARHeadlight(spawn(headlight.ItemClass,
-							  Parent,,
-						      Parent.Location + headlight.Position.X * RotX + headlight.Position.Y * RotY + headlight.Position.Z * RotZ,));
-			HeadlightList[i].SetBase(Parent);
-			HeadlightList[i].SetRelativeRotation(headlight.uuDirection);
-			if(HeadLights[i].LightGlow)HeadlightList[i].spawnGlow();
-		}
-	}
-
-	// Mount cameras
-	for (i=0;i<Cameras.length;i++)
-        {
-                if(i < 4)
-                    CamsToView[i] = i;
-
-		Parent = FindPart(Cameras[i].Parent);
-		if (Parent==None) continue;
-		    GetAxes(Parent.Rotation,RotX,RotY,RotZ);
-		CamList[i] = RobotCamera(spawn(Cameras[i].ItemClass, Parent,,
-									   Parent.Location + Cameras[i].Position.X * RotX + Cameras[i].Position.Y * RotY + Cameras[i].Position.Z * RotZ,
-							 ));
-		CamList[i].init(Cameras[i].ItemName,Parent,Cameras[i].Position,Cameras[i].uuDirection,self,Cameras[i].Parent);
-	}
-	if (CamList.length>0)
-	{
- 	        if(CamList.Length == 1)
-	            viewportMode = 0;
-                else
-                    viewportMode = 1;
-
-		myCamera = CamList[0];
-	}
-
-	// Mount sensors
-	for (i=0;i<Sensors.length;i++) {
-		Parent = FindPart(Sensors[i].Parent);
-		if (Parent==None) continue;
-	    GetAxes(Parent.Rotation,RotX,RotY,RotZ);
-		SensorList[i] = Sensor(spawn(Sensors[i].ItemClass,
-						      Parent,,
-						      Parent.Location + Sensors[i].Position.X * RotX + Sensors[i].Position.Y * RotY + Sensors[i].Position.Z * RotZ,
-						      ));
-		SensorList[i].init(Sensors[i].ItemName,Parent,Sensors[i].Position,Sensors[i].uuDirection,self,Sensors[i].Parent);
-		ProcessedSensors[i]=0;
-	}
-
-	// Mount Effecters
-	for (i=0;i<Effecters.length;i++) {
-		Parent = FindPart(Effecters[i].Parent);
-		if (Parent==None) continue;
-	    GetAxes(Parent.Rotation,RotX,RotY,RotZ);
-		EffecterList[i] = Effecter(spawn(Effecters[i].ItemClass,
-						      Parent,,
-						      Parent.Location + Effecters[i].Position.X * RotX + Effecters[i].Position.Y * RotY + Effecters[i].Position.Z * RotZ,
-						      ));
-		EffecterList[i].init(Effecters[i].ItemName,Parent,Effecters[i].Position,Effecters[i].uuDirection,self,Effecters[i].Parent);
-	}
-
-	Register();
-	SetTimer(msgTimer,true);
-	startTime = Level.TimeSeconds;
-	lastTime = Level.TimeSeconds;
-	lastLocation = Location;
-
-	//If there's an FPSLogger triggers it
-	fpsLogger = 'FPSLog';
-	TriggerEvent(fpsLogger, self, None);
-
-}
-
-simulated function SetSkin(string skinName)
-{
-	local int i;
-	local texture skinTexture;
-
-    for(i = 0; i < RobotSkins.Length; i++)
-        if(skinName ~= RobotSkins[i].Name)
-        {
-            skinTexture = RobotSkins[i].Skin;
-            break;
-        }
-    if((i > 0) && (i == RobotSkins.Length))
-         skinTexture = RobotSkins[0].Skin;    //i>0 assure [0] element existence
-
-    if(skinTexture != none)
-    {
-        Skins[0] = skinTexture;
-    	for (i = 0; i < Parts.Length; i++)
-    	{
-    		Parts[i].Skins[0] = skinTexture;
-    	}
-	}
-
-	if(Role == ROLE_Authority)
-	{
-    	RS_skinName = skinName;
-    	RS_skinUpdateId++;
-    }
-}
-
-// dump joints
-function DumpJoints() {
-	local int i;
-
-	for (i=0;i<Joints.length;i++)
-		log(i@"Name"@JointParts[i].PartName@"Part"@Parts[i]@"Joint"@Joints[i]);
-}
-
-simulated event Destroyed()
-{
-	local int i;
-
-	// Destory mounted items
-	for (i=0;i<SensorList.length;i++)	SensorList[i].Destroy();
-	for (i=0;i<EffecterList.length;i++)	EffecterList[i].Destroy();
-	for (i=0;i<CamList.length;i++)	        CamList[i].Destroy();
-
-	for (i=0;i<HeadlightList.length;i++) {
-		if(HeadlightList[i].bGlowOn) HeadlightList[i].HeadlightGlow.Destroy();
-		HeadlightList[i].Destroy(); }
-
-	// Destory physical robot
-	for (i=0;i<Parts.length;i++) {
-		if (Parts[i]!=none) {
-			Joints[i].Destroy();
-			Parts[i].Destroy();
-		}
-	}
-	
-	// Destroy information about mission packages
-	while(allMisPkgs.Length!=0)
-	{
-	    allMisPkgs[allMisPkgs.Length-1].Delete();
-            allMisPkgs.Remove(allMisPkgs.Length-1, 1);
-        }
-
-	// Destroy information about mission packages' links
-	while(allMisPkgsLinks.Length!=0)
-	{
-	    allMisPkgsLinks[allMisPkgsLinks.Length-1].Delete();
-            allMisPkgsLinks.Remove(allMisPkgsLinks.Length-1, 1);
-        }
-
-	Unregister();
-	converter = None;
-        utils = None;
-        Draw = None;
- 	UntriggerEvent(fpsLogger, self, None);
-	KSetSimParams(oldKSP);
-	if (CollLog!=None)
-		CollLog.CloseLog();
-	if (PosLog!=None)
-		PosLog.CloseLog();
-	Super.Destroyed();
-}
-
-// For drawing the camera viewports, possible noise, and the bar code
-simulated function DrawHud(Canvas C)
-{
-    // If we are using the camera view (bDrawHud is set in ViewTestPlayerController.uc)
-    if(bDrawHud)
-    {
-        // If the robot does not have any more battery
-        if (myLife==batteryLife)
-        {
-            Draw.NoPower(C, ERenderStyle.STY_Particle, 0, 0, C.SizeX, C.SizeY, C.SizeX/2-80, C.SizeY/2);
-        }
-        // Here, we draw the viewports
-        else
-        {
-            Draw.KRobotCameras(C, viewportMode, CamsToView, ERenderStyle.STY_Particle, CamList, USARRemoteBot(Controller).ShowCamName, USARRemoteBot(Controller).ShowCamTime, Level.TimeSeconds-startTime);
-            super.DrawHud(C);
-        }
-    }
-
-    if (bBarCode)
-        Draw.BarCode(C, RobotName, 0, C.SizeY-2);
-
-}
-
-// Call this if you change any parameters (tire, suspension etc.) and they
-// will be passed down to each wheel/joint.
-simulated event KVehicleUpdateParams()
-{
-    local KTire Part;
-    local KCarWheelJoint WheelJ;
-    local KDHinge HingeJ;
-    local int i;
-    local MisPkgLinkInfo aMisPkgLink;
-
-    Super.KVehicleUpdateParams();
-
-    for (i=0;i<Parts.length;i++)
-    {
-        if (Joints[i].IsA('KCarWheelJoint'))
-        {
-            WheelJ=KCarWheelJoint(Joints[i]);
-            WheelJ.bKSteeringLocked = JointParts[i].bSteeringLocked;
-
-            WheelJ.KProportionalGap = SteerPropGap;
-            WheelJ.KMaxSteerTorque = SteerTorque;
-            WheelJ.KMaxSteerSpeed = SteerSpeed;
-            WheelJ.KBraking = JointParts[i].BrakeTorque;
-
-            if (JointParts[i].bSuspensionLocked) {
-                WheelJ.KSuspHighLimit = 0.001;
-                WheelJ.KSuspLowLimit = -0.001;
-                WheelJ.KSuspStiffness = 200.0;
-                WheelJ.KSuspDamping = 100.0;
-            }
-            else {
-                WheelJ.KSuspHighLimit = SuspHighLimit;
-                WheelJ.KSuspLowLimit = SuspLowLimit;
-                WheelJ.KSuspStiffness = SuspStiffness;
-                WheelJ.KSuspDamping = SuspDamping;
-            }
-            // Sync params with Karma.
-            WheelJ.KUpdateConstraintParams();
-        }
-        else if(Joints[i].IsA('KDHinge'))
-        {
-            HingeJ = KDHinge(Joints[i]);
-            
-            aMisPkgLink = getMisPkgLinkInfo(getLinkNumber(string(JointParts[i].PartName)), getMisPkgName(string(JointParts[i].PartName)));
-            if(aMisPkgLink != None)
-            {
-                HingeJ.KMaxTorque = aMisPkgLink.MaxTorque;
-                HingeJ.KDesiredAngVel = converter.SpinSpeedToUU(aMisPkgLink.MaxSpeed);
-            }
-            else
-            {
-                HingeJ.KMaxTorque = MotorTorque;
-                HingeJ.KDesiredAngVel = uuMotorSpeed;
-            }
-
-            HingeJ.KProportionalGap = HingePropGap;
-            HingeJ.KHingeType = HT_CONTROLLED;
-            // Sync params with Karma.
-            if (Joints[i].IsA('KSlider'))
-                KSlider(Joints[i]).UpdateConstraint();
-            else
-                HingeJ.KUpdateConstraintParams();
-        }
-
-        if (Parts[i].IsA('KTire')) 
-        {
-            Part=KTire(Parts[i]);
-            Part.RollFriction = TireRollFriction;
-            Part.LateralFriction = TireLateralFriction;
-            Part.RollSlip = TireRollSlip;
-	    Part.LateralSlip = TireLateralSlip;
-	    Part.MinSlip = TireMinSlip;
-	    Part.SlipRate = TireSlipRate;
-	    Part.Softness = TireSoftness;
-	    Part.Adhesion = TireAdhesion;
-	    Part.Restitution = TireRestitution;
-        }
-    }
-
-    KSetMass(ChassisMass);
-}
-
-// Possibly apply force to flip robot over.
-simulated event KApplyForce(out vector Force, out vector Torque)
-{
-	local float torqueScale;
-	local vector worldForward, worldUp, worldRight, torqueAxis;
-
-	if(FlipTimeLeft == 0)
-		return;
-
-	worldForward = vect(-1, 0, 0) >> Rotation;
-	worldUp = vect(0, 0, 1) >> Rotation;
-	worldRight = vect(0, 1, 0) >> Rotation;
-
-	torqueAxis = Normal(worldUp Cross vect(0, 0, 1));
-
-	// Torque scaled by how far over we are.
-	// This will be between 0 and PI - so convert to between 0 and 1.
-	torqueScale = Acos(worldUp Dot vect(0, 0, 1))/3.1416;
-
-	Torque = FlipTorque * torqueScale * torqueAxis;
-}
-
-function StartFlip(Pawn Pusher)
-{
-	//local vector toPusher, worldUp;
-
-	// if we are already flipping the car - dont do it again!
-	if(FlipTimeLeft > 0)
-		return;
-
-	FlipTimeLeft = FlipTime; // Start the flip on the server
-	USARRemoteBot(Controller).Flip = false;
-}
-
-//given a name and return the correspond jointpart's id
-function int FindJointPartId(string jname)
-{
-	local int i;
-
-	for (i=0;i<JointParts.length;i++)
-		if (string(JointParts[i].PartName) == jname) return i;
-	return -1;
-}
-
-// Get all the children IDs of a part
-function array<int> FindChildren(int idx)
-{
-	local array<int> res;
-	local int i;
-	local name myName,pName;
-
-	//invalid idx is treated as the robot platform (hard mount).
-	if (idx<0 || idx>=JointParts.length)
-		myName='None';
-	//iterate JointParts to find all the children
-	myName = JointParts[idx].PartName;
-	for (i=0;i<JointParts.length;i++) {
-		pName = JointParts[i].Parent;
-		if (pName=='') pName='None';

@@ Diff output truncated at 60000 characters. @@


More information about the TeamTalk-developers mailing list