Example #1
0
        public void DoEnter()
        {
            //preload assets
            foreach (Asset asset in assets.Values)
            {
                // asset has format like as .wav
                if (asset.file.Contains("."))
                {
                    byte[] data = UGCMgr.Take(asset.file);
                    if (null == data)
                    {
                        this.LogError("Missing asset, group:{0} package:{1} file:{2} ", asset.group, asset.package, asset.file);
                        continue;
                    }
                    if (asset.group.Equals("skybox"))
                    {
                        Material skybox = UGCMgr.BuildSkybox(data);
                        CameraMgr.ApplySkybox(skybox);
                    }
                }
                else
                {
                    Object obj = ResourceMgr.FindFromPreload(asset.package, asset.file);
                    if (null == obj)
                    {
                        this.LogError("Missing asset, group:{0} package:{1} file:{2} ", asset.group, asset.package, asset.file);
                        continue;
                    }

                    if (asset.group.Equals("agent"))
                    {
                        GameObject clone = ResourceMgr.CloneGameObject(asset.package, asset.file, asset.guid);
                        agents.Add(asset.guid);
                        clone.transform.position   = new Vector3(asset.px, asset.py, asset.pz);
                        clone.transform.rotation   = Quaternion.Euler(asset.rx, asset.ry, asset.rz);
                        clone.transform.localScale = new Vector3(asset.sx, asset.sy, asset.sz);

                        if (asset.gaze)
                        {
                            ReticleHandler handler = clone.AddComponent <ReticleHandler>();
                            handler.path    = asset.slate;
                            handler.trigger = asset.gazeAlias;
                            EventTrigger et = clone.AddComponent <EventTrigger>();

                            EventTrigger.Entry entryEnter = new EventTrigger.Entry();
                            entryEnter.eventID = EventTriggerType.PointerEnter;
                            entryEnter.callback.AddListener((data) => { handler.onPointerEnter(); });
                            et.triggers.Add(entryEnter);

                            EventTrigger.Entry entryExit = new EventTrigger.Entry();
                            entryExit.eventID = EventTriggerType.PointerExit;
                            entryExit.callback.AddListener((data) => { handler.onPointerExit(); });
                            et.triggers.Add(entryExit);

                            EventTrigger.Entry entryClick = new EventTrigger.Entry();
                            entryClick.eventID = EventTriggerType.PointerClick;
                            entryClick.callback.AddListener((data) => { handler.onPointerClick(); });
                            et.triggers.Add(entryClick);

                            Collider collider = clone.GetComponent <Collider>();
                            if (null != collider)
                            {
                                collider.enabled = true;
                            }
                        }
                    }
                    else if (asset.group.Equals("skybox"))
                    {
                        CameraMgr.ApplySkybox(obj as Material);
                    }
                }
            }

            //hide all triggers
            TriggerMgr.ToggleAllTrigger(false);
            //show trigger in current slate
            foreach (string trigger in triggers)
            {
                TriggerMgr.ToggleTrigger(trigger, true);
            }

            // execute startup blocks
            foreach (string guid in blocks)
            {
                Block block = BlockMgr.FindBlock(guid);
                if (block.action.Equals("Entry:Startup"))
                {
                    block.Execute();
                }
            }
        }
Example #2
0
        private static void batchPreloadAsset(List <Dictionary <string, string> > _assets, onBatchPreloadFinishDelegate _onFinish)
        {
            if (_assets.Count == 0)
            {
                _onFinish();
                return;
            }

            Dictionary <string, string> asset = _assets[0];
            string packageUUID = asset["package"];
            string fileUUID    = asset["file"];
            string imageUUID   = asset["image"];
            string cloneUUID   = asset["uuid"];
            string type        = asset["type"];


            _assets.RemoveAt(0);

            if (type.Equals("skybox"))
            {
                Log.Debug("EditorMgr:importVCB", "preload skybox {0}", fileUUID);
                ResourceMgr.PreloadAsset(packageUUID, fileUUID
                                         , () =>
                {
                    Log.Debug("EditorMgr::importVCB", "ready load skybox {0}@{1}", packageUUID, fileUUID);
                }
                                         , (_obj) =>
                {
                    Editor.Image image = fsm.FindState(imageUUID) as Editor.Image;
                    image.skybox       = _obj as Material;
                    Log.Debug("EditorMgr::importVCB", "load skybox {0}@{1} success", packageUUID, fileUUID);
                    batchPreloadAsset(_assets, _onFinish);
                }
                                         , (_err) =>
                {
                    //onNotify(_err);
                    Log.Error("EditorMgr::importVCB", "load skybox {0}@{1} failed: {2}", packageUUID, fileUUID, _err);
                    batchPreloadAsset(_assets, _onFinish);
                });
            }
            else if (type.Equals("agent"))
            {
                float posX   = float.Parse(asset["pos.x"]);
                float posY   = float.Parse(asset["pos.y"]);
                float posZ   = float.Parse(asset["pos.z"]);
                float rotX   = float.Parse(asset["rot.x"]);
                float rotY   = float.Parse(asset["rot.y"]);
                float rotZ   = float.Parse(asset["rot.z"]);
                float scaleX = float.Parse(asset["scale.x"]);
                float scaleY = float.Parse(asset["scale.y"]);
                float scaleZ = float.Parse(asset["scale.z"]);
                Log.Debug("EditorMgr:importVCB", "preload agent {0}", fileUUID);
                ResourceMgr.PreloadAsset(packageUUID, fileUUID
                                         , () =>
                {
                    Log.Debug("EditorMgr::importVCB", "ready load agent {0}@{1}", packageUUID, fileUUID);
                }
                                         , (_obj) =>
                {
                    Editor.Image image = fsm.FindState(imageUUID) as Editor.Image;

                    GameObject go = ResourceMgr.CloneGameObject(packageUUID, fileUUID, cloneUUID);
                    go.SetActive(false);

                    go.transform.position   = new Vector3(posX, posY, posZ);
                    go.transform.rotation   = Quaternion.Euler(rotX, rotY, rotZ);
                    go.transform.localScale = new Vector3(scaleX, scaleY, scaleZ);

                    Collider collider = go.GetComponent <Collider>();
                    if (null != collider)
                    {
                        collider.enabled = true;
                    }

                    Battlehub.RTEditor.ExposeToEditor script = go.GetComponent <Battlehub.RTEditor.ExposeToEditor>();
                    if (null == script)
                    {
                        script = go.AddComponent <Battlehub.RTEditor.ExposeToEditor>();
                        //Debug.Log(script);
                    }
                    if (!image.objs.Contains(cloneUUID))
                    {
                        image.objs.Add(cloneUUID);
                    }
                    Log.Debug("EditorMgr::importVCB", "load agent {0}@{1} success", packageUUID, fileUUID);
                    batchPreloadAsset(_assets, _onFinish);
                }
                                         , (_err) =>
                {
                    Log.Error("EditorMgr::importVCB", "load agent {0}@{1} failed: {2}", packageUUID, fileUUID, _err);
                    batchPreloadAsset(_assets, _onFinish);
                });
            }
        }