Beispiel #1
0
        public static List <shader_p> shaders; // This needs to be kept here for collision detection (indicates non-solid surfaces)



        public static void OnMessage(MessageParams msg)
        {
            switch (msg.type)
            {
            case "load":
                String url       = msg.url;
                int    tessLevel = msg.tesselationLevel;

                BspCompiler.Load(url, tessLevel, () => {
                    // Fallback to account for Opera handling URLs in a worker
                    // differently than other browsers.
                    BspCompiler.Load("../" + url, tessLevel, null);
                });
                break;

            case "loadShaders":
                ShaderParser.loadList(msg.sources, null);
                break;

            case "trace":
                BspCollisionDetection.trace(msg.traceId, msg.start, msg.end, msg.radius, msg.slide);
                break;

            case "visibility":
                BspVisibilityChecking.buildVisibleList(BspVisibilityChecking.getLeaf(msg.pos));
                break;

            default:
                throw new Exception("Unexpected message type: " + msg.data);
                //print ;
            }
        }
Beispiel #2
0
        public static void postMessage2(MessageParams @params, MessageParams replay)
        {
            string type = @params.type;

            if (replay != null)
            {
                if (type == "worker")
                {
                    q3bsp.onMessage(replay);
                    BspCompiler.OnMessage(replay);

                    return;
                }
            }
            switch (type)
            {
            case "geometry":

                //worker.postMessage(params);
                //_onmessage(params);
                //q3bsp.onMessage(params);
                //return;
                break;
            }


            BspCompiler.OnMessage(@params);
            q3bsp.onMessage(@params);

            Console.WriteLine("Please wait");
            //fetch_update("Plese Wait");
        }
Beispiel #3
0
        /// <summary>
        /// Parses the BSP file
        /// </summary>
        public static void Parse(BinaryStreamReader src, int tesselationLevel, OnBspIncompatible onIncompatible)
        {
            bsp_header_t header = ReadHeader(src);

            // Check for appropriate format
            if (header.tag != "IBSP" || header.version != 46)
            {
                onIncompatible(header);

                return;
            }

            // info on different versions: https://github.com/zturtleman/bsp-sekai

            /*---- LUMP INDEX ----
             * Index       Lump Name         Description
             * 0           Entities          Game-related object descriptions.
             * 1           Textures          Surface descriptions (shaders).
             * 2           Planes            Planes used by map geometry.
             * 3           Nodes             BSP tree nodes.
             * 4           Leafs             BSP tree leaves.
             * 5           Leaffaces         Lists of face indices, one list per leaf.
             * 6           Leafbrushes       Lists of brush indices, one list per leaf.
             * 7           Models            Descriptions of rigid world geometry in map.
             * 8           Brushes           Convex polyhedra used to describe solid space.
             * 9           Brushsides        Brush surfaces.
             * 10          Vertexes          Vertices used to describe faces.
             * 11          Meshverts         Lists of offsets, one list per mesh.
             * 12          Effects           List of special map effects.
             * 13          Faces             Surface geometry.
             * 14          Lightmaps         Packed lightmap data.
             * 15          Lightvols         Local illumination data.
             * 16          Visdata           Cluster-cluster visibility data.*/


            // Read map entities
            bsp_parser_ibsp_v46.ReadEntities(header.lumps[0], src);

            /*  The entities lump stores game-related map information,
             *  including information about the map name, weapons, health, armor, triggers, spawn points,
             *  lights, and .md3 models to be placed in the map.
             *  The lump contains only one record, a string that describes all of the entities */

            bsp_tree        tree = new bsp_tree();
            List <shader_p> shaders;

            // Load visual map components
            tree.surfaces = shaders = bsp_parser_ibsp_v46.ReadShaders(header.lumps[1], src);
            List <lightmap_rect_t> lightmaps = bsp_parser_ibsp_v46.ReadLightmaps(header.lumps[14], src);
            List <Vertex>          verts     = bsp_parser_ibsp_v46.ReadVerts(header.lumps[10], src);
            List <int>             meshVerts = bsp_parser_ibsp_v46.ReadMeshVerts(header.lumps[11], src);
            List <Face>            faces     = bsp_parser_ibsp_v46.ReadFaces(header.lumps[13], src);



            // COMPILE MAP
            BspCompiler.CompileMap(verts, faces, meshVerts, lightmaps, shaders, tesselationLevel);

            //   postMessage2({
            //       "type": 'status',
            //"message": 'Geometry compiled, parsing collision tree...'
            //   },null);


            // Load bsp components
            tree.planes      = bsp_parser_ibsp_v46.ReadPlanes(header.lumps[2], src);
            tree.nodes       = bsp_parser_ibsp_v46.ReadNodes(header.lumps[3], src);
            tree.leaves      = bsp_parser_ibsp_v46.ReadLeaves(header.lumps[4], src);
            tree.leafFaces   = bsp_parser_ibsp_v46.ReadLeafFaces(header.lumps[5], src);
            tree.leafBrushes = bsp_parser_ibsp_v46.ReadLeafBrushes(header.lumps[6], src);
            tree.brushes     = bsp_parser_ibsp_v46.ReadBrushes(header.lumps[8], src);
            tree.brushSides  = bsp_parser_ibsp_v46.ReadBrushSides(header.lumps[9], src);
            VisData visData = bsp_parser_ibsp_v46.ReadVisData(header.lumps[16], src);

            tree.visBuffer = visData.buffer;
            tree.visSize   = visData.size;

            BspVisibilityChecking.visBuffer = visData.buffer;
            BspVisibilityChecking.visSize   = visData.size;

            //tree.visData = visData;

            q3bsp.onMessage(new MessageParams()
            {
                type = "bsp",
                bsp  = tree
            });
        }