116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
package asset
|
|
|
|
import (
|
|
"embed"
|
|
"image"
|
|
"io"
|
|
|
|
_ "image/jpeg"
|
|
_ "image/png"
|
|
|
|
"code.rocketnine.space/tslocum/gas-station-sim/world"
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
"github.com/hajimehoshi/ebiten/v2/audio"
|
|
"github.com/hajimehoshi/ebiten/v2/audio/vorbis"
|
|
)
|
|
|
|
//go:embed image sound
|
|
var fs embed.FS
|
|
|
|
var (
|
|
ImageInterior = interiorImage()
|
|
ImageExterior = exteriorImage()
|
|
ImageCursor = LoadImage("image/cursor.png")
|
|
ImageCustomerFrontMale = LoadImage("image/s_front_male.png")
|
|
ImageCustomerFrontFemale = LoadImage("image/s_front_female.png")
|
|
ImageDollarTwo = LoadImage("image/dollar_two.jpg")
|
|
ImageDollarTwenty = LoadImage("image/dollar_twenty.jpg")
|
|
)
|
|
|
|
const sampleRate = 44100
|
|
|
|
var (
|
|
audioContext = audio.NewContext(sampleRate)
|
|
SoundChime = LoadOGG(audioContext, "sound/chime.ogg", false)
|
|
SoundHelloAndWelcome = LoadOGG(audioContext, "sound/hello-and-welcome.ogg", false)
|
|
SoundOnPumpMale = LoadOGG(audioContext, "sound/on-pump-male.ogg", false)
|
|
SoundOnPumpFemale = LoadOGG(audioContext, "sound/on-pump-female.ogg", false)
|
|
SoundEightMale = LoadOGG(audioContext, "sound/eight-male.ogg", false)
|
|
SoundEightFemale = LoadOGG(audioContext, "sound/eight-female.ogg", false)
|
|
SoundTwentyMale = LoadOGG(audioContext, "sound/twenty-male.ogg", false)
|
|
SoundTwentyFemale = LoadOGG(audioContext, "sound/twenty-female.ogg", false)
|
|
)
|
|
|
|
func interiorImage() *ebiten.Image {
|
|
img := LoadImage("image/interior.jpg")
|
|
|
|
n := ebiten.NewImage(world.ScreenWidth, world.ScreenHeight)
|
|
op := &ebiten.DrawImageOptions{}
|
|
op.GeoM.Scale(0.64, 0.64)
|
|
op.GeoM.Translate(-42, -42)
|
|
n.DrawImage(img, op)
|
|
|
|
return n
|
|
}
|
|
|
|
func exteriorImage() *ebiten.Image {
|
|
img := LoadImage("image/exterior.jpg")
|
|
|
|
n := ebiten.NewImage(world.ScreenWidth, world.ScreenHeight)
|
|
op := &ebiten.DrawImageOptions{}
|
|
op.GeoM.Scale(0.9, 0.9)
|
|
op.GeoM.Translate(-23, -2)
|
|
n.DrawImage(img, op)
|
|
|
|
return n
|
|
}
|
|
|
|
func LoadImage(p string) *ebiten.Image {
|
|
f, err := fs.Open(p)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
baseImg, _, err := image.Decode(f)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return ebiten.NewImageFromImage(baseImg)
|
|
}
|
|
|
|
func LoadOGG(context *audio.Context, p string, loop bool) *audio.Player {
|
|
f, err := fs.Open(p)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
stream, err := vorbis.DecodeWithSampleRate(sampleRate, f)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var s io.Reader
|
|
if loop {
|
|
s = audio.NewInfiniteLoop(stream, stream.Length())
|
|
} else {
|
|
s = stream
|
|
}
|
|
|
|
player, err := context.NewPlayer(s)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Workaround to prevent delays when playing for the first time.
|
|
player.SetVolume(0)
|
|
player.Play()
|
|
player.Pause()
|
|
player.Rewind()
|
|
player.SetVolume(1)
|
|
|
|
return player
|
|
}
|