Ejemplo n.º 1
0
        public void DrawSkybox()
        {
            if (SkyboxModel == null)
            {
                SkyboxModel       = new libTechModel();
                SkyboxModel.Scale = new Vector3(5000);

                libTechMesh CubeMesh = new libTechMesh(FishGfx.Formats.Obj.Load("content/models/cube.obj").First().Vertices.ToArray(), Engine.GetMaterial("skybox"));
                CubeMesh.SetLabel("Skybox Cube");

                SkyboxModel.AddMesh(CubeMesh);
            }

            RenderState RS = Gfx.PeekRenderState();

            RS.EnableCullFace  = false;
            RS.EnableDepthMask = false;
            RS.EnableDepthTest = true;
            RS.EnableBlend     = false;
            Gfx.PushRenderState(RS);

            SkyboxModel.Position = Engine.Camera3D.Position;
            SkyboxModel.DrawOpaque();

            Gfx.PopRenderState();
        }
Ejemplo n.º 2
0
        public EntPhysics(EntityKeyValues KVs)
        {
            string       ModelName = KVs.Get <string>("model");
            libTechModel Model     = KVs.Map.LoadModel(ModelName);

            Init(Model, 18);
            SetWorldTransform(Vector3.One, KVs.Get <Quaternion>("qangles"), KVs.Get <Vector3>("origin"));
        }
Ejemplo n.º 3
0
        public void AddModel(libTechModel Model)
        {
            Array.Resize(ref MapModels, MapModels.Length + 1);
            MapModels[MapModels.Length - 1] = Model;
            Model.SetLabel(string.Format("Map model {0}", MapModels.Length - 1));

            /*foreach (var Msh in Model.GetMeshes())
             *      if (Msh.Material.MaterialName == "water")
             *              Msh.SetWireframe(true);*/
        }
Ejemplo n.º 4
0
        public static libTechMap LoadMap(Stream BSPStream)
        {
            Q3BSP Map = Q3BSP.FromStream(BSPStream);

            libTechMap Q3Map = new libTechMap();
            Dictionary <int, List <Vertex3> > TexturedMeshes = new Dictionary <int, List <Vertex3> >();

            foreach (var FaceIdx in GetFaceIndices(Map))
            {
                Q3BSPFace Face = Map.Faces[FaceIdx];

                if (!TexturedMeshes.ContainsKey(Face.Texture))
                {
                    TexturedMeshes.Add(Face.Texture, new List <Vertex3>());
                }

                if (Face.Type == FaceType.Polygon || Face.Type == FaceType.Mesh)
                {
                    Vertex3[] Vertices = new Vertex3[Face.NVerts];
                    for (int VertOffset = 0; VertOffset < Face.NVerts; VertOffset++)
                    {
                        Vertices[VertOffset] = Map.Vertices[Face.Vert + VertOffset].ToVertex3();
                    }

                    for (int MeshVertOffset = 0; MeshVertOffset < Face.NMeshVerts; MeshVertOffset++)
                    {
                        TexturedMeshes[Face.Texture].Add(Vertices[Map.MeshVertices[Face.MeshVert + MeshVertOffset]]);
                    }
                }
            }

            string[] TextureNames = Map.Textures.Select(T => T.GetName()).ToArray();

            libTechModel Model = new libTechModel();

            Q3Map.AddModel(Model);

            foreach (var KV in TexturedMeshes)
            {
                string TexName = TextureNames[KV.Key];

                if (TexName == "textures/lun3dm5/lblusky2")
                {
                    continue;
                }

                Model.AddMesh(new libTechMesh(KV.Value.ToArray().Reverse().ToArray(), Engine.GetMaterial(TexName)));
            }

            return(Q3Map);
        }
Ejemplo n.º 5
0
        public libTechModel LoadModel(string Pth)
        {
            if (LoadedModels.ContainsKey(Pth))
            {
                return(LoadedModels[Pth]);
            }

            libTechModel Mdl = Engine.Load <libTechModel>(Pth);

            if (Mdl == null)
            {
                throw new Exception("Could not load model " + Pth);
            }

            Mdl.SetLabel(Pth);
            LoadedModels.Add(Pth, Mdl);
            return(Mdl);
        }
