示例#1
0
        /// <summary>
        /// Basic constructor
        /// </summary>
        /// <param name="sessionID"></param>
        public SessionContent(SessionData sessionData, string sessionID)
        {
            this.SessionID   = sessionID;
            this.SceneBuffer = new MMIScene();
            this.sessionData = sessionData;

            this.ServiceAccess = new ServiceAccess(this.sessionData.MMIRegisterAddress, sessionID);
            this.ServiceAccess.Initialize();
        }
        /// <summary>
        /// Basic initialization method
        /// </summary>
        /// <param name="avatarDescription"></param>
        /// <param name="properties"></param>
        /// <returns></returns>
        public override MBoolResponse Initialize(MAvatarDescription avatarDescription, Dictionary <string, string> properties)
        {
            //Call the base class (important for automatic conversion from MSimulationState to SimulationState)
            base.Initialize(avatarDescription, properties);

            this.SkeletonAccess = new IntermediateSkeleton();
            this.SkeletonAccess.InitializeAnthropometry(avatarDescription);


            //Create a new session uuid
            this.sessionId = Guid.NewGuid().ToString();

            //Create a new virtual scene
            this.virtualScene = new MMIScene();

            //Create a unique id for the new virtual object representing the move target
            string moveTargetID = Guid.NewGuid().ToString();

            //Create a new virtual object representing the move target
            moveTarget = new MSceneObject(moveTargetID, "MoveTarget", new MTransform()
            {
                ID       = moveTargetID,
                Position = new MVector3(0, 0, 0),
                Rotation = new MQuaternion(0, 0, 0, 1)
            });

            //Add the virtual move target to the scene
            this.virtualScene.Apply(new MSceneUpdate()
            {
                AddedSceneObjects = new List <MSceneObject>()
                {
                    moveTarget
                }
            });


            //Full scene transmission initial required
            this.transmitFullScene = true;

            //Setup the mmu access
            this.mmuAccess = new MMUAccess(this.sessionId)
            {
                //IntermediateAvatarDescription = avatarDescription,
                SceneAccess = this.virtualScene
            };

            Console.WriteLine("Try to connect to mmu access...");

            //Connect to mmu access and load mmus
            bool connected = this.mmuAccess.Connect(this.AdapterEndpoint, this.AvatarDescription.AvatarID);


            if (connected)
            {
                //Get all loadable MMUs within the current session
                List <MMUDescription> loadableMMUs = this.mmuAccess.GetLoadableMMUs();


                MMUDescription moveMMU = loadableMMUs.Find(s => s.MotionType == "move");

                Console.WriteLine("Got loadable MMUs:");


                //Load the relevant MMUs
                bool loaded = this.mmuAccess.LoadMMUs(new List <MMUDescription>()
                {
                    moveMMU
                }, TimeSpan.FromSeconds(10));

                if (!loaded)
                {
                    Console.WriteLine("Error at loading MMU");

                    return(new MBoolResponse(false)
                    {
                        LogData = new List <string>()
                        {
                            { "Error at loading mmu" }
                        }
                    });
                }

                //Initialize all MMUs
                this.mmuAccess.InitializeMMUs(TimeSpan.FromSeconds(10), this.AvatarDescription.AvatarID);

                //Instantiate the cosimulator
                this.coSimulator = new MMICoSimulator(mmuAccess.MotionModelUnits);


                return(new MBoolResponse(true));
            }
            else
            {
                Console.WriteLine("Connection to MMUAccess/MMIRegister failed");
                return(new MBoolResponse(false)
                {
                    LogData = new List <string>()
                    {
                        "Connection to MMUAccess/MMIRegister failed"
                    }
                });
            }
        }