func (cs *consoleScreen) onKey(w *glfw.Window, key glfw.Key, scancode int, action glfw.Action, mods glfw.ModifierKey) { if key == glfw.KeyGraveAccent && action == glfw.Release { cs.visible = false window.SetKeyCallback(cs.prevKey) window.SetCharCallback(cs.prevChar) cs.input = cs.input[:len(cs.input)-1] } if key == glfw.KeyBackspace && action != glfw.Release { if len(cs.input) > 0 { cs.input = cs.input[:len(cs.input)-1] } } if key == glfw.KeyEnter && action == glfw.Release { console.Component(format. Build("> "). Color(format.Yellow). Append(cs.input). Create(), ) err := console.Execute(cs.input) cs.input = "" if err != nil { console.Component(format. Build("Error"). Color(format.Red). Append(": "). Color(format.Yellow). Append(err.Error()). Color(format.Red). Create(), ) } } }
func playSoundInternal(cat soundCategory, snd sound, vol, pitch float64, rel bool, pos mgl32.Vec3, cb func()) { vol *= snd.Volume * 100 baseVol := vol vol *= float64(muVolMaster.Value()) / 100 if v, ok := volVars[cat]; ok { vol *= float64(v.Value()) / 100 } if vol <= 0 { if cb != nil { go func() { syncChan <- cb }() } return } name := snd.Name key := pluginKey{"minecraft", name} sb, ok := loadedSounds[key] if !ok { f, err := resource.Open("minecraft", "sounds/"+name+".ogg") if err != nil { v, ok := assets.Objects[fmt.Sprintf("minecraft/sounds/%s.ogg", name)] if !ok { console.Text("Missing sound %s", key) if cb != nil { cb() } return } loc := fmt.Sprintf("./resources/%s", hashPath(v.Hash)) f, err = os.Open(loc) if err != nil { console.Text("Missing sound %s", key) if cb != nil { cb() } return } } if snd.Stream { m := audio.NewMusic(f) m.SetVolume(vol) m.SetPitch(pitch) m.Play() currentMusic = append(currentMusic, music{Music: m, cb: cb, cat: cat, vol: baseVol}) return } defer f.Close() data, err := ioutil.ReadAll(f) if err != nil { panic(err) } sb = audio.NewSoundBufferData(data) loadedSounds[key] = sb } var s audio.Sound n := true for _, sn := range soundList { if sn.Status() == audio.StatStopped { s = sn n = false break } } if n { if len(soundList) >= 100 { console.Component( format.Build("WARN: Skipping playing sound due to limit"). Color(format.Yellow).Create(), ) return } s = audio.NewSound() soundList = append(soundList, s) } s.SetBuffer(sb) s.SetVolume(vol) s.SetMinDistance(5) s.SetAttenuation(0.008) s.SetPitch(pitch) s.Play() if rel { s.SetRelative(true) s.SetPosition(pos.X(), pos.Y(), pos.Z()) } else { s.SetRelative(false) } }