示例#1
0
        public Game(Connection serverConnection)
        {
            _serverConnection = serverConnection;

            IPlayerController controller;

            try
            {
                var port = new SerialPort(SerialPort.GetPortNames()[0], 115200, Parity.None);
                port.Open();
                port.Close();


                _inputManager = new GamepadInputManager();
                _inputManager.sendData(1);
                controller = new GamepadController(_inputManager, _entityManager);
            }
            catch (Exception e)
            {
                controller = new KeyboardController(_entityManager);
            }

            Player player = new Player(new Vector2f(300.0f, 300.0f), controller, playerTexture,
                                       healthBarTexture, _entityManager, camera)
            {
                Active = true
            };

            _entityManager.Add(player);
            _entityManager.ActivePlayer = player;

            _sceneBuffer = new SceneBuffer(playerTexture, healthBarTexture, _entityManager);
            _serverConnection.SetCallback((connection, data) => { _sceneBuffer.Process(data); });
        }
        internal RenderManager(Engine engine)
        {
            this.engine = engine;

            cameraManager = engine.CameraManager;

            sceneBuffer            = engine.Device.CreateBuffer <SceneBuffer>(BufferTypeEnum.ConstVertex, 1);
            objectBuffer           = engine.Device.CreateBuffer <ObjectBuffer>(BufferTypeEnum.ConstVertex, 1);
            pixelShaderSceneBuffer = engine.Device.CreateBuffer <PixelShaderSceneBuffer>(BufferTypeEnum.ConstPixel, 1);
            instancesBuffer        = engine.Device.CreateBuffer <Matrix>(BufferTypeEnum.Vertex, 1);

            instancesArray = new Matrix[1];

            renderers = new Dictionary <ShaderHandle, Dictionary <Material, Dictionary <Mesh, List <Transform> > > >();

            sceneData = new SceneBuffer();

            defaultSampler = engine.Device.CreateSampler();

            depthStencilZWrite   = engine.Device.CreateDepthStencilState(true);
            depthStencilNoZWrite = engine.Device.CreateDepthStencilState(false);

            renderTexture = engine.Device.CreateRenderTexture((int)engine.WindowHost.WindowWidth, (int)engine.WindowHost.WindowHeight);

            outlineTexture = engine.Device.CreateRenderTexture((int)engine.WindowHost.WindowWidth, (int)engine.WindowHost.WindowHeight);

            planeMesh = engine.MeshManager.CreateMesh(new ScreenPlane());

            blitShader   = engine.ShaderManager.LoadShader("../internalShaders/blit.shader");
            blitMaterial = engine.MaterialManager.CreateMaterial(blitShader);

            unlitMaterial = engine.MaterialManager.CreateMaterial(engine.ShaderManager.LoadShader("../internalShaders/unlit.shader"));
        }
示例#3
0
    /// <summary>
    /// Calls into the Scene Understanding APIs, to retrieve the latest scene as a byte array.
    /// </summary>
    /// <param name="enableQuads">When enabled, quad representation of scene objects is retrieved.</param>
    /// <param name="enableMeshes">When enabled, mesh representation of scene objects is retrieved.</param>
    /// <param name="enableInference">When enabled, both observed and inferred scene objects are retrieved. Otherwise, only observed scene objects are retrieved.</param>
    /// <param name="enableWorldMesh">When enabled, retrieves the world mesh.</param>
    /// <param name="lod">If world mesh is enabled, lod controls the resolution of the mesh returned.</param>
    private void RetrieveData(float boundingSphereRadiusInMeters, bool enableQuads, bool enableMeshes, bool enableInference, bool enableWorldMesh, SceneMeshLevelOfDetail lod)
    {
        Debug.Log("SceneUnderstandingManager.RetrieveData: Started.");

        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Start();

        try
        {
            SceneQuerySettings querySettings;
            querySettings.EnableSceneObjectQuads         = enableQuads;
            querySettings.EnableSceneObjectMeshes        = enableMeshes;
            querySettings.EnableOnlyObservedSceneObjects = !enableInference;
            querySettings.EnableWorldMesh            = enableWorldMesh;
            querySettings.RequestedMeshLevelOfDetail = lod;

            // Ensure that the bounding radius is within the min/max range.
            boundingSphereRadiusInMeters = Mathf.Clamp(boundingSphereRadiusInMeters, MinBoundingSphereRadiusInMeters, MaxBoundingSphereRadiusInMeters);

            // Make sure the scene query has completed swap with latestSUSceneData under lock to ensure the application is always pointing to a valid scene.
            SceneBuffer serializedScene = SceneObserver.ComputeSerializedAsync(querySettings, boundingSphereRadiusInMeters).GetAwaiter().GetResult();
            lock (SUDataLock)
            {
                // The latest data queried from the device is stored in these variables
                LatestSUSceneData = new byte[serializedScene.Size];
                serializedScene.GetData(LatestSUSceneData);
                LatestSceneGuid = Guid.NewGuid();
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }

        stopwatch.Stop();
        Debug.Log(string.Format("SceneUnderstandingManager.RetrieveData: Completed. Radius: {0}; Quads: {1}; Meshes: {2}; Inference: {3}; WorldMesh: {4}; LOD: {5}; Bytes: {6}; Time (secs): {7};",
                                boundingSphereRadiusInMeters,
                                enableQuads,
                                enableMeshes,
                                enableInference,
                                enableWorldMesh,
                                lod,
                                (LatestSUSceneData == null ? 0 : LatestSUSceneData.Length),
                                stopwatch.Elapsed.TotalSeconds));
    }
 public NetworkController(SceneBuffer buffer, int id)
 {
     _buffer = buffer;
     Id      = id;
 }