public static bool Load(ObjMesh mesh, Stream objStream) { try { using(StreamReader streamReader = new StreamReader(objStream)) { Load(mesh, streamReader); streamReader.Close(); return true; } } catch { return false; } }
public Decoration(Vector3 location, Vector3 scale, bool existsIn2d, bool existsIn3d, ObjMesh mesh, MeshTexture texture) : base() { _location = location; _scale = scale; _existsIn3d = existsIn3d; _existsIn2d = existsIn2d; _mesh = mesh; _texture = texture; _sprite = sprite; _cycleNum = 0; _frameNum = 0; _is3dGeo = true; _hascbox = false; _animDirection = 1; }
public Obstacle(Vector3 location, Vector3 scale, Vector3 pbox, bool existsIn2d, bool existsIn3d, bool collidesIn2d, bool collidesIn3d, ObjMesh mesh, MeshTexture texture) : base() { _location = location; _scale = scale; _pbox = pbox; _existsIn3d = existsIn3d; _existsIn2d = existsIn2d; _mesh = mesh; _texture = texture; _sprite = null; _cycleNum = 0; _frameNum = 0; _frame3d = 0; _is3dGeo = true; _hascbox = false; canSquish = false; _collidesIn2d = collidesIn2d; _collidesIn3d = collidesIn3d; _animDirection = 1; }
public Enemy(Player player, Vector3 location, Vector3 scale, Vector3 pbox, Vector3 cbox, bool existsIn2d, bool existsIn3d, int health, int damage, float speed, int AItype, ObjMesh mesh, MeshTexture texture, Effect death) : base() { _location = location; _scale = scale; _pbox = pbox; _cbox = cbox; _existsIn3d = existsIn3d; _existsIn2d = existsIn2d; _health = health; _damage = damage; _speed = speed; _alive = true; this.AItype = AItype; _hascbox = true; _type = 1; frozen = false; maxFreezeTime = 0.7; freezetimer = 0; attackspeed = 1; attacktimer = 0; this.player = player; _deathAnim = death; _mesh = mesh; _texture = texture; _sprite = null; _cycleNum = 0; _frameNum = 0; _is3dGeo = true; _animDirection = 1; velocity = new Vector3(0, 0, 0); accel = new Vector3(0, 0, 0); kbspeed = new Vector3(70, 100, 70); moving = false; doesGravity = true; CurrentAI = new Stack<Airoutine>(); InitilizeAI(); }
private Decoration ParseDecoration(string path, Vector3 loc) { Decoration dec = null; // Instantiate the list Assembly assembly = Assembly.GetExecutingAssembly(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; string _d_path = "U5Designs.Resources.Data.Decorations." + path; Stream fstream = assembly.GetManifestResourceStream(_d_path); XmlDocument doc = new XmlDocument(); XmlReader reader = XmlReader.Create(fstream, settings); doc.Load(reader); Vector3 scale = LoadLevel.parseVector3(doc.GetElementsByTagName("scale")[0]); bool _draw2 = Convert.ToBoolean(doc.GetElementsByTagName("draw2")[0].InnerText); bool _draw3 = Convert.ToBoolean(doc.GetElementsByTagName("draw3")[0].InnerText); // Check to see if the current Obstacle is 2D or 3D and handle accordingly if (Convert.ToBoolean(doc.GetElementsByTagName("is2d")[0].InnerText)) { // Create the SpriteSheet SpriteSheet ss = LoadLevel.parseSpriteFile(doc.GetElementsByTagName("sprite")[0].InnerText); Billboarding bb = Billboarding.Yes; //Have to put something here for it to compile switch (doc.GetElementsByTagName("billboards")[0].InnerText) { case "yes": case "Yes": bb = Billboarding.Yes; break; case "lock2d": case "Lock2d": bb = Billboarding.Lock2d; break; case "lock3d": case "Lock3d": bb = Billboarding.Lock3d; break; default: Console.WriteLine("Bad obstacle file: " + path); Environment.Exit(1); break; } dec = new Decoration(loc, scale, _draw2, _draw3, bb, ss); } else { XmlNodeList _m = doc.GetElementsByTagName("mesh"); ObjMesh _mesh = new ObjMesh(assembly.GetManifestResourceStream("U5Designs.Resources.Geometry." + _m.Item(0).InnerText)); XmlNodeList _b = doc.GetElementsByTagName("bmp"); List<Bitmap> texFrames = new List<Bitmap>(); foreach (XmlNode n in _b) { texFrames.Add(new Bitmap(assembly.GetManifestResourceStream("U5Designs.Resources.Textures." + n.InnerText))); } MeshTexture _bmp = new MeshTexture(texFrames); _bmp.init(); dec = new Decoration(loc, scale, _draw2, _draw3, _mesh, _bmp); } fstream.Close(); return dec; }
private Obstacle ParseObstacle(string path, Vector3 loc) { Obstacle o = null; Assembly assembly = Assembly.GetExecutingAssembly(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; XmlDocument doc = new XmlDocument(); string _o_path = "U5Designs.Resources.Data.Obstacles." + path; Stream fstream = assembly.GetManifestResourceStream(_o_path); XmlReader reader = XmlReader.Create(fstream, settings); doc.Load(reader); Vector3 scale = LoadLevel.parseVector3(doc.GetElementsByTagName("scale")[0]); Vector3 pbox = LoadLevel.parseVector3(doc.GetElementsByTagName("pbox")[0]); bool _draw2 = Convert.ToBoolean(doc.GetElementsByTagName("draw2")[0].InnerText); bool _draw3 = Convert.ToBoolean(doc.GetElementsByTagName("draw3")[0].InnerText); bool _collides2d = Convert.ToBoolean(doc.GetElementsByTagName("collidesIn2d")[0].InnerText); bool _collides3d = Convert.ToBoolean(doc.GetElementsByTagName("collidesIn3d")[0].InnerText); // Check to see if the current Obstacle is 2D or 3D and handle accordingly XmlNodeList _type = doc.GetElementsByTagName("is2d"); if (Convert.ToBoolean(_type.Item(0).InnerText)) { String ss_path = doc.GetElementsByTagName("sprite")[0].InnerText; fstream.Close(); SpriteSheet ss = LoadLevel.parseSpriteFile(ss_path); Billboarding bb = Billboarding.Yes; //Have to put something here for it to compile switch (doc.GetElementsByTagName("billboards")[0].InnerText) { case "yes": case "Yes": bb = Billboarding.Yes; break; case "lock2d": case "Lock2d": bb = Billboarding.Lock2d; break; case "lock3d": case "Lock3d": bb = Billboarding.Lock3d; break; default: Console.WriteLine("Bad obstacle file: " + path); Environment.Exit(1); break; } o = new Obstacle(loc, scale, pbox, _draw2, _draw3, _collides2d, _collides3d, bb, ss); } else { fstream.Close(); XmlNodeList _m = doc.GetElementsByTagName("mesh"); ObjMesh _mesh = new ObjMesh(assembly.GetManifestResourceStream("U5Designs.Resources.Geometry." + _m.Item(0).InnerText)); XmlNodeList _b = doc.GetElementsByTagName("bmp"); List<Bitmap> texFrames = new List<Bitmap>(); foreach (XmlNode n in _b) { texFrames.Add(new Bitmap(assembly.GetManifestResourceStream("U5Designs.Resources.Textures." + n.InnerText))); } MeshTexture _tex = new MeshTexture(texFrames); _tex.init(); o = new Obstacle(loc, scale, pbox, _draw2, _draw3, _collides2d, _collides3d, _mesh, _tex); fstream.Close(); } return o; }
static void Load(ObjMesh mesh, TextReader textReader) { vertices = new List<Vector3>(); normals = new List<Vector3>(); texCoords = new List<Vector2>(); objVerticesIndexDictionary = new Dictionary<ObjMesh.ObjVertex, int>(); objVertices = new List<ObjMesh.ObjVertex>(); objTriangles = new List<ObjMesh.ObjTriangle>(); objQuads = new List<ObjMesh.ObjQuad>(); string line; while ((line = textReader.ReadLine()) != null) { line = line.Trim(splitCharacters); line = line.Replace(" ", " "); string[] parameters = line.Split(splitCharacters); switch (parameters[0]) { case "p": // Point break; case "v": // Vertex float x = float.Parse(parameters[1]); float y = float.Parse(parameters[2]); float z = float.Parse(parameters[3]); vertices.Add(new Vector3(x, y, z)); break; case "vt": // TexCoord float u = float.Parse(parameters[1]); float v = float.Parse(parameters[2]); texCoords.Add(new Vector2(u, v)); break; case "vn": // Normal float nx = float.Parse(parameters[1]); float ny = float.Parse(parameters[2]); float nz = float.Parse(parameters[3]); normals.Add(new Vector3(nx, ny, nz)); break; case "f": switch (parameters.Length) { case 4: ObjMesh.ObjTriangle objTriangle = new ObjMesh.ObjTriangle(); objTriangle.Index0 = ParseFaceParameter(parameters[1]); objTriangle.Index1 = ParseFaceParameter(parameters[2]); objTriangle.Index2 = ParseFaceParameter(parameters[3]); objTriangles.Add(objTriangle); break; case 5: ObjMesh.ObjQuad objQuad = new ObjMesh.ObjQuad(); objQuad.Index0 = ParseFaceParameter(parameters[1]); objQuad.Index1 = ParseFaceParameter(parameters[2]); objQuad.Index2 = ParseFaceParameter(parameters[3]); objQuad.Index3 = ParseFaceParameter(parameters[4]); objQuads.Add(objQuad); break; } break; } } mesh.Vertices = objVertices.ToArray(); // Vector3[] verts = new Vector3[objVertices.Count]; // Vector3[] norms = new Vector3[objVertices.Count]; // Vector2[] tex = new Vector2[objVertices.Count]; // int i = 0; // foreach(ObjMesh.ObjVertex v in objVertices) { // verts[i] = v.Vertex; // norms[i] = v.Normal; // tex[i] = v.TexCoord; // } // mesh.JustVertices = verts; // mesh.Normals = norms; // mesh.TexCoords = tex; mesh.Triangles = objTriangles.ToArray(); mesh.Quads = objQuads.ToArray(); objVerticesIndexDictionary = null; vertices = null; normals = null; texCoords = null; objVertices = null; objTriangles = null; objQuads = null; }