public override void Start() { var mesh = new Graphics.Mesh(); mesh.SetData(new Vertex[] { new Vertex(new Vector3(0.5f, 0.5f, 0), 1f, 0.2f, 0, 1f), new Vertex(new Vector3(-0.5f, 0.5f, 0), 1f, 0.2f, 0, 1f), new Vertex(new Vector3(-0.5f, -0.5f, 0), 1f, 0.5f, 0, 1f), new Vertex(new Vector3(-0.5f, 0.5f, 0), 1f, 0.5f, 0, 1f), new Vertex(new Vector3(0.5f, -0.5f, 0), 1f, 0.5f, 0, 1f), new Vertex(new Vector3(0.5f, 0.5f, 0), 1f, 0.5f, 0, 1f) }); // Creates a new bullet that is deadly to all agents including the owner AddHandler <Events.FireBulletEvent>((e) => { Entity bullet = Caboodle.Entities.Create(); bullet.AddComponent <MeshRenderer>().mesh = mesh; Transform transform = bullet.AddComponent <Transform>(); transform.SetAngles(e.start.GetAngles()); transform.Position = e.start.Position + e.start.Up * 10; Bullet bulletComponent = bullet.AddComponent <Bullet>(); bulletComponent.dir = e.start.Up; bulletComponent.owner = e.owner; }); }
void createMeshes(Node node) { if (node.HasMeshes) { foreach (int meshIndex in node.MeshIndices) { Assimp.Mesh amesh = myScene.Meshes[meshIndex]; //create the material Graphics.Material mat = createMaterial(myScene.Materials[amesh.MaterialIndex]); //create the geometry Graphics.Mesh mesh = new Graphics.Mesh(); mesh.primativeType = OpenTK.Graphics.OpenGL.PrimitiveType.Triangles; mesh.indexBase = currIndexOffset; mesh.indexCount = amesh.FaceCount * 3; mesh.material = mat; //get the indices foreach (Face face in amesh.Faces) { for (int i = 0; i < 3; i++) { index.Add((UInt16)(face.Indices[i] + currVertOffset)); currIndexOffset++; } } //get the verts for (int i = 0; i < amesh.VertexCount; i++) { V3N3T2 v = new V3N3T2(); v.Position = toVector(amesh.Vertices[i]); if (amesh.HasNormals == true) { v.Normal = toVector(amesh.Normals[i]); } if (amesh.HasTextureCoords(0) == true) { v.TexCoord = toVector2D(amesh.TextureCoordinateChannels[0][i]); } myVerts.Add(v); } currVertOffset += amesh.VertexCount; myModel.myMeshes.Add(mesh); } } if (node.HasChildren) { foreach (Node child in node.Children) { createMeshes(child); } } }
public override IDisposable Load(Type resourceType, string identifier) { using (var assimpContext = new Assimp.AssimpContext()) { var scene = assimpContext.ImportFile(identifier); var meshes = new List<Graphics.Mesh>(); foreach (var mesh in scene.Meshes) { var bytesPerVertex = 12; if (mesh.HasNormals) { bytesPerVertex += 12; } if (mesh.HasTextureCoords(0)) { bytesPerVertex += 8; } var vertexCount = mesh.VertexCount; var meshSizeInBytes = vertexCount * bytesPerVertex; using (var stream = new SlimDX.DataStream(meshSizeInBytes, true, true)) { for (var i = 0; i < vertexCount; ++i) { stream.Write(mesh.Vertices[i]); if (mesh.HasNormals) { stream.Write(mesh.Normals[i]); } if (mesh.HasTextureCoords(0)) { stream.Write(mesh.TextureCoordinateChannels[0][i].X); stream.Write(mesh.TextureCoordinateChannels[0][i].Y); } } var vertexBuffer = new Graphics.VertexBuffer(device.Handle, stream, bytesPerVertex, vertexCount, SlimDX.Direct3D11.PrimitiveTopology.TriangleList); var indices = mesh.GetIndices(); if (indices != null && indices.Count() > 0) { var indexBuffer = new Graphics.IndexBuffer(device.Handle, indices); return new Graphics.Mesh(vertexBuffer, indexBuffer); } var result = new Graphics.Mesh(vertexBuffer); if (resourceType.Equals(typeof(Graphics.Mesh))) { return result; } else { meshes.Add(result); } } } if (meshes.Count > 0) { return new Graphics.MeshGroup(meshes); } else { throw new KeyNotFoundException("Failed to load mesh: " + identifier); } } }
/// <summary> /// Loads this scene node from a given binary reader. /// </summary> /// <param name="reader">Binary reader to load this scene node from.</param> public override void Load(BinaryReader reader) { base.Load(reader); _event = reader.ReadString(); int flagMask = reader.ReadInt32(); _visible = (flagMask & 1) != 0; _enabled = (flagMask & 2) != 0; _solid = (flagMask & 4) != 0; if ((flagMask & 262144) != 0) { string meshUrl = reader.ReadString(); if (ResourceManager.ResourceExists(meshUrl) == true) _mesh = GraphicsManager.LoadMesh(meshUrl, 0); } if ((flagMask & 8) != 0) { string imageUrl = reader.ReadString(); int cellWidth = reader.ReadInt32(); int cellHeight = reader.ReadInt32(); int hSpacing = reader.ReadInt16(); int vSpacing = reader.ReadInt16(); if (ResourceManager.ResourceExists(imageUrl) == true) _image = GraphicsManager.LoadImage(imageUrl,cellWidth,cellHeight,hSpacing,vSpacing, 0); } if ((flagMask & 16) != 0) { string fontUrl = reader.ReadString(); if (ResourceManager.ResourceExists(fontUrl) == true) _bitmapFont = GraphicsManager.LoadFont(fontUrl); } if ((flagMask & 32) != 0) _text = reader.ReadString(); if ((flagMask & 64) != 0) { _boundingRectangle.X = reader.ReadInt32(); _boundingRectangle.Y = reader.ReadInt32(); } if ((flagMask & 128) != 0) { _boundingRectangle.Width = reader.ReadInt32(); _boundingRectangle.Height = reader.ReadInt32(); } if ((flagMask & 256) != 0) _frame = reader.ReadInt32(); if ((flagMask & 512) != 0) _renderMode = (EntityRenderMode)reader.ReadByte(); else _renderMode = EntityRenderMode.Image; if ((flagMask & 1024) != 0) _blendMode = (BlendMode)reader.ReadByte(); else _blendMode = BlendMode.Alpha; if ((flagMask & 2048) != 0) _color = reader.ReadInt32(); else _color = unchecked((int)0xFFFFFFFF); if ((flagMask & 4096) != 0) { if (_collisionPolygon == null) InitializeCollision(); int count = reader.ReadInt32(); _collisionPolygon.Layers = new int[count]; for (int i = 0; i < count; i++) _collisionPolygon.Layers[i] = reader.ReadInt32(); } if ((flagMask & 8192) != 0) { _collisionRectangle.X = reader.ReadInt32(); _collisionRectangle.Y = reader.ReadInt32(); } if ((flagMask & 16384) != 0) { _collisionRectangle.Width = reader.ReadInt32(); _collisionRectangle.Height = reader.ReadInt32(); } if ((flagMask & 32768) != 0) _depthLayer = reader.ReadInt32(); if ((flagMask & 65536) != 0) _depthMode = (EntityDepthMode)reader.ReadByte(); if ((flagMask & 131072) != 0) _shader = GraphicsManager.LoadShader(reader.ReadString()); }
/// <summary> /// Resets this entity to the state it was in when it was created. /// </summary> public override void Reset() { base.Reset(); if (_collisionPolygon != null) DeinitializeCollision(); _forceVisibility = false; _forceBoundingBoxVisibility = false; _forceCollisionBoxVisibility = false; _visible = true; _enabled = true; _solid = false; _event = ""; _renderEventLines = false; _eventNodes.Clear(); _eventLineColor = unchecked((int)0xFFFF0000); _image = null; _mesh = null; _frame = 0; _renderMode = EntityRenderMode.Rectangle; _boundingRectangle = new Rectangle(0, 0, 16, 16); _collisionRectangle = new Rectangle(0, 0, 16, 16); _color = unchecked((int)0xFFFFFFFF); _blendMode = BlendMode.Alpha; _text = ""; _bitmapFont = null; _renderBoundingBox = false; _renderCollisionBox = false; _renderSizingPoints = false; _boundingBoxColor = unchecked((int)0xFF0000FF); _collisionBoxColor = unchecked((int)0xFF666666); _sizingPointsColor = unchecked((int)0xFFFFFFFF); _sizingPointsSize = 5; _collisionPolygon = null; _depthLayer = 0; _depthMode = EntityDepthMode.SubtractCollisionBoxBottom; _triggered = false; _shader = null; }