📄 soccer.rsg
字号:
; -*- mode: lisp; -*-(RubySceneGraph 0 1)(;; define constants, copy values from the ScriptServer Soccer namespace; (define $FieldLength (eval Soccer.FieldLength)) (define $FieldWidth (eval Soccer.FieldWidth)) (define $BorderExt (eval Soccer.BorderSize)) (define $GoalWidth (eval Soccer.GoalWidth)) (define $GoalDepth (eval Soccer.GoalDepth)) (define $GoalHeight (eval Soccer.GoalHeight)); height of the field ground plane (define $FieldBaseHeight 4) ; with of the side boundary (define $SideExt 2) ; height of the side boundary (define $SideHeight 1) ; height of a field line (define $LineHeight 0.2) (define $FieldMaterial matGreen) (define $BorderMaterial matYellow) (define $SideMaterial matGrey) (define $LineMaterial matWhite) (define $GoalMaterial matWhite); calc some helper vars (define $FieldBase (eval -1 * $FieldBaseHeight / 2.0)) (define $LineBase 0) (define $FieldHalfLength (eval $FieldLength / 2.0)) (define $FieldHalfWidth (eval $FieldWidth / 2.0)) (define $GoalHalfWidth (eval $GoalWidth / 2.0)) (define $GoalHalfHeight (eval $GoalHeight / 2.0)) (define $GoalHalfDepth (eval $GoalDepth / 2.0)) (define $HalfBorderExt (eval $BorderExt / 2.0)) (define $BorderLength (eval $FieldHalfLength + $HalfBorderExt)) (define $BorderWidth (eval $FieldHalfWidth + $HalfBorderExt)) (define $SideLength (eval $FieldHalfLength + $BorderExt)) (define $SideWidth (eval $FieldHalfWidth + $BorderExt)) (define $LineWidth (eval $FieldWidth - $LineHeight)) (define $BarDiameter $LineHeight) (define $BarRadius (eval $BarDiameter / 2.0));; construct playing field;; add lights (node Transform (setLocalPos -10 10 10) (node Light (setDiffuse 1.0 1.0 1.0 1.0) (setSpecular 0.1 0.1 0.1 1.0) (setAmbient 0.8 0.8 0.8 1.0) ) ); add lights (node Transform (setLocalPos 10 -10 10) (node Light (setDiffuse 1.0 1.0 1.0 1.0) (setSpecular 0.1 0.1 0.1 1.0) (setAmbient 0.0 0.0 0.0 1.0) ) ); create the base plane (node Transform (setLocalPos 0 0 $FieldBase) (node Box (setMaterial $FieldMaterial) (setExtents $FieldLength $FieldWidth $FieldBaseHeight) ) (node PlaneCollider (setParams 0 0 1.0 0) (node ContactJointHandler (setContactBounceMode false) (setContactSlipMode true) (setContactSlip 0.1 0.1) (setContactSoftERPMode true) (setContactSoftERP 0.2) (setContactSoftCFM true) (setContactSoftCFM 0.01) ) ) ); create box collider around playing field (node BoxCollider (setName FieldBox) (setPosition 0 0 20) (setBoxLengths $FieldLength $FieldWidth 40) (node RecorderHandler (setName recorder) ) ); create the left goal (node Transform (setName GoalBoxL) (setLocalPos (eval -1 * (eval $FieldHalfLength + $GoalHalfDepth)) 0 $GoalHalfHeight) (node BoxCollider (setBoxLengths $GoalDepth $GoalWidth $GoalHeight) (node ContactJointHandler (setContactBounceMode false) ) ) (node RecorderHandler (setName recorder) ) ) ; create the goal bar on top of the goal (left goal) (node Transform (setLocalPos (eval -1 * (eval $FieldHalfLength + $GoalHalfDepth) + $LineHeight) 0 (eval $GoalHeight + $BarRadius) ) (node Box (setExtents $GoalDepth (eval $GoalWidth - 0.1) $BarDiameter) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth (eval $GoalWidth - 0.1) $BarDiameter) ) ) ; create the left goal post (left goal) (node Transform (setLocalPos (eval -1 * (eval $FieldHalfLength + $GoalHalfDepth) + $LineHeight) (eval -1 * (eval $GoalHalfWidth + $BarRadius)) (eval $GoalHalfHeight + $BarRadius) ) (node Box (setExtents $GoalDepth $BarDiameter $GoalHeight) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth $BarDiameter $GoalHeight) ) ) ; create the right goal post (left goal) (node Transform (setLocalPos (eval -1 * (eval $FieldHalfLength + $GoalHalfDepth) + $LineHeight) (eval $GoalHalfWidth + $BarRadius) (eval $GoalHalfHeight + $BarRadius) ) (node Box (setExtents $GoalDepth $BarDiameter $GoalHeight) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth $BarDiameter $GoalHeight) ) ) ; create the right goal (node Transform (setName GoalBoxR) (setLocalPos (eval $FieldHalfLength + $GoalHalfDepth) 0 $GoalHalfHeight) (node BoxCollider (setBoxLengths $GoalDepth $GoalWidth $GoalHeight) (node ContactJointHandler (setContactBounceMode false) ) ) (node RecorderHandler (setName recorder) ) ) ; create the goal bar on top of the goal (right goal) (node Transform (setLocalPos (eval (eval $FieldHalfLength + $GoalHalfDepth) - $LineHeight) 0 (eval $GoalHeight + $BarRadius) ) (node Box (setExtents $GoalDepth (eval $GoalWidth - 0.1) $BarDiameter) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth (eval $GoalWidth - 0.1) $BarDiameter) ) ) ; create the left goal post (right goal) (node Transform (setLocalPos (eval (eval $FieldHalfLength + $GoalHalfDepth) - $LineHeight) (eval -1 * (eval $GoalHalfWidth + $BarRadius)) (eval $GoalHalfHeight + $BarRadius) ) (node Box (setExtents $GoalDepth $BarDiameter $GoalHeight) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth $BarDiameter $GoalHeight) ) ) ; create the right goal post (right goal) (node Transform (setLocalPos (eval (eval $FieldHalfLength + $GoalHalfDepth) - $LineHeight) (eval $GoalHalfWidth + $BarRadius) (eval $GoalHalfHeight + $BarRadius) ) (node Box (setExtents $GoalDepth $BarDiameter $GoalHeight) (setMaterial $GoalMaterial) ) (node BoxCollider (setBoxLengths $GoalDepth $BarDiameter $GoalHeight) ) ) ; create left side (node Transform (setLocalPos (eval -1 * $SideLength) 0 0) (node Box (setMaterial $SideMaterial) (setExtents $SideHeight (eval $FieldWidth + 2 * $BorderExt) $SideExt) ) (node PlaneCollider (setParams 1.0 0 0 (eval -1 * $SideLength)) ) ); create right side (node Transform (setLocalPos $SideLength 0 0) (node Box (setMaterial $SideMaterial) (setExtents $SideHeight (eval $FieldWidth + 2 * $BorderExt) $SideExt) ) (node PlaneCollider (setParams -1.0 0 0 (eval -1 * $SideLength)) ) ); create back side (node Transform (setLocalPos 0 $SideWidth 0) (node Box (setMaterial $SideMaterial) (setExtents (eval $FieldLength + 2 * $BorderExt) $SideHeight $SideExt) ) (node PlaneCollider (setParams 0 -1.0 0 (eval -1 * $SideWidth)) ) ); create front side (node Transform (setLocalPos 0 (eval -1 * $SideWidth) 0) (node Box (setMaterial $SideMaterial) (setExtents (eval $FieldLength + 2 * $BorderExt) $SideHeight $SideExt) ) (node PlaneCollider (setParams 0 1.0 0 (eval -1 * $SideWidth)) ) ); create middle line (node Transform (setLocalPos 0 0 $LineBase) (node Box (setExtents $LineHeight $LineWidth $LineHeight) (setMaterial $LineMaterial) ) ); create front line (node Transform (setLocalPos 0 (eval -1 * $FieldHalfWidth) $LineBase) (node Box (setExtents $FieldLength $LineHeight $LineHeight) (setMaterial $LineMaterial) ) ); create back line (node Transform (setLocalPos 0 $FieldHalfWidth $LineBase) (node Box (setExtents $FieldLength $LineHeight $LineHeight) (setMaterial $LineMaterial) ) ); create left line (node Transform (setLocalPos (eval -1 * $FieldHalfLength) 0 $LineBase) (node Box (setExtents $LineHeight $LineWidth $LineHeight) (setMaterial $LineMaterial) ) ); create right line (node Transform (setLocalPos $FieldHalfLength 0 $LineBase) (node Box (setExtents $LineHeight $LineWidth $LineHeight) (setMaterial $LineMaterial) ) ); create left outer field (node Transform (setLocalPos (eval -1 * $BorderLength) 0 $FieldBase) (node Box (setMaterial $BorderMaterial) (setExtents $BorderExt $FieldWidth $FieldBaseHeight) ) ); create right outer field (node Transform (setLocalPos $BorderLength 0 $FieldBase) (node Box (setMaterial $BorderMaterial) (setExtents $BorderExt $FieldWidth $FieldBaseHeight) ) ); create front outer field (node Transform (setLocalPos 0 (eval -1 * $BorderWidth) $FieldBase) (node Box (setMaterial $BorderMaterial) (setExtents (eval $FieldLength + 2 * $BorderExt) $BorderExt $FieldBaseHeight) ) ); create back outer field (node Transform (setLocalPos 0 $BorderWidth $FieldBase) (node Box (setMaterial $BorderMaterial) (setExtents (eval $FieldLength + 2 * $BorderExt) $BorderExt $FieldBaseHeight) ) );;;; add flags;;; mark the soccer field with 4 field flags (importScene rsg/agent/flag.rsg (eval -1 * $FieldHalfLength) $FieldHalfWidth 0 Flag_1_l matRed ) (importScene rsg/agent/flag.rsg (eval -1 * $FieldHalfLength) (eval -1 * $FieldHalfWidth) 0 Flag_2_l matRed ) (importScene rsg/agent/flag.rsg $FieldHalfLength $FieldHalfWidth 0 Flag_1_r matBlue ) (importScene rsg/agent/flag.rsg $FieldHalfLength (eval -1 * $FieldHalfWidth) 0 Flag_2_r matBlue ) ; mark the left goal (importScene rsg/agent/flag.rsg (eval -1 * $FieldHalfLength) (eval -1 * $GoalHalfWidth) 0 Goal_1_l matRed ) (importScene rsg/agent/flag.rsg (eval -1 * $FieldHalfLength) $GoalHalfWidth 0 Goal_2_l matRed ); mark the right goal (importScene rsg/agent/flag.rsg $FieldHalfLength (eval -1 * $GoalHalfWidth) 0 Goal_1_r matBlue ) (importScene rsg/agent/flag.rsg $FieldHalfLength $GoalHalfWidth 0 Goal_2_r matBlue ) ;;;; add the ball;; (importScene rsg/agent/ball.rsg) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -