func (hv *HouseViewer) Draw(region gui.Region) { region.PushClipPlanes() defer region.PopClipPlanes() hv.Render_region = region hv.temp_floor_drawers = hv.temp_floor_drawers[0:0] if hv.Edit_mode { for _, spawn := range hv.house.Floors[0].Spawns { hv.temp_floor_drawers = append(hv.temp_floor_drawers, spawn) } } for _, fd := range hv.floor_drawers { hv.temp_floor_drawers = append(hv.temp_floor_drawers, fd) } hv.house.Floors[0].render(region, hv.fx, hv.fy, hv.angle, hv.zoom, hv.drawables, hv.Los_tex, hv.temp_floor_drawers) }
func (rv *RoomViewer) Draw(region gui.Region) { region.PushClipPlanes() defer region.PopClipPlanes() if rv.Render_region.X != region.X || rv.Render_region.Y != region.Y || rv.Render_region.Dx != region.Dx || rv.Render_region.Dy != region.Dy { rv.Render_region = region rv.makeMat() } gl.MatrixMode(gl.MODELVIEW) gl.PushMatrix() defer gl.PopMatrix() gl.LoadIdentity() gl.MultMatrixf(&rv.mat[0]) // rv.room.render(rv.mat, rv.left_wall_mat, rv.right_wall_mat) rv.room.setupGlStuff() rv.room.far_left.wall_alpha = 255 rv.room.far_right.wall_alpha = 255 rv.room.render(rv.mat, rv.left_wall_mat, rv.right_wall_mat, rv.zoom, 255, nil, nil, nil) return rv.cstack.Push(1, 1, 1, 1) defer rv.cstack.Pop() drawPrep() drawWall(rv.room, rv.mat, rv.left_wall_mat, rv.right_wall_mat, rv.Temp.WallTexture, doorInfo{}, rv.cstack, nil, 1.0) drawFloor(rv.room, rv.mat, rv.Temp.WallTexture, rv.cstack, nil, 1.0, nil) rv.drawFloor() if rv.edit_mode == editCells { rv.cstack.Pop() rv.cstack.Push(1, 1, 1, 0.1) } else { rv.cstack.Push(1, 1, 1, 1) defer rv.cstack.Pop() } drawFurniture(0, 0, rv.mat, rv.zoom, rv.room.Furniture, rv.Temp.Furniture, nil, rv.cstack, nil, 1.0) }
func (rc *RosterChooser) Draw(r gui.Region) { rc.Render_region = r r.PushClipPlanes() defer r.PopClipPlanes() gl.Enable(gl.TEXTURE_2D) { // Up button x := r.X y := r.Y + r.Dy - rc.layout.Up.Data().Dy() rc.render.up.X = x rc.render.up.Y = y rc.render.up.Dx = rc.layout.Up.Data().Dx() rc.render.up.Dy = rc.layout.Up.Data().Dy() if rc.mouse.Inside(rc.render.up) { gl.Color4d(1, 1, 1, 1) } else { gl.Color4d(0.8, 0.8, 0.8, 1) } rc.layout.Up.Data().RenderNatural(x, y) } { // Down button x := r.X y := r.Y + rc.layout.Down.Data().Dy() rc.render.down.X = x rc.render.down.Y = y rc.render.down.Dx = rc.layout.Down.Data().Dx() rc.render.down.Dy = rc.layout.Down.Data().Dy() if rc.mouse.Inside(rc.render.down) { gl.Color4d(1, 1, 1, 1) } else { gl.Color4d(0.8, 0.8, 0.8, 1) } rc.layout.Down.Data().RenderNatural(x, y) } { // Options rc.render.all_options.X = r.X + rc.layout.Down.Data().Dx() rc.render.all_options.Y = r.Y + r.Dy - rc.layout.Num_options*rc.layout.Option.Dy rc.render.all_options.Dx = rc.layout.Option.Dx rc.render.all_options.Dy = rc.layout.Num_options * rc.layout.Option.Dy rc.render.all_options.PushClipPlanes() x := rc.render.all_options.X y := r.Y + r.Dy - rc.layout.Option.Dy + int(float64(rc.layout.Option.Dy)*rc.focus_pos) for i := range rc.options { rc.render.options[i] = gui.Region{ gui.Point{x, y}, gui.Dims{rc.layout.Option.Dx, rc.layout.Option.Dy}, } hovered := rc.mouse.Inside(rc.render.options[i]) selected := rc.selected[i] selectable := rc.selector(i, rc.selected, false) rc.options[i].Draw(hovered, selected, selectable, rc.render.options[i]) y -= rc.layout.Option.Dy } rc.render.all_options.PopClipPlanes() } { // Text d := base.GetDictionary(15) x := r.X y := float64(r.Y) + d.MaxHeight()/2 x1 := float64(x + r.Dx/3) x2 := float64(x + (2*r.Dx)/3) rc.render.done = gui.Region{ gui.Point{x, r.Y}, gui.Dims{r.Dx / 2, int(d.MaxHeight() * 2)}, } rc.render.undo = gui.Region{ gui.Point{x + r.Dx/2, r.Y}, gui.Dims{r.Dx / 2, int(d.MaxHeight() * 2)}, } if rc.mouse.Inside(rc.render.done) { gl.Color4d(1, 1, 1, 1) } else { gl.Color4d(0.6, 0.6, 0.6, 1) } d.RenderString("Done", x1, y, 0, d.MaxHeight(), gui.Center) if rc.on_undo != nil { if rc.mouse.Inside(rc.render.undo) { gl.Color4d(1, 1, 1, 1) } else { gl.Color4d(0.6, 0.6, 0.6, 1) } d.RenderString("Undo", x2, y, 0, d.MaxHeight(), gui.Center) } } }
func (m *MainBar) Draw(region gui.Region) { m.region = region gl.Enable(gl.TEXTURE_2D) m.layout.Background.Data().Bind() gl.Color4d(1, 1, 1, 1) gl.Begin(gl.QUADS) gl.TexCoord2d(0, 0) gl.Vertex2i(region.X, region.Y) gl.TexCoord2d(0, -1) gl.Vertex2i(region.X, region.Y+region.Dy) gl.TexCoord2d(1, -1) gl.Vertex2i(region.X+region.Dx, region.Y+region.Dy) gl.TexCoord2d(1, 0) gl.Vertex2i(region.X+region.Dx, region.Y) gl.End() buttons := m.no_actions_buttons if m.ent != nil && len(m.ent.Actions) > m.layout.Actions.Count { buttons = m.all_buttons } for _, button := range buttons { button.RenderAt(region.X, region.Y) } ent := m.game.HoveredEnt() if ent == nil { ent = m.ent } if ent != nil && ent.Stats != nil { gl.Color4d(1, 1, 1, 1) ent.Still.Data().Bind() tdx := ent.Still.Data().Dx() tdy := ent.Still.Data().Dy() cx := region.X + m.layout.CenterStillFrame.X cy := region.Y + m.layout.CenterStillFrame.Y gl.Begin(gl.QUADS) gl.TexCoord2d(0, 0) gl.Vertex2i(cx-tdx/2, cy-tdy/2) gl.TexCoord2d(0, -1) gl.Vertex2i(cx-tdx/2, cy+tdy/2) gl.TexCoord2d(1, -1) gl.Vertex2i(cx+tdx/2, cy+tdy/2) gl.TexCoord2d(1, 0) gl.Vertex2i(cx+tdx/2, cy-tdy/2) gl.End() m.layout.Name.RenderString(ent.Name) m.layout.Ap.RenderString(fmt.Sprintf("Ap:%d", ent.Stats.ApCur())) m.layout.Hp.RenderString(fmt.Sprintf("Hp:%d", ent.Stats.HpCur())) m.layout.Corpus.RenderString(fmt.Sprintf("Corpus:%d", ent.Stats.Corpus())) m.layout.Ego.RenderString(fmt.Sprintf("Ego:%d", ent.Stats.Ego())) gl.Color4d(1, 1, 1, 1) m.layout.Divider.Data().Bind() tdx = m.layout.Divider.Data().Dx() tdy = m.layout.Divider.Data().Dy() cx = region.X + m.layout.Name.X cy = region.Y + m.layout.Name.Y - 5 gl.Begin(gl.QUADS) gl.TexCoord2d(0, 0) gl.Vertex2i(cx-tdx/2, cy-tdy/2) gl.TexCoord2d(0, -1) gl.Vertex2i(cx-tdx/2, cy+(tdy+1)/2) gl.TexCoord2d(1, -1) gl.Vertex2i(cx+(tdx+1)/2, cy+(tdy+1)/2) gl.TexCoord2d(1, 0) gl.Vertex2i(cx+(tdx+1)/2, cy-tdy/2) gl.End() } if m.ent != nil && m.ent.Stats != nil { // Actions { spacing := m.layout.Actions.Icon_size * float64(m.layout.Actions.Count) spacing = m.layout.Actions.Width - spacing spacing /= float64(m.layout.Actions.Count - 1) m.state.Actions.space = spacing s := m.layout.Actions.Icon_size num_actions := len(m.ent.Actions) xpos := m.layout.Actions.X if num_actions > m.layout.Actions.Count { xpos -= m.state.Actions.scroll_pos * (s + spacing) } d := base.GetDictionary(10) var r gui.Region r.X = int(m.layout.Actions.X) r.Y = int(m.layout.Actions.Y - d.MaxHeight()) r.Dx = int(m.layout.Actions.Width) r.Dy = int(m.layout.Actions.Icon_size + d.MaxHeight()) r.PushClipPlanes() gl.Color4d(1, 1, 1, 1) for i, action := range m.ent.Actions { // Highlight the selected action if action == m.game.current_action { gl.Disable(gl.TEXTURE_2D) gl.Color4d(1, 0, 0, 1) gl.Begin(gl.QUADS) gl.Vertex3d(xpos-2, m.layout.Actions.Y-2, 0) gl.Vertex3d(xpos-2, m.layout.Actions.Y+s+2, 0) gl.Vertex3d(xpos+s+2, m.layout.Actions.Y+s+2, 0) gl.Vertex3d(xpos+s+2, m.layout.Actions.Y-2, 0) gl.End() } gl.Enable(gl.TEXTURE_2D) action.Icon().Data().Bind() if action.Preppable(m.ent, m.game) { gl.Color4d(1, 1, 1, 1) } else { gl.Color4d(0.5, 0.5, 0.5, 1) } gl.Begin(gl.QUADS) gl.TexCoord2d(0, 0) gl.Vertex3d(xpos, m.layout.Actions.Y, 0) gl.TexCoord2d(0, -1) gl.Vertex3d(xpos, m.layout.Actions.Y+s, 0) gl.TexCoord2d(1, -1) gl.Vertex3d(xpos+s, m.layout.Actions.Y+s, 0) gl.TexCoord2d(1, 0) gl.Vertex3d(xpos+s, m.layout.Actions.Y, 0) gl.End() gl.Disable(gl.TEXTURE_2D) ypos := m.layout.Actions.Y - d.MaxHeight() - 2 d.RenderString(fmt.Sprintf("%d", i+1), xpos+s/2, ypos, 0, d.MaxHeight(), gui.Center) xpos += spacing + m.layout.Actions.Icon_size } r.PopClipPlanes() // Now, if there is a selected action, position it between the arrows if m.state.Actions.selected != nil { // a := m.state.Actions.selected d := base.GetDictionary(15) x := m.layout.Actions.X + m.layout.Actions.Width/2 y := float64(m.layout.ActionLeft.Y) str := fmt.Sprintf("%s:%dAP", m.state.Actions.selected.String(), m.state.Actions.selected.AP()) gl.Color4d(1, 1, 1, 1) d.RenderString(str, x, y, 0, d.MaxHeight(), gui.Center) } } // Conditions { gl.Color4d(1, 1, 1, 1) c := m.layout.Conditions d := base.GetDictionary(int(c.Size)) ypos := c.Y + c.Height - d.MaxHeight() + m.state.Conditions.scroll_pos var r gui.Region r.X = int(c.X) r.Y = int(c.Y) r.Dx = int(c.Width) r.Dy = int(c.Height) r.PushClipPlanes() for _, s := range m.ent.Stats.ConditionNames() { d.RenderString(s, c.X+c.Width/2, ypos, 0, d.MaxHeight(), gui.Center) ypos -= float64(d.MaxHeight()) } r.PopClipPlanes() } // Gear if m.ent.ExplorerEnt != nil && m.ent.ExplorerEnt.Gear != nil { gear := m.ent.ExplorerEnt.Gear layout := m.layout.Gear icon := gear.Small_icon.Data() icon.RenderNatural(int(layout.X), int(layout.Y)) d := base.GetDictionary(10) d.RenderString("Gear", layout.X+float64(icon.Dx())/2, layout.Y-d.MaxHeight(), 0, d.MaxHeight(), gui.Center) } } // Mouseover text if m.state.MouseOver.active { var x int switch m.state.MouseOver.location { case mouseOverActions: x = int(m.layout.Actions.X + m.layout.Actions.Width/2) case mouseOverConditions: x = int(m.layout.Conditions.X + m.layout.Conditions.Width/2) case mouseOverGear: default: base.Warn().Printf("Got an unknown mouseover location: %d", m.state.MouseOver.location) m.state.MouseOver.active = false } y := m.layout.Background.Data().Dy() - 40 d := base.GetDictionary(15) d.RenderString(m.state.MouseOver.text, float64(x), float64(y), 0, d.MaxHeight(), gui.Center) } }
func (gp *GamePanel) Draw(region gui.Region) { gp.AnchorBox.Draw(region) region.PushClipPlanes() defer region.PopClipPlanes() }