func (p *PlayerEnt) Draw(game *Game) { var t *texture.Data var alpha gl.Ubyte if game.local.Side == p.Side() { alpha = gl.Ubyte(255.0 * (1.0 - p.Stats().Cloaking()/2)) } else { alpha = gl.Ubyte(255.0 * (1.0 - p.Stats().Cloaking())) } gl.Color4ub(255, 255, 255, alpha) // if p.Id() == 1 { t = texture.LoadFromPath(filepath.Join(base.GetDataDir(), "ships/ship.png")) // } else if p.Id() == 2 { // t = texture.LoadFromPath(filepath.Join(base.GetDataDir(), "ships/ship3.png")) // } else { // t = texture.LoadFromPath(filepath.Join(base.GetDataDir(), "ships/ship2.png")) // } t.RenderAdvanced( p.Position.X-float64(t.Dx())/2, p.Position.Y-float64(t.Dy())/2, float64(t.Dx()), float64(t.Dy()), p.Angle_, false) for _, proc := range p.Processes { proc.Draw(p.Id(), game.local.Gid, game) } base.EnableShader("status_bar") base.SetUniformF("status_bar", "inner", 0.08) base.SetUniformF("status_bar", "outer", 0.09) base.SetUniformF("status_bar", "buffer", 0.01) base.SetUniformF("status_bar", "frac", 1.0) gl.Color4ub(125, 125, 125, alpha/2) texture.Render(p.Position.X-100, p.Position.Y-100, 200, 200) health_frac := float32(p.Stats().HealthCur() / p.Stats().HealthMax()) if health_frac > 0.5 { color_frac := 1.0 - (health_frac-0.5)*2.0 gl.Color4ub(gl.Ubyte(255.0*color_frac), 255, 0, alpha) } else { color_frac := health_frac * 2.0 gl.Color4ub(255, gl.Ubyte(255.0*color_frac), 0, alpha) } base.SetUniformF("status_bar", "frac", health_frac) texture.Render(p.Position.X-100, p.Position.Y-100, 200, 200) base.EnableShader("") }
func (ms *ManaSource) Draw(zoom float64, dx float64, dy float64) { if ms.local.nodeTextureData == nil { // gl.Enable(gl.TEXTURE_2D) ms.local.nodeTextureData = make([]byte, ms.options.NumNodeRows*ms.options.NumNodeCols*3) gl.GenTextures(1, &ms.local.nodeTextureId) gl.BindTexture(gl.TEXTURE_2D, ms.local.nodeTextureId) gl.TexEnvf(gl.TEXTURE_ENV, gl.TEXTURE_ENV_MODE, gl.MODULATE) gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR) gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR) gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT) gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT) gl.TexImage2D( gl.TEXTURE_2D, 0, gl.RGB, gl.Sizei(ms.options.NumNodeRows), gl.Sizei(ms.options.NumNodeCols), 0, gl.RGB, gl.UNSIGNED_BYTE, gl.Pointer(&ms.local.nodeTextureData[0])) } for i := range ms.rawNodes { for c := 0; c < 3; c++ { color_frac := ms.rawNodes[i].Mana[c] * 1.0 / ms.options.NodeMagnitude color_range := float64(ms.options.MaxNodeBrightness - ms.options.MinNodeBrightness) ms.local.nodeTextureData[i*3+c] = byte( color_frac*color_range + float64(ms.options.MinNodeBrightness)) } } gl.Enable(gl.TEXTURE_2D) //gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, ms.local.nodeTextureId) gl.TexSubImage2D( gl.TEXTURE_2D, 0, 0, 0, gl.Sizei(ms.options.NumNodeRows), gl.Sizei(ms.options.NumNodeCols), gl.RGB, gl.UNSIGNED_BYTE, gl.Pointer(&ms.local.nodeTextureData[0])) base.EnableShader("nodes") base.SetUniformI("nodes", "width", ms.options.NumNodeRows*3) base.SetUniformI("nodes", "height", ms.options.NumNodeCols*3) base.SetUniformI("nodes", "drains", 1) base.SetUniformI("nodes", "tex0", 0) base.SetUniformI("nodes", "tex1", 1) base.SetUniformF("nodes", "zoom", float32(zoom)) gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, ms.local.nodeTextureId) // I have no idea why this value for move works, but it does. So, hooray. move := (dx - dy) / 2 texture.RenderAdvanced(move, -move, dy, dx, 3.1415926535/2, true) base.EnableShader("") gl.Disable(gl.TEXTURE_2D) }
func (p *multiDrain) Draw(src, obs game.Gid, game *game.Game) { if src != obs { return } ent := game.Ents[src] if ent == nil { return } base.EnableShader("status_bar") frac := p.Stored ready := math.Floor(frac) if ready == 0 { gl.Color4ub(255, 0, 0, 255) } else { gl.Color4ub(0, 255, 0, 255) } outer := 0.2 increase := 0.01 base.SetUniformF("status_bar", "frac", float32(frac-ready)) base.SetUniformF("status_bar", "inner", float32(outer-increase*(ready+1))) base.SetUniformF("status_bar", "outer", float32(outer)) base.SetUniformF("status_bar", "buffer", 0.01) texture.Render(ent.Pos().X-100, ent.Pos().Y-100, 200, 200) if ready > 0 { base.SetUniformF("status_bar", "frac", 1.0) base.SetUniformF("status_bar", "inner", float32(outer-ready*increase)) base.SetUniformF("status_bar", "outer", float32(outer)) texture.Render(ent.Pos().X-100, ent.Pos().Y-100, 200, 200) } base.EnableShader("") }
func (p *shieldProc) Draw(src, obs game.Gid, game *game.Game) { if src != obs { return } ent := game.Ents[src] if ent == nil { return } gl.Color4ub(0, 255, 0, 255) frac := float32(p.Shield / p.MaxShield) base.EnableShader("status_bar") base.SetUniformF("status_bar", "frac", frac) base.SetUniformF("status_bar", "inner", 0.2) base.SetUniformF("status_bar", "outer", 0.23) base.SetUniformF("status_bar", "buffer", 0.01) texture.Render(ent.Pos().X-100, ent.Pos().Y-100, 200, 200) base.EnableShader("") }
func (p *asplosionProc) Draw(src, obs game.Gid, game *game.Game) { base.EnableShader("circle") base.SetUniformF("circle", "edge", 0.7) gl.Color4ub(255, 50, 10, gl.Ubyte(150)) texture.Render( p.Pos.X-p.CurrentRadius, p.Pos.Y-p.CurrentRadius, 2*p.CurrentRadius, 2*p.CurrentRadius) base.EnableShader("") }
func (p *lightningBoltProc) Draw(src, obs game.Gid, game *game.Game) { if p.NumThinks < p.BuildThinks { return } base.EnableShader("lightning") base.SetUniformV2("lightning", "dir", p.Seg.Ray().Norm()) base.SetUniformV2("lightning", "bolt_root", p.Seg.P.Add(p.Seg.Q).Scale(0.5)) base.SetUniformF("lightning", "bolt_thickness", 1.1) gl.Disable(gl.TEXTURE_2D) displayWidth := p.Width * 10 perp := p.Seg.Ray().Cross().Norm().Scale(displayWidth / 2) move := float32(p.NumThinks) / float32(60) / 10.0 for i := 0; i < 3; i++ { base.SetUniformF("lightning", "rand_offset", float32(i)+move) if i == 2 { base.SetUniformF("lightning", "bolt_thickness", 1.3) } switch i { case 0: gl.Color4ub(255, 200, 200, 200) case 1: gl.Color4ub(255, 255, 200, 200) case 2: gl.Color4ub(255, 255, 230, 225) } gl.Begin(gl.QUADS) v := p.Seg.P.Add(perp) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) v = p.Seg.Q.Add(perp) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) v = p.Seg.Q.Sub(perp) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) v = p.Seg.P.Sub(perp) gl.Vertex2d(gl.Double(v.X), gl.Double(v.Y)) gl.End() } base.EnableShader("") }
func (c *CreepEnt) Draw(g *Game) { base.EnableShader("status_bar") base.SetUniformF("status_bar", "inner", 0.01) base.SetUniformF("status_bar", "outer", 0.03) base.SetUniformF("status_bar", "buffer", 0.01) base.SetUniformF("status_bar", "frac", 1.0) if c.Side() == g.local.Side { gl.Color4ub(100, 255, 100, 255) } else { gl.Color4ub(255, 100, 100, 255) } texture.Render(c.Position.X-100, c.Position.Y-100, 200, 200) base.SetUniformF("status_bar", "inner", 0.04) base.SetUniformF("status_bar", "outer", 0.045) base.SetUniformF("status_bar", "buffer", 0.01) base.SetUniformF("status_bar", "frac", 1.0) texture.Render(c.Position.X-100, c.Position.Y-100, 200, 200) base.EnableShader("") }
func (g *Game) RenderLosMask() { ent := g.Ents[g.local.Gid] if ent == nil { return } walls := g.local.temp.VisibleWallCache.GetWalls(int(ent.Pos().X), int(ent.Pos().Y)) gl.Disable(gl.TEXTURE_2D) gl.Color4ub(0, 0, 0, 255) gl.Begin(gl.TRIANGLES) for _, wall := range walls { if wall.Right(ent.Pos()) { continue } a := wall.P b := ent.Pos().Sub(wall.P).Norm().Scale(-10000.0).Add(wall.P) mid := wall.P.Add(wall.Q).Scale(0.5) c := ent.Pos().Sub(mid).Norm().Scale(-10000.0).Add(mid) d := ent.Pos().Sub(wall.Q).Norm().Scale(-10000.0).Add(wall.Q) e := wall.Q gl.Vertex2d(gl.Double(a.X), gl.Double(a.Y)) gl.Vertex2d(gl.Double(b.X), gl.Double(b.Y)) gl.Vertex2d(gl.Double(c.X), gl.Double(c.Y)) gl.Vertex2d(gl.Double(a.X), gl.Double(a.Y)) gl.Vertex2d(gl.Double(c.X), gl.Double(c.Y)) gl.Vertex2d(gl.Double(d.X), gl.Double(d.Y)) gl.Vertex2d(gl.Double(a.X), gl.Double(a.Y)) gl.Vertex2d(gl.Double(d.X), gl.Double(d.Y)) gl.Vertex2d(gl.Double(e.X), gl.Double(e.Y)) } gl.End() base.EnableShader("horizon") base.SetUniformV2("horizon", "center", ent.Pos()) base.SetUniformF("horizon", "horizon", float32(ent.Stats().Vision())) gl.Begin(gl.QUADS) dx := gl.Int(g.Level.Room.Dx) dy := gl.Int(g.Level.Room.Dy) gl.Vertex2i(0, 0) gl.Vertex2i(dx, 0) gl.Vertex2i(dx, dy) gl.Vertex2i(0, dy) gl.End() base.EnableShader("") }
func (m *Mine) Draw(g *Game) { base.EnableShader("status_bar") base.SetUniformF("status_bar", "inner", 0.01) base.SetUniformF("status_bar", "outer", 0.03) base.SetUniformF("status_bar", "buffer", 0.01) base.SetUniformF("status_bar", "frac", 1.0) gl.Color4ub(255, 255, 255, 255) texture.Render(m.Position.X-100, m.Position.Y-100, 200, 200) base.SetUniformF("status_bar", "inner", 0.04) base.SetUniformF("status_bar", "outer", 0.045) base.SetUniformF("status_bar", "buffer", 0.01) health_frac := float32(m.Stats().HealthCur() / m.Stats().HealthMax()) if health_frac > 0.5 { color_frac := 1.0 - (health_frac-0.5)*2.0 gl.Color4ub(gl.Ubyte(255.0*color_frac), 255, 0, 255) } else { color_frac := health_frac * 2.0 gl.Color4ub(255, gl.Ubyte(255.0*color_frac), 0, 255) } base.SetUniformF("status_bar", "frac", health_frac) texture.Render(m.Position.X-100, m.Position.Y-100, 200, 200) base.EnableShader("") }
func (cp *ControlPoint) Draw(g *Game) { base.EnableShader("status_bar") base.SetUniformF("status_bar", "inner", 0.0) base.SetUniformF("status_bar", "outer", 0.5) base.SetUniformF("status_bar", "buffer", 0.01) base.SetUniformF("status_bar", "frac", 1.0) gl.Color4ub(50, 50, 50, 50) texture.Render( cp.Position.X-cp.Radius, cp.Position.Y-cp.Radius, 2*cp.Radius, 2*cp.Radius) enemyColor := []gl.Ubyte{255, 0, 0, 100} allyColor := []gl.Ubyte{0, 255, 0, 100} neutralColor := []gl.Ubyte{100, 100, 100, 100} var rgba []gl.Ubyte if cp.Controlled { if g.local.Side == cp.Controller { rgba = allyColor } else { rgba = enemyColor } } else { rgba = neutralColor } // The texture is flipped if this is being drawn for the controlling side. // This makes it look a little nicer when someone neutralizes a control point // because it makes the angle of the pie slice thingy continue going in the // same direction as it passes the neutralization point. gl.Color4ub(rgba[0], rgba[1], rgba[2], rgba[3]) base.SetUniformF("status_bar", "frac", float32(cp.Control)) texture.RenderAdvanced( cp.Position.X-cp.Radius, cp.Position.Y-cp.Radius, 2*cp.Radius, 2*cp.Radius, 0, g.local.Side == cp.Controller) base.SetUniformF("status_bar", "inner", 0.45) base.SetUniformF("status_bar", "outer", 0.5) base.SetUniformF("status_bar", "frac", 1) gl.Color4ub(rgba[0], rgba[1], rgba[2], 255) texture.RenderAdvanced( cp.Position.X-cp.Radius, cp.Position.Y-cp.Radius, 2*cp.Radius, 2*cp.Radius, 0, g.local.Side == cp.Controller) if !cp.Controlled { base.SetUniformF("status_bar", "frac", float32(cp.Control)) if g.local.Side == cp.Controller { gl.Color4ub(allyColor[0], allyColor[1], allyColor[2], 255) } else { gl.Color4ub(enemyColor[0], enemyColor[1], enemyColor[2], 255) } texture.RenderAdvanced( cp.Position.X-cp.Radius, cp.Position.Y-cp.Radius, 2*cp.Radius, 2*cp.Radius, 0, g.local.Side == cp.Controller) } base.EnableShader("") }