func (f *Furniture) Render(pos mathgl.Vec2, width float32) { var rgba [4]gl.Double gl.GetDoublev(gl.CURRENT_COLOR, &rgba[0]) gl.PushAttrib(gl.CURRENT_BIT) if !f.Blocks_los || !f.alpha_enabled { f.alpha = 1 } var tff gl.Double = 255 gl.Color4ub(gl.Ubyte(tff*rgba[0]), gl.Ubyte(tff*rgba[1]), gl.Ubyte(tff*rgba[2]), gl.Ubyte(tff*rgba[3]*gl.Double(f.alpha))) orientation := f.Orientations[f.Rotation] dy := width * float32(orientation.Texture.Data().Dy()) / float32(orientation.Texture.Data().Dx()) // orientation.Texture.Data().Render(float64(pos.X), float64(pos.Y), float64(width), float64(dy)) orientation.Texture.Data().RenderAdvanced(float64(pos.X), float64(pos.Y), float64(width), float64(dy), 0, !f.Flip) gl.PopAttrib() }
func (sp *SpawnPoint) RenderOnFloor() { re := topSpawnRegexp() if re == nil || !re.MatchString(sp.Name) { return } var rgba [4]gl.Double gl.GetDoublev(gl.CURRENT_COLOR, &rgba[0]) gl.PushAttrib(gl.CURRENT_BIT) gl.Disable(gl.TEXTURE_2D) // This just creates a color that is consistent among all spawn points whose // names match SpawnName-.* prefix := sp.Name for i := range prefix { if prefix[i] == '-' { prefix = prefix[0:i] break } } h := fnv.New32() h.Write([]byte(prefix)) hs := h.Sum32() gl.Color4ub(gl.Ubyte(hs%256), gl.Ubyte((hs/256)%256), gl.Ubyte((hs/(256*256))%256), gl.Ubyte(255*rgba[3])) base.EnableShader("box") base.SetUniformF("box", "dx", float32(sp.Dx)) base.SetUniformF("box", "dy", float32(sp.Dy)) if !sp.temporary { base.SetUniformI("box", "temp_invalid", 0) } else if !sp.invalid { base.SetUniformI("box", "temp_invalid", 1) } else { base.SetUniformI("box", "temp_invalid", 2) } (&texture.Object{}).Data().Render(float64(sp.X), float64(sp.Y), float64(sp.Dx), float64(sp.Dy)) base.EnableShader("") gl.PopAttrib() }
func (e *Entity) Render(pos mathgl.Vec2, width float32) { var rgba [4]float64 gl.GetDoublev(gl.CURRENT_COLOR, (*gl.Double)(&rgba[0])) e.last_render_width = width gl.Enable(gl.TEXTURE_2D) e.drawReticle(pos, rgba) if e.sprite.sp != nil { dxi, dyi := e.sprite.sp.Dims() dx := float32(dxi) dy := float32(dyi) tx, ty, tx2, ty2 := e.sprite.sp.Bind() gl.Begin(gl.QUADS) gl.TexCoord2d(gl.Double(tx), gl.Double(-ty)) gl.Vertex2f(gl.Float(pos.X), gl.Float(pos.Y)) gl.TexCoord2d(gl.Double(tx), gl.Double(-ty2)) gl.Vertex2f(gl.Float(pos.X), gl.Float(pos.Y+dy*width/dx)) gl.TexCoord2d(gl.Double(tx2), gl.Double(-ty2)) gl.Vertex2f(gl.Float(pos.X+width), gl.Float(pos.Y+dy*width/dx)) gl.TexCoord2d(gl.Double(tx2), gl.Double(-ty)) gl.Vertex2f(gl.Float(pos.X+width), gl.Float(pos.Y)) gl.End() } }