/// <summary> /// Initializes mesh with new value. /// Unless the heightmap is small, it won't all fit into a single MeshBuffer. /// This function chops it into pieces and generates a buffer from each one. /// </summary> public void Init(VideoDriver driver, HeightMap map, float s, ColorFunc cf) { width = map.Width; height = map.Height; scale = s; if (Mesh.MeshBufferCount > 0) { Mesh.RemoveMeshBuffer(0, Mesh.MeshBufferCount); } int sw = 0xffff / (height + 1); // maximum vertices per meshbuffer for (int y0 = 0; y0 < height; y0 += sw) { int y1 = y0 + sw; if (y1 >= height) { y1 = height - 1; // the last one might be narrower } addStrip(map, cf, y0, y1); } Mesh.SetDirty(); Mesh.RecalculateBoundingBox(); }
public void Draw(VideoDriver driver, Texture cellTexture) { int th = cellTexture.Size.Height; Recti[] srcRect = new Recti[5] { new Recti(th * 0, 0, th * 1, th), // [0] passable == -1 new Recti(th * 1, 0, th * 2, th), // [1] impassable == -2 new Recti(th * 2, 0, th * 3, th), // [2] start == -3 new Recti(th * 3, 0, th * 4, th), // [3] finish == -4 new Recti(th * 4, 0, th * 5, th) // [4] path == -5 }; for (int i = 0; i < cells.GetLength(0); i++) { for (int j = 0; j < cells.GetLength(1); j++) { int k = -1 - cells[i, j]; if (k >= 0 && k < srcRect.Length) { batchSrcRect[i * cells.GetLength(1) + j] = srcRect[k]; } } } driver.Draw2DImageBatch(cellTexture, batchDestPos, batchSrcRect); }
static void Main(string[] args) { IrrlichtDevice device = IrrlichtDevice.CreateDevice( DriverType.OpenGL, new Dimension2Di(640, 480), 16, false, false, false); device.SetWindowCaption("testing irrlicht engine lol"); VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; GUIEnvironment gui = device.GUIEnvironment; gui.AddStaticText("Hello World! This is the Irrlicht Software renderer!", new Recti(10, 10, 260, 22), true); smgr.AddCameraSceneNode(null, new Vector3Df(0, 30, -40), new Vector3Df(0, 5, 0)); while (device.Run()) { driver.BeginScene(ClearBufferFlag.All, new Color(100, 101, 140)); smgr.DrawAll(); gui.DrawAll(); driver.EndScene(); } device.Drop(); }
/// <summary> /// Sets the material textures for the mesh. /// </summary> private void SetMaterials(VideoDriver driver, AnimatedMeshSceneNode node) { List <Material> materials = new List <Material>(); //mat.Type = MaterialType.Solid; foreach (var materialInstance in cdata.materialInstances) { Material mat = new Material(); foreach (var material in materialInstance.instanceParameters) { switch (material.Name) { case "Diffuse": Texture diffTexture = GetTexture(driver, (material as CHandle).Handle); mat.SetTexture(0, diffTexture); break; case "Normal": Texture normTexture = GetTexture(driver, (material as CHandle).Handle); mat.SetTexture(1, normTexture); //mat.Type = MaterialType.NormalMapSolid; break; } } materials.Add(mat); } for (int i = 0; i < cdata.meshInfos.Count; i++) { if (cdata.meshInfos[i].materialID < materials.Count) { Material mat = materials[(int)cdata.meshInfos[i].materialID]; node.SetMaterialTexture(i, mat.GetTexture(i)); } } }
private void createTexture(int size) { VideoDriver drv = device.VideoDriver; Texture o = texture; texture = drv.AddTexture(new Dimension2Di(size), "tex"); TexturePainter p = texture.Painter; p.Lock(TextureLockMode.WriteOnly); for (int i = 0; i < p.MipMapLevelHeight; i++) { p.SetLine(0, i, p.MipMapLevelWidth - 1, i, new Color(200, 200, 200)); } p.Unlock(true); guiImage.Image = texture; sceneNodePainter.SetMaterialTexture(0, texture); if (o != null) { drv.RemoveTexture(o); } }
static void drawTextureManagerActivity() { if (selectedNode != null) { return; } if (tasksAddedToTextureManager == 0) { return; } int l = textureManager.GetCommandQueueLength(); if (l == 0) { tasksAddedToTextureManager = 0; return; } VideoDriver v = irr.Driver; float p = (tasksAddedToTextureManager - l) / (float)tasksAddedToTextureManager; if (p > 1) { p = 1; } Recti r = new Recti(v.ScreenSize.Width - 140, 20, v.ScreenSize.Width - 24, 30); v.Draw2DRectangleOutline(r, new Color(0x88446699)); r.LowerRightCorner = new Vector2Di(r.UpperLeftCorner.X + (int)(r.Width * p), r.LowerRightCorner.Y); v.Draw2DRectangle(r, new Color(0x88446699)); }
static void drawScrollPosition() { if (selectedNode != null) { return; } if (maxScrollPosition < 1) { return; } VideoDriver v = irr.Driver; if (v.ScreenSize.Height < 200) { return; } float p = irr.Scene.ActiveCamera.Position.Z / maxScrollPosition; v.Draw2DLine(v.ScreenSize.Width - 26, 80, v.ScreenSize.Width - 26, v.ScreenSize.Height - 80, new Color(0x88446699)); float y = (v.ScreenSize.Height - 80 - 80 - 40) * (1.0f - p); Recti r = new Recti(v.ScreenSize.Width - 29, (int)y + 80, v.ScreenSize.Width - 22, (int)y + 80 + 40); v.Draw2DRectangle(r, new Color(0x88446699)); }
public void Draw(VideoDriver driver) { driver.SetTransform(TransformationState.World, Matrix.Identity); // set material Material m = Material.IdentityNoLighting; m.Wireframe = true; m.BackfaceCulling = false; m.Type = MaterialType.TransparentVertexAlpha; m.ZWrite = false; // draw back lines m.ZBuffer = ComparisonFunc.Greater; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertBack, indBoth, PrimitiveType.Lines); // draw front lines m.ZBuffer = ComparisonFunc.LessEqual; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertFront, indBoth, PrimitiveType.Lines); // draw front points m.Thickness = 10; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertFront, indBoth, PrimitiveType.Points); }
static void Main() { device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(1280, 768)); // minimum: 1024 (which is 16x64) x 768 (which is 16x48) if (device == null) { return; } device.SetWindowCaption("Pathfinding - Irrlicht Engine"); device.OnEvent += new IrrlichtDevice.EventHandler(device_OnEvent); VideoDriver driver = device.VideoDriver; GUIFont font = device.GUIEnvironment.GetFont("../../media/fontlucida.png"); Color fontNormalColor = Color.SolidWhite; Color fontActionColor = Color.SolidYellow; Texture pathfindingTexture = driver.GetTexture("../../media/pathfinding.png"); int cellSize = pathfindingTexture.Size.Height; pathfinding = new Pathfinding(64, 48, cellSize, 0, 0); pathfinding.SetCell(4, 4, Pathfinding.CellType.Start); pathfinding.SetCell(pathfinding.Width - 5, pathfinding.Height - 5, Pathfinding.CellType.Finish); while (device.Run()) { driver.BeginScene(ClearBufferFlag.Color); pathfinding.FindPath(); pathfinding.Draw(driver, pathfindingTexture); // draw info panel Vector2Di v = new Vector2Di(pathfinding.Width * pathfinding.CellSize + 20, 20); font.Draw("FPS: " + driver.FPS, v, fontNormalColor); v.Y += 32; font.Draw("Map size: " + pathfinding.Width + " x " + pathfinding.Height, v, fontNormalColor); v.Y += 16; font.Draw("Shortest path: " + (pathfinding.PathLength == -1 ? "N/A" : pathfinding.PathLength.ToString()), v, fontNormalColor); v.Y += 16; font.Draw("Calculation time: " + pathfinding.PathCalcTimeMs + " ms", v, fontNormalColor); v.Y += 32; font.Draw(workMode ? "[LMB] Set cell impassable" : "[LMB] Set Start cell", v, fontActionColor); v.Y += 16; font.Draw(workMode ? "[RMB] Set cell passable" : "[RMB] Set Finish cell", v, fontActionColor); v.Y += 16; font.Draw("[Space] Change mode", v, fontActionColor); v.Y += 32; font.Draw("[F1] Clean up the map", v, fontActionColor); v.Y += 16; font.Draw("[F2] Add random blocks", v, fontActionColor); driver.EndScene(); } device.Drop(); }
public FractalGenerator(IrrlichtDevice device) { this.device = device; driver = device.VideoDriver; screen = driver.ViewPort; regenerateTiles(); }
public FNBase(FNGame game) { _driver = game.Driver; _scene = game.Scene; _gui = game.Gui; game.OnUpdate += OnUpdate; }
public FractalGenerator(IrrlichtDevice device) { this.device = device; driver = device.VideoDriver; screen = driver.ViewPort; regenerateTiles(); }
public void Draw(bool debugDrawGenerator = false) { VideoDriver driver = device.VideoDriver; // draw driver.SetMaterial(cubeMaterial); foreach (GridLayer l in layers) { if (!l.MeshIsReady) { continue; } driver.SetTransform(TransformationState.World, l.Transform); foreach (MeshBuffer mb in l.Mesh.MeshBuffers) { driver.DrawMeshBuffer(mb); } } // draw debug info if (debugDrawGenerator) { foreach (GridLayer l in layers) { if (!l.MeshIsReady) { continue; } if (l.Generation == gridGeneration - 1) { driver.SetMaterial(Material.IdentityRedWireframe); driver.SetTransform(TransformationState.World, l.Transform); Color c = Color.SolidRed; float x1 = -(CubeSize * GridDim) / 2; float z1 = -(CubeSize * GridDim) / 2; float x2 = x1 + (GridDim - 1) * CubeSize; float z2 = z1 + (GridDim - 1) * CubeSize; driver.Draw3DLine(new Line3Df(x1, 0, z1, x2, 0, z1), c); driver.Draw3DLine(new Line3Df(x1, 0, z1, x1, 0, z2), c); driver.Draw3DLine(new Line3Df(x2, 0, z1, x2, 0, z2), c); driver.Draw3DLine(new Line3Df(x1, 0, z2, x2, 0, z2), c); foreach (MeshBuffer mb in l.Mesh.MeshBuffers) { driver.DrawMeshBuffer(mb); } break; } } } }
void CSampleSceneNode_OnRender() { ushort[] indices = new ushort[] { 0, 2, 3, 2, 1, 3, 1, 0, 3, 2, 0, 1 }; VideoDriver driver = SceneManager.VideoDriver; driver.SetMaterial(material); driver.SetTransform(TransformationState.World, AbsoluteTransformation); driver.DrawVertexPrimitiveList(vertices, indices); }
/// <summary> /// Try to get the texture file. /// </summary> private Texture GetTexture(VideoDriver driver, string handleFilename) { string modPath = renderHelper.getW3Mod().ModCookedDirectory; string texturePath = Path.ChangeExtension(Path.Combine(modPath, handleFilename) .Replace("Mod\\Cooked", "Raw\\Mod") .Replace("DLC\\Cooked", "Raw\\DLC"), null); string[] textureFileExtensions = { ".dds", ".bmp", ".tga", ".jpg", ".jpeg", ".png", ".xbm" }; Texture texture = null; foreach (var textureFileExtension in textureFileExtensions) { var texturepath = Path.ChangeExtension(texturePath, textureFileExtension); if (File.Exists(texturepath)) { texture = driver.GetTexture(texturePath + textureFileExtension); if (texture != null) { return(texture); } ; } } string dlcPath = renderHelper.getW3Mod().DlcCookedDirectory; string texturePath1 = Path.ChangeExtension(Path.Combine(dlcPath, handleFilename) .Replace("Mod\\Cooked", "Raw\\Mod") .Replace("DLC\\Cooked", "Raw\\DLC"), null); texture = null; foreach (var textureFileExtension in textureFileExtensions) { var texturepath = Path.ChangeExtension(texturePath, textureFileExtension); if (File.Exists(texturepath)) { texture = driver.GetTexture(texturePath + textureFileExtension); if (texture != null) { break; } } } //ImageUtility.Xbm2Dds(); if (texture == null && !suppressTextureWarning) { // try to extract from game files suppressTextureWarning = true; Logger.LogString($"Could not parse texture: {texturePath} or {texturePath1}", Logtype.Error); } return(texture); }
public LaserDataSceneNode(SceneNode parent, SceneManager mgr, int id) : base(parent, mgr, id) { _mgr = mgr; _driver = _mgr.VideoDriver; Material.Wireframe = false; Material.Lighting = false; create_mesh(); }
static void drawPreviewPlateTooltip() { if (hoveredNode == null || !hoveredNode.Visible) { return; } int k = hoveredNode.ID; Texture t = hoveredNode.GetMaterial(0).GetTexture(0); if (t != null && t.Name.Path != "NoPreviewTexture") { k = hoveredNode.ID & (0xFFFFFFF ^ SelectableNodeIdFlag); } string s = previewPlateInfo.ContainsKey(k) ? previewPlateInfo[k] : "???"; if (s != null) { Vector2Di p = irr.Device.CursorControl.Position + new Vector2Di(16); GUIFont f = irr.GUI.Skin.GetFont(GUIDefaultFont.Default); Dimension2Di d = f.GetDimension(s); d.Inflate(16, 12); Recti r = new Recti(p, d); VideoDriver v = irr.Driver; int ax = r.LowerRightCorner.X - v.ScreenSize.Width; int ay = r.LowerRightCorner.Y - v.ScreenSize.Height; if (ax > 0 || ay > 0) { if (ax < 0) { ax = 0; } if (ay < 0) { ay = 0; } r.Offset(-ax, -ay); } v.Draw2DRectangle(r, new Color(0xbb223355)); v.Draw2DRectangleOutline(r, new Color(0xbb445577)); f.Draw(s, r.UpperLeftCorner + new Vector2Di(8, 6), Color.SolidYellow); } }
static void Main() { IrrlichtDevice device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(800, 600)); device.SetWindowCaption("RGB swirl example - Irrlicht Lime"); VideoDriver driver = device.VideoDriver; SceneManager scene = device.SceneManager; var camera = scene.AddCameraSceneNode(null, new Vector3Df(0, 0, -15), new Vector3Df()); camera.ViewMatrixAffector = camera.ProjectionMatrix.GetInverse(); var lightRed = scene.AddLightSceneNode(null, new Vector3Df(0, 40, 0)); lightRed.LightData.DiffuseColor = new Colorf(1, 0, 0); var a = scene.CreateFlyCircleAnimator(new Vector3Df(), 40, 0.0003f, new Vector3Df(0, 0, 1), 0.000f); lightRed.AddAnimator(a); a.Drop(); var lightGreen = scene.AddLightSceneNode(null, new Vector3Df(-30, -20, 0)); lightGreen.LightData.DiffuseColor = new Colorf(0, 1, 0); a = scene.CreateFlyCircleAnimator(new Vector3Df(), 40, 0.0003f, new Vector3Df(0, 0, 1), 0.333f); lightGreen.AddAnimator(a); a.Drop(); var lightBlue = scene.AddLightSceneNode(null, new Vector3Df(30, -20, 0)); lightBlue.LightData.DiffuseColor = new Colorf(0, 0, 1); a = scene.CreateFlyCircleAnimator(new Vector3Df(), 40, 0.0003f, new Vector3Df(0, 0, 1), 0.667f); lightBlue.AddAnimator(a); a.Drop(); var node = scene.AddSphereSceneNode(5.5f, 255); node.SetMaterialFlag(MaterialFlag.BackFaceCulling, false); node.SetMaterialFlag(MaterialFlag.PointCloud, true); node.GetMaterial(0).Thickness = 4; while (device.Run()) { node.Rotation = new Vector3Df(device.Timer.Time / 1, device.Timer.Time / 2, device.Timer.Time / 3); driver.BeginScene(ClearBufferFlag.Depth); scene.DrawAll(); driver.EndScene(); } device.Drop(); }
static void Main() { device = IrrlichtDevice.CreateDevice(DriverType.OpenGL, new Dimension2Di(800, 600)); device.SetWindowCaption("Sphere Camera - Irrlicht Engine"); driver = device.VideoDriver; scene = device.SceneManager; sphere = scene.AddSphereSceneNode(5, 100); sphere.SetMaterialTexture(0, driver.GetTexture("../../media/earth.jpg")); sphere.TriangleSelector = scene.CreateTriangleSelector(sphere.Mesh, sphere); sphere.TriangleSelector.Drop(); scene.AmbientLight = new Colorf(0.2f, 0.2f, 0.2f); LightSceneNode light = scene.AddLightSceneNode(); light.Position = new Vector3Df(-10, 10, -10); camera = new SphereCamera(device, new Vector3Df(0), 8, 20, 10, 0, 0); camera.Inclination = 200; path = new SpherePath(5.4f); GUIFont font = device.GUIEnvironment.BuiltInFont; device.OnEvent += new IrrlichtDevice.EventHandler(device_OnEvent); device.PostEvent(new Event('r', KeyCode.KeyR, true)); // pretend user pressed [R] while (device.Run()) { driver.BeginScene(); scene.DrawAll(); path.Draw(driver); font.Draw("Press [Arrows], [LMB] and [Mouse Scroll] to change view", 10, 10, Color.SolidYellow); font.Draw("Press [RMB] on Earth to place new path point", 10, 20, Color.SolidYellow); font.Draw("Press [R] to reload path data from file", 10, 30, Color.SolidYellow); font.Draw("Press [C] to clean up", 10, 40, Color.SolidYellow); font.Draw(driver.FPS.ToString() + " fps", 10, driver.ScreenSize.Height - 40, Color.SolidYellow); font.Draw(path.PointCount.ToString() + " point(s)", 10, driver.ScreenSize.Height - 30, Color.SolidYellow); font.Draw(camera.ToString(), 10, driver.ScreenSize.Height - 20, Color.SolidYellow); driver.EndScene(); device.Yield(); } path.Drop(); device.Drop(); }
static void Main() { device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(1280, 720)); if (device == null) { return; } VideoDriver driver = device.VideoDriver; SceneManager scene = device.SceneManager; device.SetWindowCaption("Abstract Trace - Irrlicht Engine"); device.OnEvent += Device_OnEvent; GUIFont font = device.GUIEnvironment.GetFont("../../media/fontlucida.png"); Color textColor = Color.SolidWhite; CameraSceneNode camera = scene.AddCameraSceneNode(); camera.FarValue = 20000; SceneNodeAnimator a = scene.CreateFlyCircleAnimator(new Vector3Df(), (AbstractTrace.CubeSize * AbstractTrace.GridDim) / 1.25f, 0.000025f, new Vector3Df(0.1f, 1, 0)); camera.AddAnimator(a); a.Drop(); trace = new AbstractTrace(device); trace.Init(); while (device.Run()) { driver.BeginScene(); scene.DrawAll(); if (!isPaused) { trace.Step(); } trace.Draw(drawGenerator); font.Draw("[G]enerator: " + (drawGenerator ? "ON" : "OFF"), new Vector2Di(20, 20), textColor); font.Draw("[P]ause: " + (isPaused ? "ON" : "OFF"), new Vector2Di(20, 35), textColor); font.Draw("Cubes: " + trace.GetTotalCubeCount(), new Vector2Di(20, 50), textColor); font.Draw("FPS: " + driver.FPS, new Vector2Di(20, 65), textColor); driver.EndScene(); } trace.Drop(); device.Drop(); }
public void Render() { VideoDriver drv = device.VideoDriver; drv.SetRenderTarget(textureRTT, true, true, new Color(20, 80, 180)); sceneNodeRTT.Visible = false; device.SceneManager.DrawAll(); device.GUIEnvironment.DrawAll(); drv.SetRenderTarget(RenderTarget.FrameBuffer, true, true, new Color(40, 180, 240)); sceneNodeRTT.Visible = true; device.SceneManager.DrawAll(); device.GUIEnvironment.DrawAll(); }
public void DrawShadowVolume(VideoDriver driver, bool isDebug = false) { lock (visibleShadowVerticesBufferLocker) { if (visibleShadowVerticesBuffer == null || visibleShadowVerticesBuffer.Count == 0) { return; } driver.SetTransform(TransformationState.World, Matrix.Identity); if (isDebug) { Material material = new Material(); material.Lighting = false; material.Type = MaterialType.TransparentVertexAlpha; driver.SetMaterial(material); for (int i = 0; i < visibleShadowVerticesBuffer.Count; i += 3) { driver.Draw3DTriangle( visibleShadowVerticesBuffer[i], visibleShadowVerticesBuffer[i + 1], visibleShadowVerticesBuffer[i + 2], new Color(0x80000000)); } material.Wireframe = true; material.BackfaceCulling = false; material.ZBuffer = ComparisonFunc.Always; driver.SetMaterial(material); for (int i = 0; i < visibleShadowVerticesBuffer.Count; i += 3) { driver.Draw3DTriangle( visibleShadowVerticesBuffer[i], visibleShadowVerticesBuffer[i + 1], visibleShadowVerticesBuffer[i + 2], new Color(0x80ff0000)); } } else { driver.DrawStencilShadowVolume(visibleShadowVerticesBuffer); driver.DrawStencilShadow(false, shadowColor); } } }
static void Main(string[] args) { device = IrrlichtDevice.CreateDevice(DriverType.OpenGL, new Dimension2Di(800, 600)); device.SetWindowCaption("Sphere Camera - Irrlicht Engine"); driver = device.VideoDriver; scene = device.SceneManager; sphere = scene.AddSphereSceneNode(5, 100); sphere.SetMaterialTexture(0, driver.GetTexture("../../media/earth.jpg")); sphere.TriangleSelector = scene.CreateTriangleSelector(sphere.Mesh, sphere); sphere.TriangleSelector.Drop(); scene.AmbientLight = new Colorf(0.2f, 0.2f, 0.2f); LightSceneNode light = scene.AddLightSceneNode(); light.Position = new Vector3Df(-10, 10, -10); camera = new SphereCamera(device, new Vector3Df(0), 8, 20, 10, 0, 0); camera.Inclination = 200; path = new SpherePath(5.4f); GUIFont font = device.GUIEnvironment.BuiltInFont; device.OnEvent += new IrrlichtDevice.EventHandler(device_OnEvent); device.PostEvent(new Event('r', KeyCode.KeyR, true)); // pretend user pressed [R] while (device.Run()) { driver.BeginScene(); scene.DrawAll(); path.Draw(driver); font.Draw("Press [Arrows], [LMB] and [Mouse Scroll] to change view", 10, 10, Color.OpaqueYellow); font.Draw("Press [RMB] on Earth to place new path point", 10, 20, Color.OpaqueYellow); font.Draw("Press [R] to reload path data from file", 10, 30, Color.OpaqueYellow); font.Draw("Press [C] to clean up", 10, 40, Color.OpaqueYellow); font.Draw(driver.FPS.ToString() + " fps", 10, driver.ScreenSize.Height - 40, Color.OpaqueYellow); font.Draw(path.PointCount.ToString() + " point(s)", 10, driver.ScreenSize.Height - 30, Color.OpaqueYellow); font.Draw(camera.ToString(), 10, driver.ScreenSize.Height - 20, Color.OpaqueYellow); driver.EndScene(); } path.Drop(); device.Drop(); }
static void Main(string[] args) { device = IrrlichtDevice.CreateDevice(DriverType.OpenGL, new Dimension2Di(1024, 600)); device.SetWindowCaption("LightningShots - Irrlicht Engine"); VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; device.FileSystem.AddFileArchive("../../media/map-20kdm2.pk3"); AnimatedMesh mesh = smgr.GetMesh("20kdm2.bsp"); MeshSceneNode node = smgr.AddMeshSceneNode(mesh.GetMesh(0)); node.Position = new Vector3Df(-1300, -144, -1249); node.SetMaterialType(MaterialType.LightMapLightingM4); node.SetMaterialFlag(MaterialFlag.Lighting, true); node.TriangleSelector = smgr.CreateTriangleSelector(node.Mesh, node); node.TriangleSelector.Drop(); smgr.AmbientLight = new Colorf(0.15f, 0.14f, 0.13f); CameraSceneNode camera = smgr.AddCameraSceneNodeFPS(); lightningShot = new LightningShot(smgr, node.TriangleSelector); device.OnEvent += new IrrlichtDevice.EventHandler(device_OnEvent); device.CursorControl.Visible = false; while (device.Run()) { driver.BeginScene(true, true, new Color(100, 80, 75)); smgr.DrawAll(); lightningShot.Draw(device.Timer.Time); GUIFont f = device.GUIEnvironment.BuiltInFont; f.Draw("Use [LMB] to shoot", 10, 10, Color.OpaqueYellow); f.Draw("Total lightnings: " + lightningShot.TotalLightnings, 10, 20, Color.OpaqueWhite); f.Draw("Total shots: " + lightningShot.TotalShots, 10, 30, Color.OpaqueWhite); f.Draw(driver.FPS + " fps", 10, 40, Color.OpaqueWhite); driver.EndScene(); } lightningShot.Drop(); device.Drop(); }
public WaterSceneNode(SceneNode parent, SceneManager mgr, Dimension2Df tileSize, Dimension2D tileCount, Dimension2D precision, int id) : base(parent, mgr, id) { _scene = mgr; _driver = mgr.VideoDriver; AnimatedMesh wmesh = _scene.AddHillPlaneMesh("watermesh" + _current, tileSize, tileCount, 0, new Dimension2Df(0, 0), new Dimension2Df(1, 1)); _current++; int dmat; if (_driver.DriverType == DriverType.OpenGL) dmat = _driver.GPUProgrammingServices.AddHighLevelShaderMaterial( WATER_VERTEX_GLSL, "main", VertexShaderType._1_1, WATER_FRAGMENT_GLSL, "main", PixelShaderType._1_1, OnShaderSet, MaterialType.TransparentAlphaChannel, 0); else dmat = _driver.GPUProgrammingServices.AddHighLevelShaderMaterial( WATER_HLSL, "vertexMain", VertexShaderType._2_0, WATER_HLSL, "pixelMain", PixelShaderType._2_0, OnShaderSet, MaterialType.TransparentAlphaChannel, 2); if (_driver.DriverType == DriverType.OpenGL) ClampShader = _driver.GPUProgrammingServices.AddHighLevelShaderMaterial( CLAMP_VERTEX_GLSL, "main", VertexShaderType._1_1, CLAMP_FRAGMENT_GLSL, "main", PixelShaderType._1_1, OnShaderSet, MaterialType.TransparentAlphaChannel, 1); else ClampShader = _driver.GPUProgrammingServices.AddHighLevelShaderMaterial( CLAMP_HLSL, "vertexMain", VertexShaderType._2_0, CLAMP_HLSL, "pixelMain", PixelShaderType._2_0, OnShaderSet, MaterialType.TransparentAlphaChannel, 3); _waternode = _scene.AddMeshSceneNode(wmesh.GetMesh(0), this, -1); _waternode.SetMaterialType(dmat); _waternode.SetMaterialFlag(MaterialFlag.BackFaceCulling, false); _waternode.SetMaterialFlag(MaterialFlag.Lighting, false); _waternode.SetMaterialFlag(MaterialFlag.FogEnable, false); _rt = _driver.CreateRenderTargetTexture(precision); _waternode.SetMaterialTexture(0, _rt); CameraSceneNode oldcam = _scene.ActiveCamera; _fixedcam = _scene.AddCameraSceneNode(null); if (oldcam != null) _scene.ActiveCamera = oldcam; }
public BeamNode(SceneNode parent, SceneManager mgr, int id, string szBeam) : base(parent, mgr, id) { smgr = mgr; driver = smgr.VideoDriver; Material = new Material(); // Setup the beam material Material.Wireframe = false; Material.Lighting = false; Material.MaterialType = MaterialType.TransparentAlphaChannel; Material.Texture1 = mgr.VideoDriver.GetTexture(szBeam); // Default to 32 units for the scale flScale = 32.0f; // Default to white beamColor.Set(255, 255, 255, 255); }
static void Main(string[] args) { IrrlichtDevice device = IrrlichtDevice.CreateDevice(DriverType.OpenGL, new Dimension2Di(640, 480), 16, false); VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; smgr.AddCameraSceneNode(null, new Vector3Df(0, -40, 0), new Vector3Df(0)); CSampleSceneNode myNode = new CSampleSceneNode(smgr.RootNode, smgr, 667); SceneNodeAnimator anim = smgr.CreateRotationAnimator(new Vector3Df(0.8f, 0, 0.8f)); if (anim != null) { myNode.AddAnimator(anim); anim.Drop(); anim = null; } myNode.Drop(); myNode = null; int frames = 0; while (device.Run()) { driver.BeginScene(true, true, new Color(100, 100, 100)); smgr.DrawAll(); driver.EndScene(); if (++frames == 100) { device.SetWindowCaption(String.Format( "Custom Scene Node - Irrlicht Engine [{0}] fps: {1}", driver.Name, driver.FPS)); frames = 0; } } device.Drop(); }
static void Main(string[] args) { device = IrrlichtDevice.CreateDevice(DriverType.Direct3D9, new Dimension2Di(1280, 720)); if (device == null) { return; } VideoDriver driver = device.VideoDriver; SceneManager scene = device.SceneManager; CameraSceneNode camera = scene.AddCameraSceneNode(); camera.FarValue = 20000; SceneNodeAnimator a = scene.CreateFlyCircleAnimator(new Vector3Df(), (AbstractTrace.CubeSize * AbstractTrace.GridDim) / 1.25f, 0.000025f, new Vector3Df(0.1f, 1, 0)); camera.AddAnimator(a); a.Drop(); trace = new AbstractTrace(device); trace.Init(); int lastFps = -1; while (device.Run()) { driver.BeginScene(); scene.DrawAll(); trace.Step(); trace.Draw(); driver.EndScene(); int fps = driver.FPS; if (fps != lastFps) { device.SetWindowCaption("Abstract Trace - Irrlicht Engine [" + fps + " fps; " + trace.GetTotalCubeCount() + " cubes]"); lastFps = fps; } } trace.Drop(); device.Drop(); }
public void DrawShadowVolume(VideoDriver driver, bool isDebug = false) { lock (visibleShadowVerticesBufferLocker) { if (visibleShadowVerticesBuffer == null || visibleShadowVerticesBuffer.Count == 0) return; driver.SetTransform(TransformationState.World, Matrix.Identity); if (isDebug) { Material material = new Material(); material.Lighting = false; material.Type = MaterialType.TransparentVertexAlpha; driver.SetMaterial(material); for (int i = 0; i < visibleShadowVerticesBuffer.Count; i += 3) driver.Draw3DTriangle( visibleShadowVerticesBuffer[i], visibleShadowVerticesBuffer[i + 1], visibleShadowVerticesBuffer[i + 2], new Color(0x80000000)); material.Wireframe = true; material.BackfaceCulling = false; material.ZBuffer = ComparisonFunc.Always; driver.SetMaterial(material); for (int i = 0; i < visibleShadowVerticesBuffer.Count; i += 3) driver.Draw3DTriangle( visibleShadowVerticesBuffer[i], visibleShadowVerticesBuffer[i + 1], visibleShadowVerticesBuffer[i + 2], new Color(0x80ff0000)); } else { driver.DrawStencilShadowVolume(visibleShadowVerticesBuffer); driver.DrawStencilShadow(false, shadowColor); } } }
private void initGUI(int size) { GUIEnvironment gui = device.GUIEnvironment; VideoDriver drv = gui.VideoDriver; gui.Clear(); gui.AddImage( drv.GetTexture("../../media/lime_logo_alpha.png"), new Vector2Di(30, 0)); guiWindow = gui.AddWindow(new Recti(20, 120, size + 20 + 20, size + 120 + 20 + 20 + 30), false, "Paint"); guiSize128 = gui.AddButton(new Recti(10, 30, 40, 30 + 20), guiWindow, -1, "128"); guiSize256 = gui.AddButton(new Recti(50, 30, 80, 30 + 20), guiWindow, -1, "256"); guiSize512 = gui.AddButton(new Recti(90, 30, 120, 30 + 20), guiWindow, -1, "512"); guiImage = gui.AddImage(new Recti(10, 30 + 30, size + 10 - 1, size + 30 - 1 + 30), true, guiWindow); gui.Focus = guiImage; }
public ExperienceBar(GUIEnvironment guienv, Recti rectangle, int id = -1, GUIElement parent = null) : base(GUIElementType.Unknown, guienv, parent, rectangle) { xWidth = rectangle.LowerRightCorner.X - rectangle.UpperLeftCorner.X; gui = guienv; if (Parent != null) { bar = new Recti(Parent.RelativePosition.UpperLeftCorner + rectangle.UpperLeftCorner, Parent.RelativePosition.UpperLeftCorner + rectangle.LowerRightCorner); } else { bar = rectangle; } if (parent != null) gui.RootElement.AddChild(this); videoDriver = gui.VideoDriver; fillcolor = Color.OpaqueGreen; emptycolor = Color.OpaqueRed; bordercolor = Color.OpaqueBlack; border = bar; toFill = new Recti(); empty = new Recti(); SetProgress(0); }
/// <summary> /// Try to get the texture file. /// </summary> private Texture GetTexture(VideoDriver driver, string handleFilename) { string modPath = renderHelper.getW3Mod().ModDirectory; string texturePath = Path.ChangeExtension(Path.GetFullPath(modPath + "\\Bundle\\" + handleFilename) .Replace("Mod\\Bundle", "Raw\\Mod\\TextureCache") .Replace("DLC\\Bundle", "Raw\\DLC\\TextureCache"), null); string[] textureFileExtensions = { ".dds", ".bmp", ".tga", ".jpg", ".jpeg", ".png", ".xbm" }; Texture texture = null; foreach (var textureFileExtension in textureFileExtensions) { texture = driver.GetTexture(texturePath + textureFileExtension); if (texture != null) { return(texture); } ; } string dlcPath = renderHelper.getW3Mod().DlcDirectory; string texturePath1 = Path.ChangeExtension(Path.GetFullPath(dlcPath + "\\Bundle\\" + handleFilename) .Replace("Mod\\Bundle", "Raw\\Mod\\TextureCache") .Replace("DLC\\Bundle", "Raw\\DLC\\TextureCache"), null); texture = null; foreach (var textureFileExtension in textureFileExtensions) { texture = driver.GetTexture(texturePath + textureFileExtension); if (texture != null) { break; } } //ImageUtility.Xbm2Dds(); if (texture == null && !suppressTextureWarning) { suppressTextureWarning = true; MessageBox.Show("Have you extracted texture files properly?" + "\n\n" + "Could not parse texture: " + texturePath + " or " + texturePath1, "Missing texture!"); } return(texture); }
public bool InitDevices(Control target_window) { _target_window = target_window; Dimension2D dim = new Dimension2D(target_window.Size.Width, target_window.Size.Height); _device = new IrrlichtDevice(DriverType.OpenGL, dim, 32, false, false, false, false, target_window.Handle); _device.Resizeable = true; //_device.OnEvent += new OnEventDelegate(_device_OnEvent); _scene = _device.SceneManager; _driver = _device.VideoDriver; return(true); }
void loadCellMesh() { MeshManipulator s = m_device.SceneManager.MeshManipulator; VideoDriver d = m_device.VideoDriver; m_meshCell = m_device.SceneManager.GetMesh("cell.obj"); s.FlipSurfaces(m_meshCell); // i don't know why, but somehow this one OBJ exported by Blender has flipped faces when opened by Irrlicht fitMesh(m_meshCell); s.SetVertexColors(m_meshCell, Color.SolidWhite); s.MakePlanarTextureMapping(m_meshCell, 0.10f); Material m = new Material(); m.Type = MaterialType.Reflection2Layer; m.SetTexture(0, d.GetTexture("TEXTURE-unk.jpg")); m.SetTexture(1, d.GetTexture("TEXTURE-ref.jpg")); m_meshCell.MeshBuffers[0].SetMaterial(m); s.Transform(m_meshCell, new Matrix(new Vector3Df(0), new Vector3Df(0, -90, 180))); s.RecalculateNormals(m_meshCell); }
static void Main(string[] args) { IrrlichtDevice device = IrrlichtDevice.CreateDevice( DriverType.Software, new Dimension2Di(640, 480), 16, false, false, false); device.SetWindowCaption("Hello World! - Irrlicht Engine Demo"); VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; GUIEnvironment gui = device.GUIEnvironment; gui.AddStaticText("Hello World! This is the Irrlicht Software renderer!", new Recti(10, 10, 260, 22), true); // AnimatedMesh mesh = smgr.GetMesh("../../media/sydney.md2"); // AnimatedMeshSceneNode node = smgr.AddAnimatedMeshSceneNode(mesh); // // if (node != null) // { // node.SetMaterialFlag(MaterialFlag.Lighting, false); // node.SetMD2Animation(AnimationTypeMD2.Stand); // node.SetMaterialTexture(0, driver.GetTexture("../../media/sydney.bmp")); // } smgr.AddCameraSceneNode(null, new Vector3Df(0, 30, -40), new Vector3Df(0, 5, 0)); while (device.Run()) { driver.BeginScene(true, true, new Color(100, 101, 140)); smgr.DrawAll(); gui.DrawAll(); driver.EndScene(); } device.Drop(); }
private static void Main() { IrrlichtDevice device = IrrlichtDevice.CreateDevice( DriverType.OpenGL, new Dimension2Di(640, 480), 16, false, false, false); device.SetWindowCaption("Rockplanets BUILD 16 (DEBUG MODE)"); VideoDriver driver = device.VideoDriver; SceneManager smgr = device.SceneManager; GUIEnvironment gui = device.GUIEnvironment; CameraSceneNode cam = smgr.AddCameraSceneNode(); cam.Target = new Vector3Df(0); SceneNodeAnimator anim = smgr.CreateFlyCircleAnimator(new Vector3Df(0, 15, 0), 30.0f); cam.AddAnimator(anim); anim.Drop(); SceneNode cube = smgr.AddCubeSceneNode(20f); cube.SetMaterialFlag(MaterialFlag.Lighting, false); while (device.Run()) { driver.BeginScene(ClearBufferFlag.All, new Color(235, 235, 235)); smgr.DrawAll(); gui.DrawAll(); driver.EndScene(); } device.Drop(); }
public void Draw(VideoDriver driver, Texture cellTexture) { int th = cellTexture.Size.Height; Recti[] srcRect = new Recti[5] { new Recti(th * 0, 0, th * 1, th), // [0] passable == -1 new Recti(th * 1, 0, th * 2, th), // [1] impassable == -2 new Recti(th * 2, 0, th * 3, th), // [2] start == -3 new Recti(th * 3, 0, th * 4, th), // [3] finish == -4 new Recti(th * 4, 0, th * 5, th) // [4] path == -5 }; for (int i = 0; i < cells.GetLength(0); i++) { for (int j = 0; j < cells.GetLength(1); j++) { int k = -1 - cells[i, j]; if (k >= 0 && k < srcRect.Length) batchSrcRect[i * cells.GetLength(1) + j] = srcRect[k]; } } driver.Draw2DImageBatch(cellTexture, batchDestPos, batchSrcRect); }
/// <summary> /// Initializes mesh with new value. /// Unless the heightmap is small, it won't all fit into a single MeshBuffer. /// This function chops it into pieces and generates a buffer from each one. /// </summary> public void Init(VideoDriver driver, HeightMap map, float s, ColorFunc cf) { width = map.Width; height = map.Height; scale = s; if (Mesh.MeshBufferCount > 0) Mesh.RemoveMeshBuffer(0, Mesh.MeshBufferCount); int sw = 0xffff / (height + 1); // maximum vertices per meshbuffer for (int y0 = 0; y0 < height; y0 += sw) { int y1 = y0 + sw; if (y1 >= height) y1 = height - 1; // the last one might be narrower addStrip(map, cf, y0, y1); } Mesh.RecalculateBoundingBox(); }
public Tile(int screenX, int screenY, Dimension2Di screenDimension, VideoDriver driver) { ScreenPos = new Vector2Di(screenX, screenY); Texture = driver.AddTexture(screenDimension, string.Format("TileTexture({0},{1})", screenX, screenY)); TexturePainter = Texture.Painter; }
public void Draw(VideoDriver driver) { driver.SetTransform(TransformationState.World, Matrix.Identity); // set material Material m = Material.IdentityNoLighting; m.Wireframe = true; m.BackfaceCulling = false; m.Type = MaterialType.TransparentVertexAlpha; m.ZWrite = false; // draw back lines m.ZBuffer = ComparisonFunc.Greater; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertBack, indBoth, PrimitiveType.Lines); // draw front lines m.ZBuffer = ComparisonFunc.LessEqual; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertFront, indBoth, PrimitiveType.Lines); // draw front points m.Thickness = 10; driver.SetMaterial(m); driver.DrawVertexPrimitiveList(vertFront, indBoth, PrimitiveType.Points); }
public P3DSimplexNoiseTerrain(SceneNode parent, SceneManager mgr, int id, int vertsPerRow, int vertsPerCol, int cellSpacing, float heightScale) : base(parent, mgr, id) { _mgr = mgr; _driver = _mgr.VideoDriver; Material = new Material(); Material.Lighting = false; _numVertsPerRow = vertsPerRow; _numVertsPerCol = vertsPerCol; _cellSpacing = cellSpacing; _heightScale = heightScale; _numCellsPerRow = _numVertsPerRow - 1; _numCellsPerCol = _numVertsPerCol - 1; _width = _numCellsPerRow * _cellSpacing; _depth = _numCellsPerCol * _cellSpacing; NumVertices = _numVertsPerRow * _numVertsPerCol; _numIndices = (_numCellsPerRow * _numCellsPerCol) * 6; _numTriangles = (_numCellsPerRow * _numCellsPerCol) * 2; _indices = new ushort[_numIndices]; int startX = -_width / 2; int startZ = _depth / 2; int endX = _width / 2; int endZ = -_depth / 2; Box3D = new Box3D(new Vector3D(startX, -_heightScale, startZ), new Vector3D(endX, _heightScale, endZ)); const float uCoordIncrementSize = 1.0f; const float vCoordIncrementSize = 1.0f; _heights = new float[NumVertices]; int i = 0; for (int z = startZ; z >= endZ; z -= _cellSpacing) { int j = 0; for (int x = startX; x <= endX; x += _cellSpacing) { int index = i * _numVertsPerRow + j; // large noise. float height = PerlinSimplexNoise.noise(x * 0.0001f, z * 0.0001f) * _heightScale; // detail noise. height += PerlinSimplexNoise.noise(x * 0.001f, z * 0.001f) * _heightScale / 10; Vertex3D v = new Vertex3D( new Vector3D(x, height, z), new Vector3D(0, 1, 0), Color.Black, new Vector2D(j * uCoordIncrementSize, i * vCoordIncrementSize) ); _buffer.SetVertex((uint)index, v); j++; } i++; } uint baseIndex = 0; for (uint k = 0; k < _numCellsPerRow; k++) { for (uint j = 0; j < _numCellsPerCol; j++) { _buffer.SetIndex(baseIndex + 0, (ushort)(k * _numVertsPerRow + j)); _buffer.SetIndex(baseIndex + 1, (ushort)(k * _numVertsPerRow + j + 1)); _buffer.SetIndex(baseIndex + 2, (ushort)((k + 1) * _numVertsPerRow + j)); _buffer.SetIndex(baseIndex + 3, (ushort)((k + 1) * _numVertsPerRow + j)); _buffer.SetIndex(baseIndex + 4, (ushort)(k * _numVertsPerRow + j + 1)); _buffer.SetIndex(baseIndex + 5, (ushort)((k + 1) * _numVertsPerRow + j + 1)); baseIndex += 6; } } }
public TTFont(VideoDriver driver) : base(driver.Raw) { Initialize(TTFont_Create(driver.Raw)); }
/// <summary> /// Létrehoz egy sizex*sizey méretű ablakot, windowCaption címmel és deviceType renderelési eszközzel. /// </summary> /// <param name="windowCaption">Ablak címe</param> /// <param name="sizex">Ablak szélessége</param> /// <param name="sizey">Ablak magassága</param> /// <param name="deviceType">A render eszköz típusa ("DriverType.OpenGL;" (OpenGL) vagy "DriverType.Direct3D8;"/"DriverType.Direct3D9;" (DirectX))</param> /// <param name="mapName">Betöltendő pálya neve a kiterjesztés nélkül (pl. "devmap")</param> /// <param name="pak0">A pak0 fájl neve (pl. "pak0" vagy "pack1")</param> /// <param name="pak1">A pak1 fájl neve (pl. "pak1" vagy "pack4")</param> /// <param name="pak2">A pak2 fájl neve (pl. "pak2" vagy "pack2")</param> public static void createScreen(string windowCaption, int sizex, int sizey, DriverType deviceType, string mapName, string pak0, string pak1, string pak2, bool isFullScreen) { //Ablakot megjeleníteni if (isFullScreen == true) { device = IrrlichtDevice.CreateDevice(deviceType, new Dimension2Di(sizex, sizey), 32, true, false, true); } else { device = IrrlichtDevice.CreateDevice(deviceType, new Dimension2Di(sizex, sizey), 32, false, false, true); } if (device == null) return; AnimatedMesh q3levelmesh = null; device.OnEvent += new IrrlichtDevice.EventHandler(device_OnEvent); device.SetWindowCaption(Property.modName + " Build " + Property.modVersion); driver = device.VideoDriver; smgr = device.SceneManager; GUIEnvironment gui = device.GUIEnvironment; //fadein GUIInOutFader fader = device.GUIEnvironment.AddInOutFader(); fader.SetColor(new Color(0, 0, 0, 255)); fader.FadeIn(2000); //hurtOverlay = device.GUIEnvironment.AddImage(driver.GetTexture("./Content/2D/Overlays/hurt.png"), new Vector2Di(0, 0)); //hurtOverlay.Visible = false; GUIImage copyrightScreen = device.GUIEnvironment.AddImage(driver.GetTexture("./Content/2D/exit.tga"), new Vector2Di(0, 0)); float guiScalex = sizex / 800; float guiScaley = sizey / 600; copyrightScreen.Visible = false; copyrightScreen.ScaleImage = true; copyrightScreen.SetMaxSize(new Dimension2Di(sizex, sizey)); copyrightScreen.SetMinSize(new Dimension2Di(sizex, sizey)); //Betölteni a mapot try { device.FileSystem.AddFileArchive("./Content/PK3/" + pak0 + ".edsf"); } catch (Exception ex) { Logger.Log("pak0 fajl betoltese sikertelen vagy nem talalhato, a jatek nem tud betoltodni"); string error = ex.ToString(); Logger.Log(error); Environment.Exit(0); } try { device.FileSystem.AddFileArchive("./Content/PK3/" + pak1 + ".edsf"); } catch (Exception ex) { Logger.Log("pak1 fajl betoltese sikertelen vagy nem talalhato, ignoralva"); string error = ex.ToString(); Logger.Log(error); } try { device.FileSystem.AddFileArchive("./Content/PK3/" + pak2 + ".edsf"); } catch (Exception ex) { Logger.Log("pak2 fajl betoltese sikertelen vagy nem talalhato, ignoralva"); string error = ex.ToString(); Logger.Log(error); } try { q3levelmesh = smgr.GetMesh(mapName + ".bsp"); } catch (Exception ex) { Logger.Log("Palya betoltese sikertelen vagy nem talalhato, a jatek nem tud betoltodni"); string error = ex.ToString(); Logger.Log(error); Environment.Exit(0); } MeshSceneNode q3node = null; q3node = smgr.AddOctreeSceneNode(q3levelmesh.GetMesh(0), null, IDFlag_IsPickable); q3node.Position = new Vector3Df(-1350, -130, -1400); SceneNode node = null; if (mapName == "rpg") { IsRPG = true; } //LightSceneNode light = smgr.AddLightSceneNode(q3node, new Vector3Df(-1319, -118, -1410), new Color(255, 255, 255), 600.0, 10); //Half-Life Headcrab AnimatedMeshSceneNode anode3 = smgr.AddAnimatedMeshSceneNode(smgr.GetMesh("./Content/3D/headcrab.mdl")); if (IsRPG) { anode3.Position = new Vector3Df(-1212, -180, -1346); Audio.playWave("./Content/Music/rpg.mp3"); } else { anode3.Position = new Vector3Df(-1372.951f, -145.9882f, -1319.71f); } anode3.Rotation = new Vector3Df(0, 0, 0); anode3.AnimationSpeed = 1; Scenes.changeAnimation(anode3, 1, 31); anode3.SetMaterialFlag(MaterialFlag.Lighting, true); anode3.GetMaterial(0).NormalizeNormals = true; anode3.GetMaterial(0).Lighting = false; //Yodan anode2 = smgr.AddAnimatedMeshSceneNode(smgr.GetMesh("./Content/3D/yodan.mdl")); anode2.Position = new Vector3Df(-1355, -200, -1410); anode2.AnimationSpeed = 15; anode2.SetMaterialFlag(MaterialFlag.Lighting, true); anode2.GetMaterial(0).NormalizeNormals = true; anode2.GetMaterial(0).Lighting = false; anode2.SetTransitionTime(3); Scenes.changeYodanAnimation(anode2, "idle"); //SkyBox SceneNode skybox = smgr.AddSkyBoxSceneNode("./Contents/2D/Skybox/mountains_up.jpg", "./Contents/2D/Skybox/mountains_dn.jpg", "./Contents/2D/Skybox/mountains_lf.jpg", "./Contents/2D/Skybox/mountains_rt.jpg", "./Contents/2D/Skybox/mountains_ft.jpg", "./Contents/2D/Skybox/mountains_bk.jpg"); skybox.Visible = true; //FPS kamera hozzáadása camera = smgr.AddCameraSceneNodeFPS(); camera.Position = new Vector3Df(-1625.723f, -145.9937f, -1532.087f); camera.Target = new Vector3Df(-1491.555f, -1434.106f, -1368.737f); //fegyver AnimatedMesh weaponmesh = smgr.GetMesh("./Content/3D/blades.mdl"); AnimatedMeshSceneNode weapon = smgr.AddAnimatedMeshSceneNode(weaponmesh, camera, 30); weapon.Scale = new Vector3Df(0.5f, 0.5f, 0.5f); weapon.Position = new Vector3Df(0, 0, 15); weapon.Rotation = new Vector3Df(0, -90, 0); Scenes.changeAnimation(weapon, 1, 1); weapon.Visible = true; //fizika TriangleSelector selector; selector = smgr.CreateOctreeTriangleSelector(q3levelmesh.GetMesh(0), q3node, 128); q3node.TriangleSelector = selector; anim = smgr.CreateCollisionResponseAnimator(selector, camera, new Vector3Df(30, 50, 30), new Vector3Df(0, -10, 0), new Vector3Df(0, 30, 0)); //Overlay GUIImage overlay = device.GUIEnvironment.AddImage(driver.GetTexture("./Content/2D/Overlays/vignette.png"), new Vector2Di(0, 0)); overlay.ScaleImage = true; overlay.SetMaxSize(new Dimension2Di(sizex, sizey)); overlay.SetMinSize(new Dimension2Di(sizex, sizey)); selector.Drop(); camera.AddAnimator(anim); anim.Drop(); // fény lightMovementHelperNode = smgr.AddEmptySceneNode(); q3node = smgr.AddSphereSceneNode(2, 6, lightMovementHelperNode, -1, new Vector3Df(15, -10, 15)); q3node.SetMaterialFlag(MaterialFlag.Lighting, false); lightNode = q3node; //A Portré anode = smgr.AddAnimatedMeshSceneNode(smgr.GetMesh("./Content/3D/portrait.mdl")); anode.Position = new Vector3Df(-1177.601f, -137.975f, -1238.015f); anode.Rotation = new Vector3Df(0,0,0); anode.Scale = new Vector3Df(3); anode.AnimationSpeed = 1500; anode.SetMaterialFlag(MaterialFlag.Lighting, true); anode.GetMaterial(0).NormalizeNormals = true; anode.GetMaterial(0).Lighting = false; AnimatedMeshSceneNode anode4 = smgr.AddAnimatedMeshSceneNode(smgr.GetMesh("./Content/3D/waiter.mdl")); anode4.Position = new Vector3Df(-1130, -375, -1724); anode4.Rotation = new Vector3Df(0, -90, 0); anode4.Scale = new Vector3Df(2, 2, 2); anode4.SetMaterialFlag(MaterialFlag.Lighting, false); Scenes.changeAnimation(anode4, 0, 1); //Egér elrejtése device.CursorControl.Visible = false; GUIFont font = device.GUIEnvironment.BuiltInFont; SceneCollisionManager collMan = smgr.SceneCollisionManager; TextSceneNode headcrabName = smgr.AddTextSceneNode(font, "Yodan Lebegö Headcrab-je <Level 10>", new Color(255, 255, 0), null, anode3.Position + new Vector3Df(0, 25, 0), 0); TextSceneNode waiterName = smgr.AddTextSceneNode(font, "John <Level 15>", new Color(0, 255, 0), null, anode4.Position + new Vector3Df(0, 125, 0), 0); uint then = device.Timer.Time; float MOVEMENT_SPEED = 100.0f; //Energiagömb /*AnimatedMeshSceneNode anode5 = smgr.AddAnimatedMeshSceneNode(smgr.GetMesh("./Content/3D/core.mdl")); anode5.Position = new Vector3Df(-1355, 0, -1410); Scenes.changeAnimation(anode5, 0, 90); anode5.Scale = new Vector3Df(2.0f); Line3Df coreray = new Line3Df(-1355, 0, -1410, -1355, -500, -1410); driver.SetMaterial(anode5.GetMaterial(1)); driver.SetTransform(TransformationState.World, Matrix.Identity); driver.Draw3DLine(coreray, new Color(255,0,0));*/ GUIImage bartenderForm = device.GUIEnvironment.AddImage(driver.GetTexture("./Content/2D/bartender.png"), new Vector2Di(10, 10)); bartenderForm.ScaleImage = true; bartenderForm.Visible = false; bartenderForm.SetMinSize(new Dimension2Di(sizex - 10, sizey - 10)); bartenderForm.SetMaxSize(new Dimension2Di(sizex - 10, sizey - 10)); bool BartenderFormIsOpen = false; GUIImage ActionBar = device.GUIEnvironment.AddImage(driver.GetTexture("./Content/2D/Hud/Actionbar.tga"), new Vector2Di(0, 600 - 128)); //330, 110 790, 120 Recti expbarrect = new Recti(); ExperienceBar expbar = new ExperienceBar(gui, expbarrect,0, ActionBar); expbar.SetProgress(0); expbar.SetColors(new Color(255, 255, 0), new Color(255, 255, 255)); expbar.AddBorder(5, new Color(0, 0, 0)); expbar.SetMinSize(new Dimension2Di(128, 64)); expbar.SetMaxSize(new Dimension2Di(128, 64)); //Mi minek a része q3node.AddChild(anode); q3node.AddChild(anode2); q3node.AddChild(anode3); q3node.AddChild(anode4); TextSceneNode yodanName = smgr.AddTextSceneNode(font, "Yodan a Bérgyilkos <Level 90>", new Color(255, 0, 0), null, anode2.Position + new Vector3Df(0, 50, 0), 0); while (device.Run()) { driver.BeginScene(true, true, new Color(135, 206, 235)); smgr.DrawAll(); gui.DrawAll(); string printDate = dateTime.ToShortTimeString(); uint now = device.Timer.Time; float frameDeltaTime = (float)(now - then) / 1000.0f; then = now; Vector3Df nodePosition = camera.Position; if (font != null) { /*font.Draw("Build " + Property.modVersion, 5, 5, new Color(0, 0, 255)); font.Draw("pos= " + camera.Position, 5, 578 - 16, new Color(0, 0, 255)); font.Draw("tar= " + camera.Target, 5, 594 - 16, new Color(0, 0, 255));*/ font.Draw(Player.Experience(), new Vector2Di(505, 582), new Color(0,0,0)); } if (camera.Position.Z >= 10000) { font.Draw("Kiestél a Világból!", new Vector2Di(400, 300), new Color (0, 0, 0)); camera.Position = anode.Position; } if (Quest1Done) { yodanName.SetTextColor(new Color(255, 255, 0)); } if (IsKeyDown(KeyCode.Space)) { nodePosition.Y += MOVEMENT_SPEED * frameDeltaTime; } else if (IsKeyDown(KeyCode.LControl)) { nodePosition.Y -= MOVEMENT_SPEED * frameDeltaTime; } if (IsKeyDown(KeyCode.LShift)) { MOVEMENT_SPEED = 200.0f; } else { MOVEMENT_SPEED = 100.0f; } if (IsKeyDown(KeyCode.Esc)) { copyrightScreen.Visible = true; } if (IsKeyDown(KeyCode.KeyM)) { //Yodan.Run(new Vector3Df(-1642, -172, -1421), new Vector3Df(-1053, -167, -1416)); } if (IsKeyDown(KeyCode.KeyB)) { // Yodan.Wave(); Scripting.RunScript(Scripting.LoadScript()); } if (IsKeyDown(KeyCode.KeyV)) { //Yodan.Speak("./Content/Sound/vo/yodan/yo_20ft.mp3"); } else if (IsKeyDown(KeyCode.KeyN)) { //Yodan.Stand(); } else if (IsKeyDown(KeyCode.KeyC)) { //Yodan.WaveAndGreet(); } //Actionbar START //Auto-Attack if (IsKeyDown(KeyCode.Key1)) { if (!AutoAttack) { Delay(100); AutoAttack = true; if (currentWeapon == 1) { Scenes.changeAnimation(weapon, 11 + 24 + 25, 11 + 24 + 25 + 31 + 30); } else if (currentWeapon == 2) { Scenes.changeAnimation(weapon, 91 + 31 + 81 + 31, 91 + 31 + 81 + 31+90); } } else if (AutoAttack) { Delay(100); AutoAttack = false; if (currentWeapon == 1) { Scenes.changeAnimation(weapon, 1, 1); } else if (currentWeapon == 2) { Scenes.changeAnimation(weapon, 1, 90); } } } //Blades if (IsKeyDown(KeyCode.Key2)) { AnimatedMesh bladesmesh = smgr.GetMesh("./Content/3D/blades.mdl"); weapon.Mesh = bladesmesh; weapon.Scale = new Vector3Df(0.5f, 0.5f, 0.5f); weapon.Position = new Vector3Df(0, 0, 15); weapon.Rotation = new Vector3Df(0, -90, 0); Scenes.changeAnimation(weapon, 1, 1); currentWeapon = 1; } //Crossbow if (IsKeyDown(KeyCode.Key3)) { AnimatedMesh crossbowmesh = smgr.GetMesh("./Content/3D/crossbow.mdl"); weapon.Mesh = crossbowmesh; Scenes.changeAnimation(weapon, 1, 90); weapon.Scale = new Vector3Df(3.0f, 3.0f, 3.0f); currentWeapon = 2; } if (IsKeyDown(KeyCode.Key4)) { if (IsEtlapPickedUp) { bartenderForm.Visible = true; BartenderFormIsOpen = true; Audio.playWave("./Content/sound/paper_pickup.mp3"); } } //Actionbar END //elteszi/előveszi a fegyvert if(IsKeyDown(KeyCode.Tab)) { if(weaponHolster) { weapon.Visible = false; Audio.playWave("./Content/sound/weapon.mp3"); weaponHolster = false; } else { weapon.Visible = true; Audio.playWave("./Content/sound/weapon.mp3"); weaponHolster = true; } } if (IsKeyDown(KeyCode.MouseLButton)) { AutoAttack = true; if (currentWeapon == 1) { Scenes.changeAnimation(weapon, 11 + 24 + 25, 11 + 24 + 25 + 31 + 30); } else if (currentWeapon == 2) { Scenes.changeAnimation(weapon, 91 + 31 + 81 + 31, 91 + 31 + 81 + 31 + 90); } } else if (!IsKeyDown(KeyCode.MouseLButton)) { AutoAttack = false; if (currentWeapon == 1) { Scenes.changeAnimation(weapon, 1, 1); } else if (currentWeapon == 2) { Scenes.changeAnimation(weapon, 1, 90); } } if (IsKeyDown(KeyCode.KeyX)) { Texture yodanMissing = driver.GetTexture("./Content/2D/yodanmissing.tga"); Dimension2Di yodanMisSiz = yodanMissing.Size; yodanMisSiz = anode.GetMaterial(0).GetTexture(0).Size; anode.SetMaterialTexture(0, yodanMissing); } if (IsKeyDown(KeyCode.KeyE)) { //Bartender Johh On-Use Vector3Df camtarget = camera.Target; if (!BartenderFormIsOpen) { if (new Vector3Df(727, 221, -986) <= camtarget) { if (new Vector3Df(763, 276, -2329) >= camtarget) { if (camtarget > new Vector3Df(184, -1843, -1255)) { if (camtarget > new Vector3Df(138, -1837, -2318)) { bartenderForm.Visible = true; BartenderFormIsOpen = true; if (!IsEtlapPickedUp) { ActionBar.Image = driver.GetTexture("./Content/2D/Hud/Actionbar_etlap.tga"); Audio.playWave("./Content/sound/vo/waiter_john/teatime.mp3"); } IsEtlapPickedUp = true; Audio.playWave("./Content/sound/paper_pickup.mp3"); } } } } } else if (BartenderFormIsOpen) { bartenderForm.Visible = false; BartenderFormIsOpen = false; Audio.playWave("./Content/sound/paper_pickup.mp3"); } } if (IsKeyDown(KeyCode.KeyK)) { //Yodan.GoGhost(); } if (IsKeyDown(KeyCode.KeyJ)) { //Yodan.GoNormal(); } if (IsKeyDown(KeyCode.KeyL)) { } if (IsKeyDown(KeyCode.F7)) { Delay(500); takeScreenshot(device); } if (IsKeyDown(KeyCode.F9)) { Delay(500); string campos = camera.Position.ToString(); Logger.Log("position:" + campos); string camtar = camera.Target.ToString(); Logger.Log("target: " + camtar); } if (IsKeyDown(KeyCode.LShift)) { if (IsKeyDown(KeyCode.KeyY)) { Environment.Exit(0); } else if (IsKeyDown(KeyCode.KeyN)) { copyrightScreen.Visible = false; } } camera.Position = nodePosition; driver.EndScene(); } device.Drop(); }