Ejemplo n.º 6
0
 void Init(libTechModel Model, float Mass = 10)
 {
     Init(Model.GetMeshes().First().GetVertices().Select(V => V.Position), Mass);
     RenderModel = Model;
 }
Ejemplo n.º 7
0
 public EntPhysics(libTechModel Model, float Mass = 10)
 {
     Init(Model, Mass);
 }
Ejemplo n.º 8
0
 public EntStatic(libTechModel Model)
 {
     this.Model = Model;
 }
Ejemplo n.º 9
0
        public static libTechMap LoadMap(string FilePath)
        {
            // TODO: Ugh, fix
            FilePath = Path.GetFullPath("." + FilePath);

            libTechMap   Map             = new libTechMap();
            libTechModel CurrentMapModel = null;

            using (ValveBspFile BSP = new ValveBspFile(FilePath)) {
                string BSPProviderPath = Path.GetFileName(FilePath);
                Engine.VFS.GetSourceProvider().Add(BSPProviderPath, BSP.PakFile);

                Face[]        Faces     = BSP.Faces.ToArray();
                SVector3[]    Verts     = BSP.Vertices.ToArray();
                BspModel[]    Models    = BSP.Models.ToArray();
                Edge[]        Edges     = BSP.Edges.ToArray();
                int[]         SurfEdges = BSP.SurfEdges.ToArray();
                TextureInfo[] TexInfos  = BSP.TextureInfos.ToArray();
                TextureData[] TexDatas  = BSP.TextureData.ToArray();
                Brush[]       Brushes   = BSP.Brushes.ToArray();
                BrushSide[]   Sides     = BSP.BrushSides.ToArray();

                foreach (var VEnt in BSP.Entities)
                {
                    Vector3    Angles  = ToVec3(VEnt.Angles) * ((float)Math.PI / 360) + new Vector3(-((float)Math.PI / 2), 0, 0);;
                    Vector3    Origin  = ToVec3(VEnt.Origin);
                    Quaternion QAngles = Quaternion.CreateFromYawPitchRoll(Angles.Y, Angles.X, Angles.Z);

                    EntityKeyValues KVs = new EntityKeyValues(Map);
                    KVs.Add(new EntityKeyValue("origin", Origin));
                    KVs.Add(new EntityKeyValue("angles", Angles));
                    KVs.Add(new EntityKeyValue("qangles", QAngles));

                    foreach (var Name in VEnt.PropertyNames)
                    {
                        if (!KVs.Contains(Name))
                        {
                            KVs.Add(new EntityKeyValue(Name, (string)VEnt[Name]));
                        }
                    }

                    Entity Ent = Entity.CreateInstance(VEnt.ClassName, KVs);

                    if (Ent == null)
                    {
                        continue;
                    }

                    Map.SpawnEntity(Ent);
                }

                List <Vertex3> DispTriangleStrip = new List <Vertex3>();

                for (int ModelIdx = 0; ModelIdx < Models.Length; ModelIdx++)
                {
                    ref BspModel Model = ref Models[ModelIdx];

                    CurrentMapModel = new libTechModel();
                    if (ModelIdx > 0)
                    {
                        CurrentMapModel.Enabled = false;
                    }

                    Dictionary <string, List <Vertex3> > TexturedMeshes = new Dictionary <string, List <Vertex3> >();

                    for (int FaceIdx = Model.FirstFace; FaceIdx < Model.FirstFace + Model.NumFaces; FaceIdx++)
                    {
                        ref Face        Face    = ref Faces[FaceIdx];
                        ref TextureInfo TexInfo = ref TexInfos[Face.TexInfo];

                        bool IsSkybox = (TexInfo.Flags & (SurfFlags.SKY | SurfFlags.SKY2D)) != 0;

                        if ((TexInfo.Flags & (SurfFlags.NODRAW | SurfFlags.LIGHT)) != 0 || IsSkybox)
                        {
                            continue;
                        }

                        ref TextureData TexData  = ref TexDatas[TexInfo.TexData];