示例#1
0
        public Renderer(int screenWidth, int screenHeight)
        {
            camera       = new Camera(GRID_X, GRID_Y, screenWidth, screenHeight, (float)Math.PI / 2.8f);
            frame_buffer = new PixelBuffer(screenWidth, screenHeight);

            // Generate placeholder texture
            textures         = new Dictionary <int, TextureDef>();
            sprites          = new Dictionary <int, SpriteDef>();
            missing_sprites  = new Dictionary <int, bool>();
            missing_textures = new Dictionary <int, bool>();

            PixelBuffer tex = new PixelBuffer(16, 16);

            Render.clear(tex, new Rgba(0, 0, 0));
            for (int y = 0; y < 16; y++)
            {
                for (int x = 0; x < 16; x++)
                {
                    byte b = (byte)(x * 16);
                    byte c = (byte)(y * 16);
                    Render.point(tex, x, y, new Rgba(0, b, c));
                }
            }
            default_sprite  = new SpriteDef(0, tex);
            default_texture = new TextureDef(0, tex);
            // Ray buffer used for storing ray cast results.
            ray_buffer = new RayData[camera.view_cols];
            for (int index = 0; index < ray_buffer.Length; index++)
            {
                ray_buffer[index] = new RayData();
            }
        }
    public Texture2D GenerateTexture(int phase)
    {
        TextureDef def = textureDefs[phase];

        currentTexture = new Texture2D(mainTexture.width, def.endPixelH - def.startPixelH);
        Color[] colors = mainTexture.GetPixels(0, mainTexture.height - def.endPixelH, mainTexture.width, def.endPixelH - def.startPixelH);
        currentTexture.SetPixels(0, 0, mainTexture.width, def.endPixelH - def.startPixelH, colors);
        currentTexture.Apply();
        prevTextureScale = textureScale;
        textureScale     = 1;
        return(currentTexture);
    }
示例#3
0
        public void renderFloor()
        {
            TextureDef tex         = textures[0];
            float      obsX        = -camera.x / camera.grid_x;
            float      obsY        = -camera.y / camera.grid_y;
            RayData    leftAngles  = ray_buffer[0];
            RayData    rightAngles = ray_buffer[ray_buffer.Length - 1];

            for (int screenY = frame_buffer.height / 2; screenY < frame_buffer.height; screenY++)
            {
                Render.floor(frame_buffer, screenY, 1, obsX, obsY, leftAngles, rightAngles, default_texture.pixelBuffer);
            }
        }
    public Texture2D GenerateTransitionTexture(int phaseA, int phaseB)
    {
        TextureDef def1 = textureDefs[phaseA];
        TextureDef def2 = textureDefs[phaseB];

        currentTexture = new Texture2D(mainTexture.width, def2.endPixelH - def1.startPixelH);

        Color[] colors = mainTexture.GetPixels(0, mainTexture.height - def2.endPixelH, mainTexture.width, def2.endPixelH - def1.startPixelH);
        currentTexture.SetPixels(0, 0, mainTexture.width, def2.endPixelH - def1.startPixelH, colors);
        prevTextureScale = textureScale;
        textureScale     = ((float)(def1.endPixelH - def1.startPixelH)) / (def2.endPixelH - def1.startPixelH);
        currentTexture.Apply();
        return(currentTexture);
    }
示例#5
0
        public async Task getTexturePixels(int id)
        {
            TextureDef tex = null;

            if (GameServer.server.texture_assets.TryGetValue(id, out tex) == false)
            {
                Console.WriteLine("Unable to fetch requested texture : " + id);
                return;
            }
            else
            {
                PixelBuffer buffer = tex.pixelBuffer;
                await Clients.Client(Context.ConnectionId).SendAsync("receiveTexturePixels", id, buffer.width, buffer.height, buffer.pixels);
            }
        }
示例#6
0
        /// <summary>
        /// renderCols()
        ///
        /// Renders the ray_buffer to the screen buffer.
        /// </summary>
        public void renderWalls(Map level_map)
        {
            RayData ray;

            for (int x = 0; x < frame_buffer.width; x++)
            {
                ray = ray_buffer[x];
                TextureDef tex = textures[0];
                if (textures.TryGetValue(ray.texture_id, out tex) == true && tex.pixelBuffer != null)
                {
                    Render.wallColumn(frame_buffer, x, 1, ray.dis, ray.texOfs, tex.pixelBuffer, new Rgba(0x0, 0x80, 0xFF, 0x08));
                }
                else
                {
                    Render.wallColumn(frame_buffer, x, 1, ray.dis, ray.texOfs, default_texture.pixelBuffer, new Rgba(0x0, 0x80, 0xFF, 0x08));
                    // If the sprite is to be requested, or being downloaded, dont request it.
                    if (missing_textures.ContainsKey(ray.texture_id) == false)
                    {
                        missing_textures.Add(ray.texture_id, false);
                    }
                }
            }
        }