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); }
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); }
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); } }
/// <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); } } } }