SceneGraphRS.java revision 5476b450e50939940dcf3f15c92335cee2fc572d
1094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk/* 2094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * Copyright (C) 2008 The Android Open Source Project 3094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * 4094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * you may not use this file except in compliance with the License. 6094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * You may obtain a copy of the License at 7094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * 8094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * 10094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * See the License for the specific language governing permissions and 14094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk * limitations under the License. 15094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk */ 16094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 1727f50523a45100f3b4861762b6263e0b9ba6e22eAlex Sakhartchoukpackage com.android.modelviewer; 18094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 19094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport java.io.Writer; 20094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport java.util.Map; 21094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport java.util.Vector; 22094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 23094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.content.res.Resources; 24094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.renderscript.*; 25094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.renderscript.Element.Builder; 26094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 27094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.util.Log; 28094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 29094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 30094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukpublic class SceneGraphRS { 31094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 32094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private final int STATE_LAST_FOCUS = 1; 33094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 34094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mWidth; 35094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mHeight; 36094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mRotation; 37094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 38094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public SceneGraphRS() { 39094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 40094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 41094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res, int width, int height) { 42094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRS = rs; 43094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRes = res; 44094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mWidth = width; 45094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mHeight = height; 46094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation = 0; 47094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initRS(); 48094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 49094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 50094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Resources mRes; 51094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private RenderScriptGL mRS; 52094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Sampler mSampler; 53094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramStore mPSBackground; 54094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramFragment mPFBackground; 55094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramVertex mPVBackground; 56094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramVertex.MatrixAllocation mPVA; 57094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 58094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mGridImage; 59094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mAllocPV; 60094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 61094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Mesh mMesh; 62094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 63094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Font mItalic; 64094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mTextAlloc; 65094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 6693a958f0958b852c0a2c7b940c74eeae283ba02bStephen Hines private ScriptC_scenegraph mScript; 6793a958f0958b852c0a2c7b940c74eeae283ba02bStephen Hines private ScriptC_transform mTransformScript; 68094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 69094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mLastX; 70094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mLastY; 71094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 72094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public void touchEvent(int x, int y) { 73094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int dx = mLastX - x; 74ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (Math.abs(dx) > 50 || Math.abs(dx) < 3) { 75094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk dx = 0; 76094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 77094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 78094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation -= dx; 79ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (mRotation > 360) { 80094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation -= 360; 81094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 82ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (mRotation < 0) { 83094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation += 360; 84094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 85094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 86094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRotate(-(float)mRotation); 87094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 88094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mLastX = x; 89094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mLastY = y; 90094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 91094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 92094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPFS() { 9332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(mRS); 94094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 95094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk b.setDepthFunc(ProgramStore.DepthFunc.LESS); 96094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk b.setDitherEnable(false); 97094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk b.setDepthMask(true); 98094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPSBackground = b.create(); 99094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 100094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPFSBackground(mPSBackground); 101094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 102094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 103094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPF() { 104094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk Sampler.Builder bs = new Sampler.Builder(mRS); 105094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk bs.setMin(Sampler.Value.LINEAR); 106094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk bs.setMag(Sampler.Value.LINEAR); 107094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk bs.setWrapS(Sampler.Value.CLAMP); 108db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk bs.setWrapT(Sampler.Value.CLAMP); 109094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mSampler = bs.create(); 110094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 111094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk ProgramFragment.Builder b = new ProgramFragment.Builder(mRS); 112094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk b.setTexture(ProgramFragment.Builder.EnvMode.REPLACE, 113094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk ProgramFragment.Builder.Format.RGBA, 0); 114094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPFBackground = b.create(); 115094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPFBackground.bindSampler(mSampler, 0); 116094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 117094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPFBackground(mPFBackground); 118094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 119094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 120094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPV() { 12132e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk ProgramVertex.Builder pvb = new ProgramVertex.Builder(mRS); 122094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPVBackground = pvb.create(); 123094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 124094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPVA = new ProgramVertex.MatrixAllocation(mRS); 125094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPVBackground.bindAllocation(mPVA); 126094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 127094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPVBackground(mPVBackground); 128094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 129094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 130094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void loadImage() { 1312222aa90031604e9752ebc2909303a84139b8b18Jason Sams mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, Element.RGB_565(mRS), true); 132094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGridImage.uploadToTexture(0); 133094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 134094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTGrid(mGridImage); 135094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 136094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 137094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initTextAllocation() { 138094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk String allocString = "Displaying file: R.raw.robot"; 1395476b450e50939940dcf3f15c92335cee2fc572dJason Sams mTextAlloc = Allocation.createFromString(mRS, allocString, Allocation.USAGE_SCRIPT); 140094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTextAlloc(mTextAlloc); 141094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 142094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 143094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRootTransform; 144094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mGroup1; 145094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 146094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRobot1; 147094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRobot2; 148094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 149094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk void initTransformHierarchy() { 150094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRootTransform = new SgTransform(mRS); 151094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 152094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1 = new SgTransform(mRS); 153094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRootTransform.addChild(mGroup1); 154094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 155094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1 = new SgTransform(mRS); 156094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2 = new SgTransform(mRS); 157094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 158094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.addChild(mRobot1); 159094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.addChild(mRobot2); 160094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 161db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mGroup1.setTransform(0, new Float4(0.0f, 0.0f, -15.0f, 0.0f), TransformType.TRANSLATE); 162094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 15.0f), TransformType.ROTATE); 163094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 164db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mRobot1.setTransform(0, new Float4(-3.0f, -0.5f, 0.0f, 0.0f), TransformType.TRANSLATE); 165094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 20.0f), TransformType.ROTATE); 166094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1.setTransform(2, new Float4(0.2f, 0.2f, 0.2f, 0.0f), TransformType.SCALE); 167094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 168db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mRobot2.setTransform(0, new Float4(3.0f, 0.0f, 0.0f, 0.0f), TransformType.TRANSLATE); 169094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, -20.0f), TransformType.ROTATE); 170094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2.setTransform(2, new Float4(0.3f, 0.3f, 0.3f, 0.0f), TransformType.SCALE); 171094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 172094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 173094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initRS() { 174094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 1753ba02b3d2f6fb49677466a2e93c96f307d2a7a41Jason Sams mScript = new ScriptC_scenegraph(mRS, mRes, R.raw.scenegraph); 1763ba02b3d2f6fb49677466a2e93c96f307d2a7a41Jason Sams mTransformScript = new ScriptC_transform(mRS, mRes, R.raw.transform); 177094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mTransformScript.set_transformScript(mTransformScript); 178094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 179094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTransformRS(mTransformScript); 180094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 181094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPFS(); 182094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPF(); 183094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPV(); 184094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 185094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk loadImage(); 186094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 187094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot); 188094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(0); 189ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (entry == null || entry.getClassID() != FileA3D.ClassID.MESH) { 190094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk Log.e("rs", "could not load model"); 191ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk } else { 192094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mMesh = (Mesh)entry.getObject(); 193094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTestMesh(mMesh); 194094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 195094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 196094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mItalic = Font.create(mRS, mRes, "DroidSerif-Italic.ttf", 8); 197094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gItalic(mItalic); 198094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 199094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initTextAllocation(); 200094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 201094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initTransformHierarchy(); 202094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 203094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk Log.v("========SceneGraph========", "transform hierarchy initialized"); 204094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 205094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRootNode(mRootTransform.getField()); 206094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 207094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gGroup(mGroup1.mParent.mChildField); 208094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRobot1(mRobot1.mParent.mChildField); 209094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRobot1Index(mRobot1.mIndexInParentGroup); 210094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRobot2(mRobot2.mParent.mChildField); 211094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRobot2Index(mRobot2.mIndexInParentGroup); 212094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 213bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mRS.bindRootScript(mScript); 214094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 215094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk} 216094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 217094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 218094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 219