Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
        }
Beispiel #4
0
        /// <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));
                }
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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));
        }
Beispiel #7
0
        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));
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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();
        }
Beispiel #11
0
        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();
		}
Beispiel #13
0
        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;
                    }
                }
            }
        }
Beispiel #14
0
        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();
        }
Beispiel #17
0
        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);
            }
        }
Beispiel #18
0
        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();
        }
Beispiel #19
0
        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();
        }
Beispiel #20
0
        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();
        }
Beispiel #21
0
        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();
        }
Beispiel #22
0
        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);
                }
            }
        }
Beispiel #23
0
		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();
		}
Beispiel #24
0
        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();
        }
Beispiel #25
0
        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;
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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();
        }
Beispiel #28
0
        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();
        }
Beispiel #29
0
		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);
				}
			}
		}
Beispiel #30
0
        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;
        }
Beispiel #31
0
        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);
        }
Beispiel #32
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);
        }
Beispiel #34
0
        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);
        }
Beispiel #35
0
        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();
        }
Beispiel #36
0
        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();
        }
Beispiel #37
0
		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);
		}
Beispiel #38
0
		/// <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;
			}
Beispiel #40
0
		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);
		}
Beispiel #41
0
        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;
                }
            }
        }
Beispiel #42
0
 public TTFont(VideoDriver driver)
     : base(driver.Raw)
 {
     Initialize(TTFont_Create(driver.Raw));
 }
Beispiel #43
0
        /// <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();
        }