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