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; 26e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport android.renderscript.Font.Style; 27094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.renderscript.ProgramStore.DepthFunc; 28094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukimport android.util.Log; 29094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 30094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 31094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchoukpublic class SceneGraphRS { 32094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 33094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private final int STATE_LAST_FOCUS = 1; 34094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 35094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mWidth; 36094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mHeight; 37094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mRotation; 38094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 39094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public SceneGraphRS() { 40094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 41094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 42094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public void init(RenderScriptGL rs, Resources res, int width, int height) { 43094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRS = rs; 44094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRes = res; 45094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mWidth = width; 46094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mHeight = height; 47094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation = 0; 48094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initRS(); 49094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 50094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 51094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Resources mRes; 52094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private RenderScriptGL mRS; 53094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Sampler mSampler; 54094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramStore mPSBackground; 55094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramFragment mPFBackground; 56094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private ProgramVertex mPVBackground; 57b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk private ProgramVertexFixedFunction.Constants mPVA; 58094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 59094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mGridImage; 60094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mAllocPV; 61094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 62094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Mesh mMesh; 63094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 64094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Font mItalic; 65094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private Allocation mTextAlloc; 66094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 6793a958f0958b852c0a2c7b940c74eeae283ba02bStephen Hines private ScriptC_scenegraph mScript; 6893a958f0958b852c0a2c7b940c74eeae283ba02bStephen Hines private ScriptC_transform mTransformScript; 69094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 70094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mLastX; 71094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int mLastY; 72094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 73094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk public void touchEvent(int x, int y) { 74094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk int dx = mLastX - x; 75ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (Math.abs(dx) > 50 || Math.abs(dx) < 3) { 76094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk dx = 0; 77094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 78094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 79094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation -= dx; 80ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (mRotation > 360) { 81094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation -= 360; 82094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 83ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk if (mRotation < 0) { 84094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRotation += 360; 85094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 86094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 87094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRotate(-(float)mRotation); 88094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 89094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mLastX = x; 90094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mLastY = y; 91094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 92094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 93094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPFS() { 9432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk ProgramStore.Builder b = new ProgramStore.Builder(mRS); 95094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 96094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk b.setDepthFunc(ProgramStore.DepthFunc.LESS); 97b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setDitherEnabled(false); 98b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setDepthMaskEnabled(true); 99094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPSBackground = b.create(); 100094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 101094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPFSBackground(mPSBackground); 102094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 103094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 104094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPF() { 105094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk Sampler.Builder bs = new Sampler.Builder(mRS); 106b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk bs.setMinification(Sampler.Value.LINEAR); 107b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk bs.setMagnification(Sampler.Value.LINEAR); 108094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk bs.setWrapS(Sampler.Value.CLAMP); 109db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk bs.setWrapT(Sampler.Value.CLAMP); 110094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mSampler = bs.create(); 111094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 112b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS); 113b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE, 114b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramFragmentFixedFunction.Builder.Format.RGBA, 0); 115094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPFBackground = b.create(); 116094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPFBackground.bindSampler(mSampler, 0); 117094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 118094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPFBackground(mPFBackground); 119094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 120094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 121094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initPV() { 122b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS); 123094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mPVBackground = pvb.create(); 124094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 125b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk mPVA = new ProgramVertexFixedFunction.Constants(mRS); 126b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk ((ProgramVertexFixedFunction)mPVBackground).bindConstants(mPVA); 127094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 128094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gPVBackground(mPVBackground); 129094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 130094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 131094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void loadImage() { 1326d8eb266dd398abf0511685fdaf98abba3396174Jason Sams mGridImage = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot, 1336d8eb266dd398abf0511685fdaf98abba3396174Jason Sams Allocation.MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE, 1346d8eb266dd398abf0511685fdaf98abba3396174Jason Sams Allocation.USAGE_GRAPHICS_TEXTURE); 135094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTGrid(mGridImage); 136094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 137094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 138094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initTextAllocation() { 139094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk String allocString = "Displaying file: R.raw.robot"; 1405476b450e50939940dcf3f15c92335cee2fc572dJason Sams mTextAlloc = Allocation.createFromString(mRS, allocString, Allocation.USAGE_SCRIPT); 141094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTextAlloc(mTextAlloc); 142094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 143094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 144094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRootTransform; 145094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mGroup1; 146094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 147094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRobot1; 148094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk SgTransform mRobot2; 149094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 150094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk void initTransformHierarchy() { 151094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRootTransform = new SgTransform(mRS); 152094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 153094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1 = new SgTransform(mRS); 154094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRootTransform.addChild(mGroup1); 155094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 156094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1 = new SgTransform(mRS); 157094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2 = new SgTransform(mRS); 158094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 159094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.addChild(mRobot1); 160094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.addChild(mRobot2); 161094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 162db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mGroup1.setTransform(0, new Float4(0.0f, 0.0f, -15.0f, 0.0f), TransformType.TRANSLATE); 163094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mGroup1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 15.0f), TransformType.ROTATE); 164094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 165db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mRobot1.setTransform(0, new Float4(-3.0f, -0.5f, 0.0f, 0.0f), TransformType.TRANSLATE); 166094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, 20.0f), TransformType.ROTATE); 167094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot1.setTransform(2, new Float4(0.2f, 0.2f, 0.2f, 0.0f), TransformType.SCALE); 168094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 169db6f11bd30ad8afc94fdaffd81c9588289a3f6e5Alex Sakhartchouk mRobot2.setTransform(0, new Float4(3.0f, 0.0f, 0.0f, 0.0f), TransformType.TRANSLATE); 170094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2.setTransform(1, new Float4(0.0f, 1.0f, 0.0f, -20.0f), TransformType.ROTATE); 171094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mRobot2.setTransform(2, new Float4(0.3f, 0.3f, 0.3f, 0.0f), TransformType.SCALE); 172094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 173094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 174094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk private void initRS() { 175094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 1763ba02b3d2f6fb49677466a2e93c96f307d2a7a41Jason Sams mScript = new ScriptC_scenegraph(mRS, mRes, R.raw.scenegraph); 1773ba02b3d2f6fb49677466a2e93c96f307d2a7a41Jason Sams mTransformScript = new ScriptC_transform(mRS, mRes, R.raw.transform); 178094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mTransformScript.set_transformScript(mTransformScript); 179094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 180094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTransformRS(mTransformScript); 181094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 182094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPFS(); 183094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPF(); 184094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initPV(); 185094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 186094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk loadImage(); 187094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 188094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot); 189094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk FileA3D.IndexEntry entry = model.getIndexEntry(0); 190e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk if (entry == null || entry.getEntryType() != FileA3D.EntryType.MESH) { 191094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk Log.e("rs", "could not load model"); 192ed9f210568082dd6d1d8a0c92c693d574d87d545Alex Sakhartchouk } else { 193094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mMesh = (Mesh)entry.getObject(); 194094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gTestMesh(mMesh); 195094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 196094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 197e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk mItalic = Font.create(mRS, mRes, "serif", Font.Style.ITALIC, 8); 198094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gItalic(mItalic); 199094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 200094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initTextAllocation(); 201094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 202094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk initTransformHierarchy(); 203094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 204094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRootNode(mRootTransform.getField()); 205094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 206094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gGroup(mGroup1.mParent.mChildField); 207094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRobot1(mRobot1.mParent.mChildField); 208094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRobot1Index(mRobot1.mIndexInParentGroup); 209094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.bind_gRobot2(mRobot2.mParent.mChildField); 210094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk mScript.set_gRobot2Index(mRobot2.mIndexInParentGroup); 211094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 212bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mRS.bindRootScript(mScript); 213094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk } 214094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk} 215094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 216094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 217094a068bc46f725a7358ff84317cff2ca4528601Alex Sakhartchouk 218