func (p *Player) Draw(game *Game) { if p.Exiled() { return } var t *texture.Data 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.X-float64(t.Dx())/2, p.Y-float64(t.Dy())/2, float64(t.Dx()), float64(t.Dy()), p.Angle, false) for _, proc := range p.Processes { proc.Draw(p.Id(), game) } }
func (p *PlayerEnt) Draw(game *Game, side int) { var t *texture.Data var alpha gl.Ubyte if 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, side) } 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 standardHookup() { g := g2.Make(0, 0, wdx, wdy) var tm g2.ThunderMenu tm.Subs = make(map[string]*g2.ThunderSubMenu) triggers := map[gin.KeyId]struct{}{ gin.AnyReturn: struct{}{}, gin.In().GetKeyFlat(gin.ControllerButton0+2, gin.DeviceTypeController, gin.DeviceIndexAny).Id(): struct{}{}, } action := "" tm.Subs[""] = g2.MakeThunderSubMenu( []g2.Widget{ &g2.Button{Size: 50, Triggers: triggers, Name: "Debug", Callback: func() { tm.Push("debug") }}, &g2.Button{Size: 50, Triggers: triggers, Name: "Host LAN game", Callback: func() { base.Log().Printf("HOST"); print("HOST\n") }}, &g2.Button{Size: 50, Triggers: triggers, Name: "Join LAN game", Callback: func() { base.Log().Printf("JOIN"); print("JOIN\n") }}, &g2.Button{Size: 50, Triggers: triggers, Name: "Quit", Callback: func() { action = "Quit" }}, }) tm.Subs["debug"] = g2.MakeThunderSubMenu( []g2.Widget{ &g2.Button{Size: 50, Triggers: triggers, Name: "Standard", Callback: func() { action = "standard" }}, &g2.Button{Size: 50, Triggers: triggers, Name: "Moba", Callback: func() { action = "moba" }}, &g2.Button{Size: 50, Triggers: triggers, Name: "Back", Callback: func() { tm.Pop() }}, }) tm.Start(500) g.AddChild(&tm, g2.AnchorDeadCenter) g.AddChild(g2.MakeConsole(wdx, wdy), g2.AnchorDeadCenter) t := texture.LoadFromPath(filepath.Join(base.GetDataDir(), "background/buttons1.jpg")) for { sys.Think() if action == "Quit" { return } if action == "standard" || action == "moba" { g.StopEventListening() engine, local := debugHookup(action) mainLoop(engine, local, action) g.RestartEventListening() action = "" } render.Queue(func() { gl.ClearColor(0, 0, 0, 1) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) if true { ratio := float64(wdx) / float64(wdy) t.RenderAdvanced(-1+(1-1/ratio), -1, 2/ratio, 2, 0, false) } gl.Disable(gl.TEXTURE_2D) base.GetDictionary("luxisr").RenderString("INvASioN!!!", 0, 0.5, 0, 0.03, gui.Center) }) render.Queue(func() { g.Draw() sys.SwapBuffers() }) render.Purge() } // 1 Start with a title screen // 2 Option to host or join // 3a If host then wait for a connection // 3b If join then ping and connect // 4 Once joined up the 'game' will handle choosing sides and whatnot }