Moving files around to make more sense (#279)
* Prevent input fighting between terminal and other input listeners. * Moving files around, removing exports * Add missing line
This commit is contained in:
parent
e878ebcbcd
commit
8a547ebf0e
|
@ -27,7 +27,8 @@ type Cache struct {
|
||||||
func CreateCache(budget int) *Cache {
|
func CreateCache(budget int) *Cache {
|
||||||
return &Cache{lookup: make(map[string]*cacheNode), budget: budget}
|
return &Cache{lookup: make(map[string]*cacheNode), budget: budget}
|
||||||
}
|
}
|
||||||
func (c *Cache) SetCacheVerbose(verbose bool) {
|
|
||||||
|
func (c *Cache) SetVerbose(verbose bool) {
|
||||||
c.verbose = verbose
|
c.verbose = verbose
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,31 +6,6 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Configuration defines the configuration for the engine, loaded from config.json
|
|
||||||
type Configuration struct {
|
|
||||||
Language string
|
|
||||||
FullScreen bool
|
|
||||||
Scale float64
|
|
||||||
RunInBackground bool
|
|
||||||
TicksPerSecond int
|
|
||||||
FpsCap int
|
|
||||||
VsyncEnabled bool
|
|
||||||
MpqPath string
|
|
||||||
MpqLoadOrder []string
|
|
||||||
SfxVolume float64
|
|
||||||
BgmVolume float64
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
func getConfigurationPath() string {
|
|
||||||
configDir, err := os.UserConfigDir()
|
|
||||||
if err != nil {
|
|
||||||
return "config.json"
|
|
||||||
}
|
|
||||||
|
|
||||||
return path.Join(configDir, "OpenDiablo2/config.json")
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
func getDefaultConfiguration() *Configuration {
|
func getDefaultConfiguration() *Configuration {
|
||||||
config := &Configuration{
|
config := &Configuration{
|
||||||
Language: "ENG",
|
Language: "ENG",
|
|
@ -13,6 +13,21 @@ var (
|
||||||
ErrHasInit = errors.New("configuration has already been initialized")
|
ErrHasInit = errors.New("configuration has already been initialized")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Configuration defines the configuration for the engine, loaded from config.json
|
||||||
|
type Configuration struct {
|
||||||
|
Language string
|
||||||
|
FullScreen bool
|
||||||
|
Scale float64
|
||||||
|
RunInBackground bool
|
||||||
|
TicksPerSecond int
|
||||||
|
FpsCap int
|
||||||
|
VsyncEnabled bool
|
||||||
|
MpqPath string
|
||||||
|
MpqLoadOrder []string
|
||||||
|
SfxVolume float64
|
||||||
|
BgmVolume float64
|
||||||
|
}
|
||||||
|
|
||||||
var singleton *Configuration
|
var singleton *Configuration
|
||||||
|
|
||||||
func Initialize() error {
|
func Initialize() error {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package d2render
|
package d2asset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -6,11 +6,12 @@ import (
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dcc"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dcc"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||||
)
|
)
|
||||||
|
|
||||||
type playMode int
|
type playMode int
|
||||||
|
@ -49,7 +50,7 @@ type Animation struct {
|
||||||
playLoop bool
|
playLoop bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateAnimationFromDCC(dcc *d2dcc.DCC, palette *d2datadict.PaletteRec, transparency int) (*Animation, error) {
|
func createAnimationFromDCC(dcc *d2dcc.DCC, palette *d2datadict.PaletteRec, transparency int) (*Animation, error) {
|
||||||
animation := &Animation{
|
animation := &Animation{
|
||||||
playLength: 1.0,
|
playLength: 1.0,
|
||||||
playLoop: true,
|
playLoop: true,
|
||||||
|
@ -83,7 +84,7 @@ func CreateAnimationFromDCC(dcc *d2dcc.DCC, palette *d2datadict.PaletteRec, tran
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err, image := NewSurface(frameWidth, frameHeight, d2common.FilterNearest)
|
err, image := d2render.NewSurface(frameWidth, frameHeight, d2common.FilterNearest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -111,14 +112,14 @@ func CreateAnimationFromDCC(dcc *d2dcc.DCC, palette *d2datadict.PaletteRec, tran
|
||||||
return animation, nil
|
return animation, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateAnimationFromDC6(dc6 *d2dc6.DC6File) (*Animation, error) {
|
func createAnimationFromDC6(dc6 *d2dc6.DC6File) (*Animation, error) {
|
||||||
animation := &Animation{
|
animation := &Animation{
|
||||||
playLength: 1.0,
|
playLength: 1.0,
|
||||||
playLoop: true,
|
playLoop: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
for frameIndex, dc6Frame := range dc6.Frames {
|
for frameIndex, dc6Frame := range dc6.Frames {
|
||||||
err, image := NewSurface(int(dc6Frame.Width), int(dc6Frame.Height), d2common.FilterNearest)
|
err, image := d2render.NewSurface(int(dc6Frame.Width), int(dc6Frame.Height), d2common.FilterNearest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
package d2asset
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
animationBudget = 64
|
||||||
|
)
|
||||||
|
|
||||||
|
type animationManager struct {
|
||||||
|
cache *d2common.Cache
|
||||||
|
}
|
||||||
|
|
||||||
|
func createAnimationManager() *animationManager {
|
||||||
|
return &animationManager{d2common.CreateCache(animationBudget)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (am *animationManager) loadAnimation(animationPath, palettePath string, transparency int) (*Animation, error) {
|
||||||
|
cachePath := fmt.Sprintf("%s;%s;%d", animationPath, palettePath, transparency)
|
||||||
|
if animation, found := am.cache.Retrieve(cachePath); found {
|
||||||
|
return animation.(*Animation).Clone(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var animation *Animation
|
||||||
|
switch strings.ToLower(filepath.Ext(animationPath)) {
|
||||||
|
case ".dc6":
|
||||||
|
dc6, err := loadDC6(animationPath, palettePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
animation, err = createAnimationFromDC6(dc6)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
case ".dcc":
|
||||||
|
dcc, err := loadDCC(animationPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
palette, err := loadPalette(palettePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
animation, err = createAnimationFromDCC(dcc, palette, transparency)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, errors.New("unknown animation format")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := am.cache.Insert(cachePath, animation.Clone(), 1); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return animation, nil
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2archivemanager
|
package d2asset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -6,9 +6,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +15,7 @@ type archiveEntry struct {
|
||||||
hashEntryMap d2mpq.HashEntryMap
|
hashEntryMap d2mpq.HashEntryMap
|
||||||
}
|
}
|
||||||
|
|
||||||
type ArchiveManager struct {
|
type archiveManager struct {
|
||||||
cache *d2common.Cache
|
cache *d2common.Cache
|
||||||
config *d2config.Configuration
|
config *d2config.Configuration
|
||||||
entries []archiveEntry
|
entries []archiveEntry
|
||||||
|
@ -25,51 +23,35 @@ type ArchiveManager struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ArchiveBudget = 1024 * 1024 * 512
|
archiveBudget = 1024 * 1024 * 512
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateArchiveManager(config *d2config.Configuration) *ArchiveManager {
|
func createArchiveManager(config *d2config.Configuration) *archiveManager {
|
||||||
return &ArchiveManager{cache: d2common.CreateCache(ArchiveBudget), config: config}
|
return &archiveManager{cache: d2common.CreateCache(archiveBudget), config: config}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *ArchiveManager) SetCacheVerbose(verbose bool) {
|
func (am *archiveManager) loadArchiveForFile(filePath string) (*d2mpq.MPQ, error) {
|
||||||
am.cache.SetCacheVerbose(verbose)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *ArchiveManager) GetCacheWeight() int {
|
|
||||||
return am.cache.GetWeight()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *ArchiveManager) GetCacheBudget() int {
|
|
||||||
return am.cache.GetBudget()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *ArchiveManager) ClearCache() {
|
|
||||||
am.cache.Clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *ArchiveManager) LoadArchiveForFile(filePath string) (*d2mpq.MPQ, error) {
|
|
||||||
am.mutex.Lock()
|
am.mutex.Lock()
|
||||||
defer am.mutex.Unlock()
|
defer am.mutex.Unlock()
|
||||||
|
|
||||||
if err := am.CacheArchiveEntries(); err != nil {
|
if err := am.cacheArchiveEntries(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, archiveEntry := range am.entries {
|
for _, archiveEntry := range am.entries {
|
||||||
if archiveEntry.hashEntryMap.Contains(filePath) {
|
if archiveEntry.hashEntryMap.Contains(filePath) {
|
||||||
return am.LoadArchive(archiveEntry.archivePath)
|
return am.loadArchive(archiveEntry.archivePath)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.New("file not found")
|
return nil, errors.New("file not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *ArchiveManager) FileExistsInArchive(filePath string) (bool, error) {
|
func (am *archiveManager) fileExistsInArchive(filePath string) (bool, error) {
|
||||||
am.mutex.Lock()
|
am.mutex.Lock()
|
||||||
defer am.mutex.Unlock()
|
defer am.mutex.Unlock()
|
||||||
|
|
||||||
if err := am.CacheArchiveEntries(); err != nil {
|
if err := am.cacheArchiveEntries(); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +64,7 @@ func (am *ArchiveManager) FileExistsInArchive(filePath string) (bool, error) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *ArchiveManager) LoadArchive(archivePath string) (*d2mpq.MPQ, error) {
|
func (am *archiveManager) loadArchive(archivePath string) (*d2mpq.MPQ, error) {
|
||||||
if archive, found := am.cache.Retrieve(archivePath); found {
|
if archive, found := am.cache.Retrieve(archivePath); found {
|
||||||
return archive.(*d2mpq.MPQ), nil
|
return archive.(*d2mpq.MPQ), nil
|
||||||
}
|
}
|
||||||
|
@ -99,7 +81,7 @@ func (am *ArchiveManager) LoadArchive(archivePath string) (*d2mpq.MPQ, error) {
|
||||||
return archive, nil
|
return archive, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *ArchiveManager) CacheArchiveEntries() error {
|
func (am *archiveManager) cacheArchiveEntries() error {
|
||||||
if len(am.entries) == len(am.config.MpqLoadOrder) {
|
if len(am.entries) == len(am.config.MpqLoadOrder) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -108,7 +90,7 @@ func (am *ArchiveManager) CacheArchiveEntries() error {
|
||||||
|
|
||||||
for _, archiveName := range am.config.MpqLoadOrder {
|
for _, archiveName := range am.config.MpqLoadOrder {
|
||||||
archivePath := path.Join(am.config.MpqPath, archiveName)
|
archivePath := path.Join(am.config.MpqPath, archiveName)
|
||||||
archive, err := am.LoadArchive(archivePath)
|
archive, err := am.loadArchive(archivePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
package d2asset
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2cof"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dcc"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrHasInit error = errors.New("asset system is already initialized")
|
||||||
|
ErrNoInit error = errors.New("asset system is not initialized")
|
||||||
|
)
|
||||||
|
|
||||||
|
type assetManager struct {
|
||||||
|
archiveManager *archiveManager
|
||||||
|
fileManager *fileManager
|
||||||
|
paletteManager *paletteManager
|
||||||
|
animationManager *animationManager
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadPalette(palettePath string) (*d2datadict.PaletteRec, error) {
|
||||||
|
if singleton == nil {
|
||||||
|
return nil, ErrNoInit
|
||||||
|
}
|
||||||
|
|
||||||
|
return singleton.paletteManager.loadPalette(palettePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadDC6(dc6Path, palettePath string) (*d2dc6.DC6File, error) {
|
||||||
|
dc6Data, err := LoadFile(dc6Path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
paletteData, err := loadPalette(palettePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
dc6, err := d2dc6.LoadDC6(dc6Data, *paletteData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &dc6, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadDCC(dccPath string) (*d2dcc.DCC, error) {
|
||||||
|
dccData, err := LoadFile(dccPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return d2dcc.LoadDCC(dccData)
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadCOF(cofPath string) (*d2cof.COF, error) {
|
||||||
|
cofData, err := LoadFile(cofPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return d2cof.LoadCOF(cofData)
|
||||||
|
}
|
|
@ -1,14 +1,11 @@
|
||||||
package d2assetmanager
|
package d2asset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
|
@ -108,7 +105,7 @@ type compositeMode struct {
|
||||||
directionCount int
|
directionCount int
|
||||||
playedCount int
|
playedCount int
|
||||||
|
|
||||||
layers []*d2render.Animation
|
layers []*Animation
|
||||||
drawOrder [][]d2enum.CompositeType
|
drawOrder [][]d2enum.CompositeType
|
||||||
|
|
||||||
frameCount int
|
frameCount int
|
||||||
|
@ -143,7 +140,7 @@ func (c *Composite) createMode(animationMode, weaponClass string, direction int)
|
||||||
weaponClass: weaponClass,
|
weaponClass: weaponClass,
|
||||||
direction: direction,
|
direction: direction,
|
||||||
directionCount: cof.NumberOfDirections,
|
directionCount: cof.NumberOfDirections,
|
||||||
layers: make([]*d2render.Animation, d2enum.CompositeTypeMax),
|
layers: make([]*Animation, d2enum.CompositeTypeMax),
|
||||||
frameCount: animationData[0].FramesPerDirection,
|
frameCount: animationData[0].FramesPerDirection,
|
||||||
animationSpeed: 1.0 / ((float64(animationData[0].AnimationSpeed) * 25.0) / 256.0),
|
animationSpeed: 1.0 / ((float64(animationData[0].AnimationSpeed) * 25.0) / 256.0),
|
||||||
}
|
}
|
||||||
|
@ -248,7 +245,7 @@ func (c *Composite) createMode(animationMode, weaponClass string, direction int)
|
||||||
return mode, nil
|
return mode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadCompositeLayer(object *d2datadict.ObjectLookupRecord, layerKey, layerValue, animationMode, weaponClass, palettePath string, transparency int) (*d2render.Animation, error) {
|
func loadCompositeLayer(object *d2datadict.ObjectLookupRecord, layerKey, layerValue, animationMode, weaponClass, palettePath string, transparency int) (*Animation, error) {
|
||||||
animationPaths := []string{
|
animationPaths := []string{
|
||||||
fmt.Sprintf("%s/%s/%s/%s%s%s%s%s.dcc", object.Base, object.Token, layerKey, object.Token, layerKey, layerValue, animationMode, weaponClass),
|
fmt.Sprintf("%s/%s/%s/%s%s%s%s%s.dcc", object.Base, object.Token, layerKey, object.Token, layerKey, layerValue, animationMode, weaponClass),
|
||||||
fmt.Sprintf("%s/%s/%s/%s%s%s%s%s.dcc", object.Base, object.Token, layerKey, object.Token, layerKey, layerValue, animationMode, "HTH"),
|
fmt.Sprintf("%s/%s/%s/%s%s%s%s%s.dcc", object.Base, object.Token, layerKey, object.Token, layerKey, layerValue, animationMode, "HTH"),
|
|
@ -0,0 +1,116 @@
|
||||||
|
package d2asset
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2term"
|
||||||
|
)
|
||||||
|
|
||||||
|
var singleton *assetManager
|
||||||
|
|
||||||
|
func Initialize() error {
|
||||||
|
if singleton != nil {
|
||||||
|
return ErrHasInit
|
||||||
|
}
|
||||||
|
|
||||||
|
config, err := d2config.Get()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
archiveManager = createArchiveManager(config)
|
||||||
|
fileManager = createFileManager(config, archiveManager)
|
||||||
|
paletteManager = createPaletteManager()
|
||||||
|
animationManager = createAnimationManager()
|
||||||
|
)
|
||||||
|
|
||||||
|
singleton = &assetManager{
|
||||||
|
archiveManager,
|
||||||
|
fileManager,
|
||||||
|
paletteManager,
|
||||||
|
animationManager,
|
||||||
|
}
|
||||||
|
|
||||||
|
d2term.BindAction("assetspam", "display verbose asset manager logs", func(verbose bool) {
|
||||||
|
if verbose {
|
||||||
|
d2term.OutputInfo("asset manager verbose logging enabled")
|
||||||
|
} else {
|
||||||
|
d2term.OutputInfo("asset manager verbose logging disabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
archiveManager.cache.SetVerbose(verbose)
|
||||||
|
fileManager.cache.SetVerbose(verbose)
|
||||||
|
paletteManager.cache.SetVerbose(verbose)
|
||||||
|
animationManager.cache.SetVerbose(verbose)
|
||||||
|
})
|
||||||
|
|
||||||
|
d2term.BindAction("assetstat", "display asset manager cache statistics", func() {
|
||||||
|
d2term.OutputInfo("archive cache: %f%%", float64(archiveManager.cache.GetWeight())/float64(archiveManager.cache.GetBudget())*100.0)
|
||||||
|
d2term.OutputInfo("file cache: %f%%", float64(fileManager.cache.GetWeight())/float64(fileManager.cache.GetBudget())*100.0)
|
||||||
|
d2term.OutputInfo("palette cache: %f%%", float64(paletteManager.cache.GetWeight())/float64(paletteManager.cache.GetBudget())*100.0)
|
||||||
|
d2term.OutputInfo("animation cache: %f%%", float64(animationManager.cache.GetWeight())/float64(animationManager.cache.GetBudget())*100.0)
|
||||||
|
})
|
||||||
|
|
||||||
|
d2term.BindAction("assetclear", "clear asset manager cache", func() {
|
||||||
|
archiveManager.cache.Clear()
|
||||||
|
fileManager.cache.Clear()
|
||||||
|
paletteManager.cache.Clear()
|
||||||
|
animationManager.cache.Clear()
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Shutdown() {
|
||||||
|
singleton = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadArchive(archivePath string) (*d2mpq.MPQ, error) {
|
||||||
|
if singleton == nil {
|
||||||
|
return nil, ErrNoInit
|
||||||
|
}
|
||||||
|
|
||||||
|
return singleton.archiveManager.loadArchive(archivePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadFile(filePath string) ([]byte, error) {
|
||||||
|
if singleton == nil {
|
||||||
|
return nil, ErrNoInit
|
||||||
|
}
|
||||||
|
|
||||||
|
data, err := singleton.fileManager.loadFile(filePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("error loading file %s (%v)", filePath, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return data, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func FileExists(filePath string) (bool, error) {
|
||||||
|
if singleton == nil {
|
||||||
|
return false, ErrNoInit
|
||||||
|
}
|
||||||
|
|
||||||
|
return singleton.fileManager.fileExists(filePath)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadAnimation(animationPath, palettePath string) (*Animation, error) {
|
||||||
|
return LoadAnimationWithTransparency(animationPath, palettePath, 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadAnimationWithTransparency(animationPath, palettePath string, transparency int) (*Animation, error) {
|
||||||
|
if singleton == nil {
|
||||||
|
return nil, ErrNoInit
|
||||||
|
}
|
||||||
|
|
||||||
|
return singleton.animationManager.loadAnimation(animationPath, palettePath, transparency)
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadComposite(object *d2datadict.ObjectLookupRecord, palettePath string) (*Composite, error) {
|
||||||
|
return CreateComposite(object, palettePath), nil
|
||||||
|
}
|
|
@ -1,52 +1,34 @@
|
||||||
package d2filemanager
|
package d2asset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2archivemanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FileBudget = 1024 * 1024 * 32
|
fileBudget = 1024 * 1024 * 32
|
||||||
)
|
)
|
||||||
|
|
||||||
type FileManager struct {
|
type fileManager struct {
|
||||||
cache *d2common.Cache
|
cache *d2common.Cache
|
||||||
archiveManager *d2archivemanager.ArchiveManager
|
archiveManager *archiveManager
|
||||||
config *d2config.Configuration
|
config *d2config.Configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateFileManager(config *d2config.Configuration, archiveManager *d2archivemanager.ArchiveManager) *FileManager {
|
func createFileManager(config *d2config.Configuration, archiveManager *archiveManager) *fileManager {
|
||||||
return &FileManager{d2common.CreateCache(FileBudget), archiveManager, config}
|
return &fileManager{d2common.CreateCache(fileBudget), archiveManager, config}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fm *FileManager) SetCacheVerbose(verbose bool) {
|
func (fm *fileManager) loadFile(filePath string) ([]byte, error) {
|
||||||
fm.cache.SetCacheVerbose(verbose)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fm *FileManager) ClearCache() {
|
|
||||||
fm.cache.Clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fm *FileManager) GetCacheWeight() int {
|
|
||||||
return fm.cache.GetWeight()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fm *FileManager) GetCacheBudget() int {
|
|
||||||
return fm.cache.GetBudget()
|
|
||||||
}
|
|
||||||
func (fm *FileManager) LoadFile(filePath string) ([]byte, error) {
|
|
||||||
filePath = fm.fixupFilePath(filePath)
|
filePath = fm.fixupFilePath(filePath)
|
||||||
if value, found := fm.cache.Retrieve(filePath); found {
|
if value, found := fm.cache.Retrieve(filePath); found {
|
||||||
return value.([]byte), nil
|
return value.([]byte), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
archive, err := fm.archiveManager.LoadArchiveForFile(filePath)
|
archive, err := fm.archiveManager.loadArchiveForFile(filePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -63,12 +45,12 @@ func (fm *FileManager) LoadFile(filePath string) ([]byte, error) {
|
||||||
return data, nil
|
return data, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fm *FileManager) FileExists(filePath string) (bool, error) {
|
func (fm *fileManager) fileExists(filePath string) (bool, error) {
|
||||||
filePath = fm.fixupFilePath(filePath)
|
filePath = fm.fixupFilePath(filePath)
|
||||||
return fm.archiveManager.FileExistsInArchive(filePath)
|
return fm.archiveManager.fileExistsInArchive(filePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fm *FileManager) fixupFilePath(filePath string) string {
|
func (fm *fileManager) fixupFilePath(filePath string) string {
|
||||||
filePath = strings.ReplaceAll(filePath, "{LANG}", fm.config.Language)
|
filePath = strings.ReplaceAll(filePath, "{LANG}", fm.config.Language)
|
||||||
if strings.ToUpper(d2resource.LanguageCode) == "CHI" {
|
if strings.ToUpper(d2resource.LanguageCode) == "CHI" {
|
||||||
filePath = strings.ReplaceAll(filePath, "{LANG_FONT}", fm.config.Language)
|
filePath = strings.ReplaceAll(filePath, "{LANG_FONT}", fm.config.Language)
|
|
@ -0,0 +1,33 @@
|
||||||
|
package d2asset
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
|
)
|
||||||
|
|
||||||
|
type paletteManager struct {
|
||||||
|
cache *d2common.Cache
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
paletteBudget = 64
|
||||||
|
)
|
||||||
|
|
||||||
|
func createPaletteManager() *paletteManager {
|
||||||
|
return &paletteManager{d2common.CreateCache(paletteBudget)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pm *paletteManager) loadPalette(palettePath string) (*d2datadict.PaletteRec, error) {
|
||||||
|
if palette, found := pm.cache.Retrieve(palettePath); found {
|
||||||
|
return palette.(*d2datadict.PaletteRec), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
paletteData, err := LoadFile(palettePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
palette := d2datadict.CreatePalette("", paletteData)
|
||||||
|
pm.cache.Insert(palettePath, &palette, 1)
|
||||||
|
return &palette, nil
|
||||||
|
}
|
|
@ -1,246 +0,0 @@
|
||||||
package d2assetmanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2archivemanager"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2filemanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2cof"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dc6"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dcc"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2term"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
AnimationBudget = 64
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrHasInit error = errors.New("asset system is already initialized")
|
|
||||||
ErrNoInit error = errors.New("asset system is not initialized")
|
|
||||||
)
|
|
||||||
|
|
||||||
type AssetManager struct {
|
|
||||||
archiveManager *d2archivemanager.ArchiveManager
|
|
||||||
fileManager *d2filemanager.FileManager
|
|
||||||
paletteManager *PaletteManager
|
|
||||||
cache *d2common.Cache
|
|
||||||
}
|
|
||||||
|
|
||||||
var singleton *AssetManager
|
|
||||||
|
|
||||||
func Initialize() error {
|
|
||||||
if singleton != nil {
|
|
||||||
return ErrHasInit
|
|
||||||
}
|
|
||||||
config, _ := d2config.Get()
|
|
||||||
var (
|
|
||||||
archiveManager = d2archivemanager.CreateArchiveManager(config)
|
|
||||||
fileManager = d2filemanager.CreateFileManager(config, archiveManager)
|
|
||||||
paletteManager = CreatePaletteManager()
|
|
||||||
//animationManager = d2animationmanager.CreateAnimationManager()
|
|
||||||
)
|
|
||||||
|
|
||||||
singleton = &AssetManager{
|
|
||||||
archiveManager,
|
|
||||||
fileManager,
|
|
||||||
paletteManager,
|
|
||||||
nil,
|
|
||||||
}
|
|
||||||
singleton.cache = d2common.CreateCache(AnimationBudget)
|
|
||||||
|
|
||||||
d2term.BindAction("assetspam", "display verbose asset manager logs", func(verbose bool) {
|
|
||||||
if verbose {
|
|
||||||
d2term.OutputInfo("asset manager verbose logging enabled")
|
|
||||||
} else {
|
|
||||||
d2term.OutputInfo("asset manager verbose logging disabled")
|
|
||||||
}
|
|
||||||
|
|
||||||
archiveManager.SetCacheVerbose(verbose)
|
|
||||||
fileManager.SetCacheVerbose(verbose)
|
|
||||||
paletteManager.SetCacheVerbose(verbose)
|
|
||||||
})
|
|
||||||
|
|
||||||
d2term.BindAction("assetstat", "display asset manager cache statistics", func() {
|
|
||||||
d2term.OutputInfo("archive cache: %f%%", float64(archiveManager.GetCacheWeight())/float64(archiveManager.GetCacheBudget())*100.0)
|
|
||||||
d2term.OutputInfo("file cache: %f%%", float64(fileManager.GetCacheWeight())/float64(fileManager.GetCacheBudget())*100.0)
|
|
||||||
d2term.OutputInfo("palette cache: %f%%", float64(paletteManager.GetCacheWeight())/float64(paletteManager.GetCacheBudget())*100.0)
|
|
||||||
//d2term.OutputInfo("animation cache: %f%%", float64(GetCacheWeight())/float64(GetCacheBudget())*100.0)
|
|
||||||
})
|
|
||||||
|
|
||||||
d2term.BindAction("assetclear", "clear asset manager cache", func() {
|
|
||||||
archiveManager.ClearCache()
|
|
||||||
fileManager.ClearCache()
|
|
||||||
paletteManager.ClearCache()
|
|
||||||
//am.ClearCache()
|
|
||||||
})
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Shutdown() {
|
|
||||||
singleton = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadArchive(archivePath string) (*d2mpq.MPQ, error) {
|
|
||||||
if singleton == nil {
|
|
||||||
return nil, ErrNoInit
|
|
||||||
}
|
|
||||||
|
|
||||||
return singleton.archiveManager.LoadArchive(archivePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadFile(filePath string) ([]byte, error) {
|
|
||||||
if singleton == nil {
|
|
||||||
return nil, ErrNoInit
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := singleton.fileManager.LoadFile(filePath)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("error loading file %s (%v)", filePath, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return data, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func FileExists(filePath string) (bool, error) {
|
|
||||||
if singleton == nil {
|
|
||||||
return false, ErrNoInit
|
|
||||||
}
|
|
||||||
|
|
||||||
return singleton.fileManager.FileExists(filePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadAnimation(animationPath, palettePath string) (*d2render.Animation, error) {
|
|
||||||
return LoadAnimationWithTransparency(animationPath, palettePath, 255)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadAnimationWithTransparency(animationPath, palettePath string, transparency int) (*d2render.Animation, error) {
|
|
||||||
if singleton == nil {
|
|
||||||
return nil, ErrNoInit
|
|
||||||
}
|
|
||||||
|
|
||||||
return singleton.LoadAnimation(animationPath, palettePath, transparency)
|
|
||||||
}
|
|
||||||
|
|
||||||
func LoadComposite(object *d2datadict.ObjectLookupRecord, palettePath string) (*Composite, error) {
|
|
||||||
return CreateComposite(object, palettePath), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadPalette(palettePath string) (*d2datadict.PaletteRec, error) {
|
|
||||||
if singleton == nil {
|
|
||||||
return nil, ErrNoInit
|
|
||||||
}
|
|
||||||
|
|
||||||
return singleton.paletteManager.LoadPalette(palettePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadDC6(dc6Path, palettePath string) (*d2dc6.DC6File, error) {
|
|
||||||
dc6Data, err := LoadFile(dc6Path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
paletteData, err := loadPalette(palettePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
dc6, err := d2dc6.LoadDC6(dc6Data, *paletteData)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &dc6, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadDCC(dccPath string) (*d2dcc.DCC, error) {
|
|
||||||
dccData, err := LoadFile(dccPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return d2dcc.LoadDCC(dccData)
|
|
||||||
}
|
|
||||||
|
|
||||||
func loadCOF(cofPath string) (*d2cof.COF, error) {
|
|
||||||
cofData, err := LoadFile(cofPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return d2cof.LoadCOF(cofData)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *AssetManager) SetCacheVerbose(verbose bool) {
|
|
||||||
am.cache.SetCacheVerbose(verbose)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *AssetManager) ClearCache() {
|
|
||||||
am.cache.Clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *AssetManager) GetCacheWeight() int {
|
|
||||||
return am.cache.GetWeight()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *AssetManager) GetCacheBudget() int {
|
|
||||||
return am.cache.GetBudget()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (am *AssetManager) LoadAnimation(animationPath, palettePath string, transparency int) (*d2render.Animation, error) {
|
|
||||||
cachePath := fmt.Sprintf("%s;%s;%d", animationPath, palettePath, transparency)
|
|
||||||
if animation, found := am.cache.Retrieve(cachePath); found {
|
|
||||||
return animation.(*d2render.Animation).Clone(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var animation *d2render.Animation
|
|
||||||
switch strings.ToLower(filepath.Ext(animationPath)) {
|
|
||||||
case ".dc6":
|
|
||||||
dc6, err := loadDC6(animationPath, palettePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
animation, err = d2render.CreateAnimationFromDC6(dc6)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
case ".dcc":
|
|
||||||
dcc, err := loadDCC(animationPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
palette, err := loadPalette(palettePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
animation, err = d2render.CreateAnimationFromDCC(dcc, palette, transparency)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
return nil, errors.New("unknown animation format")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := am.cache.Insert(cachePath, animation.Clone(), 1); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return animation, nil
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
package d2assetmanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
|
||||||
)
|
|
||||||
|
|
||||||
type PaletteManager struct {
|
|
||||||
cache *d2common.Cache
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
|
||||||
PaletteBudget = 64
|
|
||||||
)
|
|
||||||
|
|
||||||
func CreatePaletteManager() *PaletteManager {
|
|
||||||
return &PaletteManager{d2common.CreateCache(PaletteBudget)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pm *PaletteManager) SetCacheVerbose(verbose bool) {
|
|
||||||
pm.cache.SetCacheVerbose(verbose)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pm *PaletteManager) ClearCache() {
|
|
||||||
pm.cache.Clear()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pm *PaletteManager) GetCacheWeight() int {
|
|
||||||
return pm.cache.GetWeight()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pm *PaletteManager) GetCacheBudget() int {
|
|
||||||
return pm.cache.GetBudget()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pm *PaletteManager) LoadPalette(palettePath string) (*d2datadict.PaletteRec, error) {
|
|
||||||
if palette, found := pm.cache.Retrieve(palettePath); found {
|
|
||||||
return palette.(*d2datadict.PaletteRec), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
paletteData, err := LoadFile(palettePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
palette := d2datadict.CreatePalette("", paletteData)
|
|
||||||
pm.cache.Insert(palettePath, &palette, 1)
|
|
||||||
return &palette, nil
|
|
||||||
}
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/hajimehoshi/ebiten/audio/wav"
|
"github.com/hajimehoshi/ebiten/audio/wav"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/audio"
|
"github.com/hajimehoshi/ebiten/audio"
|
||||||
|
@ -46,7 +46,7 @@ func (eap *EbitenAudioProvider) PlayBGM(song string) {
|
||||||
log.Panic(err)
|
log.Panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
audioData, err := d2assetmanager.LoadFile(song)
|
audioData, err := d2asset.LoadFile(song)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/hajimehoshi/ebiten/audio"
|
"github.com/hajimehoshi/ebiten/audio"
|
||||||
"github.com/hajimehoshi/ebiten/audio/wav"
|
"github.com/hajimehoshi/ebiten/audio/wav"
|
||||||
)
|
)
|
||||||
|
@ -23,7 +23,7 @@ func CreateSoundEffect(sfx string, context *audio.Context, volume float64) *Ebit
|
||||||
soundFile = sfx
|
soundFile = sfx
|
||||||
}
|
}
|
||||||
|
|
||||||
audioData, err := d2assetmanager.LoadFile(soundFile)
|
audioData, err := d2asset.LoadFile(soundFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,9 +9,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
)
|
)
|
||||||
|
@ -36,7 +35,7 @@ type GameState struct {
|
||||||
HeroLevel int
|
HeroLevel int
|
||||||
Act int
|
Act int
|
||||||
FilePath string
|
FilePath string
|
||||||
Equipment d2hero.CharacterEquipment
|
Equipment d2inventory.CharacterEquipment
|
||||||
}
|
}
|
||||||
|
|
||||||
const GameStateVersion = uint32(2) // Update this when you make breaking changes
|
const GameStateVersion = uint32(2) // Update this when you make breaking changes
|
|
@ -1,4 +1,4 @@
|
||||||
package d2hero
|
package d2inventory
|
||||||
|
|
||||||
type CharacterEquipment struct {
|
type CharacterEquipment struct {
|
||||||
Head *InventoryItemArmor // Head
|
Head *InventoryItemArmor // Head
|
|
@ -1,4 +1,4 @@
|
||||||
package d2hero
|
package d2inventory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
|
@ -1,4 +1,4 @@
|
||||||
package d2hero
|
package d2inventory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
|
@ -1,4 +1,4 @@
|
||||||
package d2hero
|
package d2inventory
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
|
@ -1,15 +1,14 @@
|
||||||
package d2assetmanager
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AnimatedEntity represents an entity on the map that can be animated
|
// AnimatedEntity represents an entity on the map that can be animated
|
||||||
|
@ -27,12 +26,12 @@ type AnimatedEntity struct {
|
||||||
action int32
|
action int32
|
||||||
repetitions int
|
repetitions int
|
||||||
|
|
||||||
composite *Composite
|
composite *d2asset.Composite
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateAnimatedEntity creates an instance of AnimatedEntity
|
// CreateAnimatedEntity creates an instance of AnimatedEntity
|
||||||
func CreateAnimatedEntity(x, y int32, object *d2datadict.ObjectLookupRecord, palettePath string) (*AnimatedEntity, error) {
|
func CreateAnimatedEntity(x, y int32, object *d2datadict.ObjectLookupRecord, palettePath string) (*AnimatedEntity, error) {
|
||||||
composite, err := LoadComposite(object, palettePath)
|
composite, err := d2asset.LoadComposite(object, palettePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2mapengine
|
package d2map
|
||||||
|
|
||||||
type Camera struct {
|
type Camera struct {
|
||||||
x float64
|
x float64
|
|
@ -1,4 +1,4 @@
|
||||||
package d2mapengine
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
|
@ -1,21 +1,21 @@
|
||||||
package d2hero
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Hero struct {
|
type Hero struct {
|
||||||
AnimatedEntity *d2assetmanager.AnimatedEntity
|
AnimatedEntity *AnimatedEntity
|
||||||
Equipment CharacterEquipment
|
Equipment d2inventory.CharacterEquipment
|
||||||
mode d2enum.AnimationMode
|
mode d2enum.AnimationMode
|
||||||
direction int
|
direction int
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateHero(x, y int32, direction int, heroType d2enum.Hero, equipment CharacterEquipment) *Hero {
|
func CreateHero(x, y int32, direction int, heroType d2enum.Hero, equipment d2inventory.CharacterEquipment) *Hero {
|
||||||
object := &d2datadict.ObjectLookupRecord{
|
object := &d2datadict.ObjectLookupRecord{
|
||||||
Mode: d2enum.AnimationModePlayerNeutral.String(),
|
Mode: d2enum.AnimationModePlayerNeutral.String(),
|
||||||
Base: "/data/global/chars",
|
Base: "/data/global/chars",
|
||||||
|
@ -32,7 +32,7 @@ func CreateHero(x, y int32, direction int, heroType d2enum.Hero, equipment Chara
|
||||||
LH: equipment.LeftHand.ItemCode(),
|
LH: equipment.LeftHand.ItemCode(),
|
||||||
}
|
}
|
||||||
|
|
||||||
entity, err := d2assetmanager.CreateAnimatedEntity(x, y, object, d2resource.PaletteUnits)
|
entity, err := CreateAnimatedEntity(x, y, object, d2resource.PaletteUnits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
|
@ -1,21 +1,20 @@
|
||||||
package d2npc
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type NPC struct {
|
type NPC struct {
|
||||||
AnimatedEntity *d2assetmanager.AnimatedEntity
|
AnimatedEntity *AnimatedEntity
|
||||||
HasPaths bool
|
HasPaths bool
|
||||||
Paths []d2common.Path
|
Paths []d2common.Path
|
||||||
path int
|
path int
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateNPC(x, y int32, object *d2datadict.ObjectLookupRecord, direction int) *NPC {
|
func CreateNPC(x, y int32, object *d2datadict.ObjectLookupRecord, direction int) *NPC {
|
||||||
entity, err := d2assetmanager.CreateAnimatedEntity(x, y, object, d2resource.PaletteUnits)
|
entity, err := CreateAnimatedEntity(x, y, object, d2resource.PaletteUnits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2mapengine
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
|
@ -7,9 +7,7 @@ import (
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2npc"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
|
@ -54,7 +52,7 @@ func loadRegion(seed int64, tileOffsetX, tileOffsetY int, levelType d2enum.Regio
|
||||||
|
|
||||||
for _, levelTypeDt1 := range region.levelType.Files {
|
for _, levelTypeDt1 := range region.levelType.Files {
|
||||||
if len(levelTypeDt1) != 0 && levelTypeDt1 != "" && levelTypeDt1 != "0" {
|
if len(levelTypeDt1) != 0 && levelTypeDt1 != "" && levelTypeDt1 != "0" {
|
||||||
fileData, err := d2assetmanager.LoadFile("/data/global/tiles/" + levelTypeDt1)
|
fileData, err := d2asset.LoadFile("/data/global/tiles/" + levelTypeDt1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -77,7 +75,7 @@ func loadRegion(seed int64, tileOffsetX, tileOffsetY int, levelType d2enum.Regio
|
||||||
}
|
}
|
||||||
|
|
||||||
region.regionPath = levelFilesToPick[levelIndex]
|
region.regionPath = levelFilesToPick[levelIndex]
|
||||||
fileData, err := d2assetmanager.LoadFile("/data/global/tiles/" + region.regionPath)
|
fileData, err := d2asset.LoadFile("/data/global/tiles/" + region.regionPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -136,13 +134,13 @@ func (mr *MapRegion) loadEntities() []MapEntity {
|
||||||
switch object.Lookup.Type {
|
switch object.Lookup.Type {
|
||||||
case d2datadict.ObjectTypeCharacter:
|
case d2datadict.ObjectTypeCharacter:
|
||||||
if object.Lookup.Base != "" && object.Lookup.Token != "" && object.Lookup.TR != "" {
|
if object.Lookup.Base != "" && object.Lookup.Token != "" && object.Lookup.TR != "" {
|
||||||
npc := d2npc.CreateNPC(int32(worldX), int32(worldY), object.Lookup, 0)
|
npc := CreateNPC(int32(worldX), int32(worldY), object.Lookup, 0)
|
||||||
npc.SetPaths(object.Paths)
|
npc.SetPaths(object.Paths)
|
||||||
entities = append(entities, npc)
|
entities = append(entities, npc)
|
||||||
}
|
}
|
||||||
case d2datadict.ObjectTypeItem:
|
case d2datadict.ObjectTypeItem:
|
||||||
if object.ObjectInfo != nil && object.ObjectInfo.Draw && object.Lookup.Base != "" && object.Lookup.Token != "" {
|
if object.ObjectInfo != nil && object.ObjectInfo.Draw && object.Lookup.Base != "" && object.Lookup.Token != "" {
|
||||||
entity, err := d2assetmanager.CreateAnimatedEntity(int32(worldX), int32(worldY), object.Lookup, d2resource.PaletteUnits)
|
entity, err := CreateAnimatedEntity(int32(worldX), int32(worldY), object.Lookup, d2resource.PaletteUnits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2mapengine
|
package d2map
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scenemanager
|
package d2scene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
@ -9,6 +9,14 @@ import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Scene defines the function necessary for scene management
|
||||||
|
type Scene interface {
|
||||||
|
Load() []func()
|
||||||
|
Unload()
|
||||||
|
Render(target d2common.Surface)
|
||||||
|
Advance(tickTime float64)
|
||||||
|
}
|
||||||
|
|
||||||
var nextScene Scene // The next scene to be loaded at the end of the game loop
|
var nextScene Scene // The next scene to be loaded at the end of the game loop
|
||||||
var currentScene Scene // The current scene being rendered
|
var currentScene Scene // The current scene being rendered
|
||||||
var loadingIndex int // Determines which load function is currently being called
|
var loadingIndex int // Determines which load function is currently being called
|
|
@ -1,13 +0,0 @@
|
||||||
package d2scenemanager
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Scene defines the function necessary for scene management
|
|
||||||
type Scene interface {
|
|
||||||
Load() []func()
|
|
||||||
Unload()
|
|
||||||
Render(target d2common.Surface)
|
|
||||||
Advance(tickTime float64)
|
|
||||||
}
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"image"
|
"image"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
|
@ -116,8 +116,8 @@ func CreateButton(buttonType ButtonType, text string) Button {
|
||||||
result.buttonLayout = buttonLayout
|
result.buttonLayout = buttonLayout
|
||||||
font := GetFont(buttonLayout.FontPath, d2resource.PaletteUnits)
|
font := GetFont(buttonLayout.FontPath, d2resource.PaletteUnits)
|
||||||
|
|
||||||
animation, _ := d2assetmanager.LoadAnimation(buttonLayout.ResourceName, buttonLayout.PaletteName)
|
animation, _ := d2asset.LoadAnimation(buttonLayout.ResourceName, buttonLayout.PaletteName)
|
||||||
buttonSprite, _ := d2render.LoadSprite(animation)
|
buttonSprite, _ := LoadSprite(animation)
|
||||||
totalButtonTypes := buttonSprite.GetFrameCount() / (buttonLayout.XSegments * buttonLayout.YSegments)
|
totalButtonTypes := buttonSprite.GetFrameCount() / (buttonLayout.XSegments * buttonLayout.YSegments)
|
||||||
for i := 0; i < buttonLayout.XSegments; i++ {
|
for i := 0; i < buttonLayout.XSegments; i++ {
|
||||||
w, _, _ := buttonSprite.GetFrameSize(i)
|
w, _, _ := buttonSprite.GetFrameSize(i)
|
||||||
|
|
|
@ -3,7 +3,7 @@ package d2ui
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ func CreateCheckbox(checkState bool) Checkbox {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Checkbox, d2resource.PaletteFechar)
|
animation, _ := d2asset.LoadAnimation(d2resource.Checkbox, d2resource.PaletteFechar)
|
||||||
checkboxSprite, _ := d2render.LoadSprite(animation)
|
checkboxSprite, _ := LoadSprite(animation)
|
||||||
result.width, result.height, _ = checkboxSprite.GetFrameSize(0)
|
result.width, result.height, _ = checkboxSprite.GetFrameSize(0)
|
||||||
checkboxSprite.SetPosition(0, 0)
|
checkboxSprite.SetPosition(0, 0)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -20,7 +19,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
var widgets []Widget
|
var widgets []Widget
|
||||||
var cursorSprite *d2render.Sprite
|
var cursorSprite *Sprite
|
||||||
var cursorButtons CursorButton
|
var cursorButtons CursorButton
|
||||||
var pressedIndex int
|
var pressedIndex int
|
||||||
var CursorX int
|
var CursorX int
|
||||||
|
@ -28,7 +27,7 @@ var CursorY int
|
||||||
var clickSfx d2interface.SoundEffect
|
var clickSfx d2interface.SoundEffect
|
||||||
var waitForLeftMouseUp bool
|
var waitForLeftMouseUp bool
|
||||||
|
|
||||||
func Initialize(curSprite *d2render.Sprite) {
|
func Initialize(curSprite *Sprite) {
|
||||||
cursorSprite = curSprite
|
cursorSprite = curSprite
|
||||||
pressedIndex = -1
|
pressedIndex = -1
|
||||||
clickSfx, _ = d2audio.LoadSoundEffect(d2resource.SFXButtonClick)
|
clickSfx, _ = d2audio.LoadSoundEffect(d2resource.SFXButtonClick)
|
||||||
|
@ -145,6 +144,6 @@ func KeyPressed(key ebiten.Key) bool {
|
||||||
return ebiten.IsKeyPressed(key)
|
return ebiten.IsKeyPressed(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetCursorSprite() *d2render.Sprite {
|
func GetCursorSprite() *Sprite {
|
||||||
return cursorSprite
|
return cursorSprite
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,12 @@ import (
|
||||||
"image/color"
|
"image/color"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
|
|
||||||
"unicode"
|
"unicode"
|
||||||
|
@ -27,7 +25,7 @@ type FontSize struct {
|
||||||
|
|
||||||
// Font represents a font
|
// Font represents a font
|
||||||
type Font struct {
|
type Font struct {
|
||||||
fontSprite *d2render.Sprite
|
fontSprite *Sprite
|
||||||
fontTable map[uint16]uint16
|
fontTable map[uint16]uint16
|
||||||
metrics map[uint16]FontSize
|
metrics map[uint16]FontSize
|
||||||
}
|
}
|
||||||
|
@ -50,10 +48,10 @@ func CreateFont(font string, palettePath string) *Font {
|
||||||
metrics: make(map[uint16]FontSize),
|
metrics: make(map[uint16]FontSize),
|
||||||
}
|
}
|
||||||
// bug: performance issue when using CJK fonts, because ten thousand frames will be rendered PER font
|
// bug: performance issue when using CJK fonts, because ten thousand frames will be rendered PER font
|
||||||
animation, _ := d2assetmanager.LoadAnimation(font+".dc6", palettePath)
|
animation, _ := d2asset.LoadAnimation(font+".dc6", palettePath)
|
||||||
result.fontSprite, _ = d2render.LoadSprite(animation)
|
result.fontSprite, _ = LoadSprite(animation)
|
||||||
woo := "Woo!\x01"
|
woo := "Woo!\x01"
|
||||||
fontData, err := d2assetmanager.LoadFile(font + ".tbl")
|
fontData, err := d2asset.LoadFile(font + ".tbl")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,7 @@ package d2ui
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -16,12 +15,12 @@ type Scrollbar struct {
|
||||||
maxOffset int
|
maxOffset int
|
||||||
lastDirChange int
|
lastDirChange int
|
||||||
onActivate func()
|
onActivate func()
|
||||||
scrollbarSprite *d2render.Sprite
|
scrollbarSprite *Sprite
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateScrollbar(x, y, height int) Scrollbar {
|
func CreateScrollbar(x, y, height int) Scrollbar {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Scrollbar, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.Scrollbar, d2resource.PaletteSky)
|
||||||
scrollbarSprite, _ := d2render.LoadSprite(animation)
|
scrollbarSprite, _ := LoadSprite(animation)
|
||||||
result := Scrollbar{
|
result := Scrollbar{
|
||||||
visible: true,
|
visible: true,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package d2render
|
package d2ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"image/color"
|
"image/color"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
)
|
)
|
||||||
|
@ -12,14 +13,14 @@ import (
|
||||||
type Sprite struct {
|
type Sprite struct {
|
||||||
x int
|
x int
|
||||||
y int
|
y int
|
||||||
animation *Animation
|
animation *d2asset.Animation
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrNoAnimation error = errors.New("No animation was specified")
|
ErrNoAnimation error = errors.New("No animation was specified")
|
||||||
)
|
)
|
||||||
|
|
||||||
func LoadSprite(animation *Animation) (*Sprite, error) {
|
func LoadSprite(animation *d2asset.Animation) (*Sprite, error) {
|
||||||
if animation == nil {
|
if animation == nil {
|
||||||
return nil, ErrNoAnimation
|
return nil, ErrNoAnimation
|
||||||
}
|
}
|
|
@ -4,14 +4,13 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/hajimehoshi/ebiten/inpututil"
|
"github.com/hajimehoshi/ebiten/inpututil"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,14 +21,14 @@ type TextBox struct {
|
||||||
y int
|
y int
|
||||||
visible bool
|
visible bool
|
||||||
enabled bool
|
enabled bool
|
||||||
bgSprite *d2render.Sprite
|
bgSprite *Sprite
|
||||||
textLabel Label
|
textLabel Label
|
||||||
lineBar Label
|
lineBar Label
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateTextbox() TextBox {
|
func CreateTextbox() TextBox {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.TextBox2, d2resource.PaletteUnits)
|
animation, _ := d2asset.LoadAnimation(d2resource.TextBox2, d2resource.PaletteUnits)
|
||||||
bgSprite, _ := d2render.LoadSprite(animation)
|
bgSprite, _ := LoadSprite(animation)
|
||||||
result := TextBox{
|
result := TextBox{
|
||||||
bgSprite: bgSprite,
|
bgSprite: bgSprite,
|
||||||
textLabel: CreateLabel(d2resource.FontFormal11, d2resource.PaletteUnits),
|
textLabel: CreateLabel(d2resource.FontFormal11, d2resource.PaletteUnits),
|
||||||
|
|
|
@ -9,7 +9,7 @@ import (
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||||
|
@ -18,8 +18,8 @@ import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||||
)
|
)
|
||||||
|
|
||||||
var loadingSprite *d2render.Sprite // The sprite shown when loading stuff
|
var loadingSprite *d2ui.Sprite // The sprite shown when loading stuff
|
||||||
var lastTime float64 // Last time we updated the scene
|
var lastTime float64 // Last time we updated the scene
|
||||||
var showFPS bool
|
var showFPS bool
|
||||||
var timeScale float64
|
var timeScale float64
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ type bsForInputHanding struct {
|
||||||
|
|
||||||
var bsHandler *bsForInputHanding
|
var bsHandler *bsForInputHanding
|
||||||
|
|
||||||
func Initialize(loadingSpr *d2render.Sprite) error {
|
func Initialize(loadingSpr *d2ui.Sprite) error {
|
||||||
bsHandler = &bsForInputHanding{}
|
bsHandler = &bsForInputHanding{}
|
||||||
loadingSprite = loadingSpr
|
loadingSprite = loadingSpr
|
||||||
timeScale = 1.0
|
timeScale = 1.0
|
||||||
|
@ -76,12 +76,12 @@ func (bs *bsForInputHanding) OnKeyDown(event d2input.KeyEvent) bool {
|
||||||
|
|
||||||
// Advance updates the internal state of the engine
|
// Advance updates the internal state of the engine
|
||||||
func Advance() {
|
func Advance() {
|
||||||
d2scenemanager.UpdateScene()
|
d2scene.UpdateScene()
|
||||||
if d2scenemanager.GetCurrentScene() == nil {
|
if d2scene.GetCurrentScene() == nil {
|
||||||
log.Fatal("no scene loaded")
|
log.Fatal("no scene loaded")
|
||||||
}
|
}
|
||||||
|
|
||||||
if d2scenemanager.IsLoading() {
|
if d2scene.IsLoading() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ func Advance() {
|
||||||
deltaTime := (currentTime - lastTime) * timeScale
|
deltaTime := (currentTime - lastTime) * timeScale
|
||||||
lastTime = currentTime
|
lastTime = currentTime
|
||||||
|
|
||||||
d2scenemanager.Advance(deltaTime)
|
d2scene.Advance(deltaTime)
|
||||||
d2ui.Advance(deltaTime)
|
d2ui.Advance(deltaTime)
|
||||||
d2term.Advance(deltaTime)
|
d2term.Advance(deltaTime)
|
||||||
d2input.Advance(deltaTime)
|
d2input.Advance(deltaTime)
|
||||||
|
@ -97,16 +97,16 @@ func Advance() {
|
||||||
|
|
||||||
// Draw draws the game
|
// Draw draws the game
|
||||||
func render(target d2common.Surface) {
|
func render(target d2common.Surface) {
|
||||||
if d2scenemanager.GetLoadingProgress() < 1.0 {
|
if d2scene.GetLoadingProgress() < 1.0 {
|
||||||
loadingSprite.SetCurrentFrame(int(d2helper.Max(0,
|
loadingSprite.SetCurrentFrame(int(d2helper.Max(0,
|
||||||
d2helper.Min(uint32(loadingSprite.GetFrameCount()-1),
|
d2helper.Min(uint32(loadingSprite.GetFrameCount()-1),
|
||||||
uint32(float64(loadingSprite.GetFrameCount()-1)*d2scenemanager.GetLoadingProgress())))))
|
uint32(float64(loadingSprite.GetFrameCount()-1)*d2scene.GetLoadingProgress())))))
|
||||||
loadingSprite.Render(target)
|
loadingSprite.Render(target)
|
||||||
} else {
|
} else {
|
||||||
if d2scenemanager.GetCurrentScene() == nil {
|
if d2scene.GetCurrentScene() == nil {
|
||||||
log.Fatal("no scene loaded")
|
log.Fatal("no scene loaded")
|
||||||
}
|
}
|
||||||
d2scenemanager.Render(target)
|
d2scene.Render(target)
|
||||||
d2ui.Render(target)
|
d2ui.Render(target)
|
||||||
}
|
}
|
||||||
if showFPS {
|
if showFPS {
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2video"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2video"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ func CreateBlizzardIntro() *BlizzardIntro {
|
||||||
func (v *BlizzardIntro) Load() []func() {
|
func (v *BlizzardIntro) Load() []func() {
|
||||||
return []func(){
|
return []func(){
|
||||||
func() {
|
func() {
|
||||||
videoBytes, err := d2assetmanager.LoadFile("/data/local/video/BlizNorth640x480.bik")
|
videoBytes, err := d2asset.LoadFile("/data/local/video/BlizNorth640x480.bik")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
|
@ -6,13 +6,11 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||||
|
|
||||||
|
@ -20,13 +18,12 @@ import (
|
||||||
|
|
||||||
dh "github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
dh "github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
"github.com/hajimehoshi/ebiten"
|
"github.com/hajimehoshi/ebiten"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CharacterSelect struct {
|
type CharacterSelect struct {
|
||||||
background *d2render.Sprite
|
background *d2ui.Sprite
|
||||||
newCharButton d2ui.Button
|
newCharButton d2ui.Button
|
||||||
convertCharButton d2ui.Button
|
convertCharButton d2ui.Button
|
||||||
deleteCharButton d2ui.Button
|
deleteCharButton d2ui.Button
|
||||||
|
@ -34,15 +31,15 @@ type CharacterSelect struct {
|
||||||
okButton d2ui.Button
|
okButton d2ui.Button
|
||||||
deleteCharCancelButton d2ui.Button
|
deleteCharCancelButton d2ui.Button
|
||||||
deleteCharOkButton d2ui.Button
|
deleteCharOkButton d2ui.Button
|
||||||
selectionBox *d2render.Sprite
|
selectionBox *d2ui.Sprite
|
||||||
okCancelBox *d2render.Sprite
|
okCancelBox *d2ui.Sprite
|
||||||
d2HeroTitle d2ui.Label
|
d2HeroTitle d2ui.Label
|
||||||
deleteCharConfirmLabel d2ui.Label
|
deleteCharConfirmLabel d2ui.Label
|
||||||
charScrollbar d2ui.Scrollbar
|
charScrollbar d2ui.Scrollbar
|
||||||
characterNameLabel [8]d2ui.Label
|
characterNameLabel [8]d2ui.Label
|
||||||
characterStatsLabel [8]d2ui.Label
|
characterStatsLabel [8]d2ui.Label
|
||||||
characterExpLabel [8]d2ui.Label
|
characterExpLabel [8]d2ui.Label
|
||||||
characterImage [8]*d2hero.Hero
|
characterImage [8]*d2map.Hero
|
||||||
gameStates []*d2gamestate.GameState
|
gameStates []*d2gamestate.GameState
|
||||||
selectedCharacter int
|
selectedCharacter int
|
||||||
mouseButtonPressed bool
|
mouseButtonPressed bool
|
||||||
|
@ -60,8 +57,8 @@ func (v *CharacterSelect) Load() []func() {
|
||||||
d2audio.PlayBGM(d2resource.BGMTitle)
|
d2audio.PlayBGM(d2resource.BGMTitle)
|
||||||
return []func(){
|
return []func(){
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.CharacterSelectionBackground, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.CharacterSelectionBackground, d2resource.PaletteSky)
|
||||||
v.background, _ = d2render.LoadSprite(animation)
|
v.background, _ = d2ui.LoadSprite(animation)
|
||||||
v.background.SetPosition(0, 0)
|
v.background.SetPosition(0, 0)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
|
@ -121,13 +118,13 @@ func (v *CharacterSelect) Load() []func() {
|
||||||
v.deleteCharConfirmLabel.SetPosition(400, 185)
|
v.deleteCharConfirmLabel.SetPosition(400, 185)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.CharacterSelectionSelectBox, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.CharacterSelectionSelectBox, d2resource.PaletteSky)
|
||||||
v.selectionBox, _ = d2render.LoadSprite(animation)
|
v.selectionBox, _ = d2ui.LoadSprite(animation)
|
||||||
v.selectionBox.SetPosition(37, 86)
|
v.selectionBox.SetPosition(37, 86)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.PopUpOkCancel, d2resource.PaletteFechar)
|
animation, _ := d2asset.LoadAnimation(d2resource.PopUpOkCancel, d2resource.PaletteFechar)
|
||||||
v.okCancelBox, _ = d2render.LoadSprite(animation)
|
v.okCancelBox, _ = d2ui.LoadSprite(animation)
|
||||||
v.okCancelBox.SetPosition(270, 175)
|
v.okCancelBox.SetPosition(270, 175)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
|
@ -175,24 +172,24 @@ func (v *CharacterSelect) updateCharacterBoxes() {
|
||||||
v.characterStatsLabel[i].SetText("Level 1 " + v.gameStates[idx].HeroType.String())
|
v.characterStatsLabel[i].SetText("Level 1 " + v.gameStates[idx].HeroType.String())
|
||||||
v.characterExpLabel[i].SetText(expText)
|
v.characterExpLabel[i].SetText(expText)
|
||||||
// TODO: Generate or load the object from the actual player data...
|
// TODO: Generate or load the object from the actual player data...
|
||||||
v.characterImage[i] = d2hero.CreateHero(
|
v.characterImage[i] = d2map.CreateHero(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
v.gameStates[idx].HeroType,
|
v.gameStates[idx].HeroType,
|
||||||
d2hero.HeroObjects[v.gameStates[idx].HeroType],
|
d2inventory.HeroObjects[v.gameStates[idx].HeroType],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *CharacterSelect) onNewCharButtonClicked() {
|
func (v *CharacterSelect) onNewCharButtonClicked() {
|
||||||
d2scenemanager.SetNextScene(CreateSelectHeroClass())
|
d2scene.SetNextScene(CreateSelectHeroClass())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *CharacterSelect) onExitButtonClicked() {
|
func (v *CharacterSelect) onExitButtonClicked() {
|
||||||
mainMenu := CreateMainMenu()
|
mainMenu := CreateMainMenu()
|
||||||
mainMenu.ShowTrademarkScreen = false
|
mainMenu.ShowTrademarkScreen = false
|
||||||
d2scenemanager.SetNextScene(mainMenu)
|
d2scene.SetNextScene(mainMenu)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *CharacterSelect) Unload() {
|
func (v *CharacterSelect) Unload() {
|
||||||
|
@ -312,5 +309,5 @@ func (v *CharacterSelect) refreshGameStates() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *CharacterSelect) onOkButtonClicked() {
|
func (v *CharacterSelect) onOkButtonClicked() {
|
||||||
d2scenemanager.SetNextScene(CreateGame(v.gameStates[v.selectedCharacter]))
|
d2scene.SetNextScene(CreateGame(v.gameStates[v.selectedCharacter]))
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
@ -8,14 +8,12 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
dh "github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
dh "github.com/OpenDiablo2/OpenDiablo2/d2common/d2helper"
|
||||||
|
@ -30,7 +28,7 @@ type labelItem struct {
|
||||||
|
|
||||||
// Credits represents the credits scene
|
// Credits represents the credits scene
|
||||||
type Credits struct {
|
type Credits struct {
|
||||||
creditsBackground *d2render.Sprite
|
creditsBackground *d2ui.Sprite
|
||||||
exitButton d2ui.Button
|
exitButton d2ui.Button
|
||||||
creditsText []string
|
creditsText []string
|
||||||
labels []*labelItem
|
labels []*labelItem
|
||||||
|
@ -71,8 +69,8 @@ func (v *Credits) LoadContributors() []string {
|
||||||
func (v *Credits) Load() []func() {
|
func (v *Credits) Load() []func() {
|
||||||
return []func(){
|
return []func(){
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.CreditsBackground, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.CreditsBackground, d2resource.PaletteSky)
|
||||||
v.creditsBackground, _ = d2render.LoadSprite(animation)
|
v.creditsBackground, _ = d2ui.LoadSprite(animation)
|
||||||
v.creditsBackground.SetPosition(0, 0)
|
v.creditsBackground.SetPosition(0, 0)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
|
@ -82,7 +80,7 @@ func (v *Credits) Load() []func() {
|
||||||
d2ui.AddWidget(&v.exitButton)
|
d2ui.AddWidget(&v.exitButton)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
fileData, err := d2assetmanager.LoadFile(d2resource.CreditsText)
|
fileData, err := d2asset.LoadFile(d2resource.CreditsText)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -140,7 +138,7 @@ func (v *Credits) Advance(tickTime float64) {
|
||||||
func (v *Credits) onExitButtonClicked() {
|
func (v *Credits) onExitButtonClicked() {
|
||||||
mainMenu := CreateMainMenu()
|
mainMenu := CreateMainMenu()
|
||||||
mainMenu.ShowTrademarkScreen = false
|
mainMenu.ShowTrademarkScreen = false
|
||||||
d2scenemanager.SetNextScene(mainMenu)
|
d2scene.SetNextScene(mainMenu)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *Credits) addNextItem() {
|
func (v *Credits) addNextItem() {
|
|
@ -1,32 +1,28 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
"image/color"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render/d2mapengine"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
|
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Game struct {
|
type Game struct {
|
||||||
gameState *d2gamestate.GameState
|
gameState *d2gamestate.GameState
|
||||||
pentSpinLeft *d2render.Sprite
|
pentSpinLeft *d2ui.Sprite
|
||||||
pentSpinRight *d2render.Sprite
|
pentSpinRight *d2ui.Sprite
|
||||||
testLabel d2ui.Label
|
testLabel d2ui.Label
|
||||||
mapEngine *d2mapengine.MapEngine
|
mapEngine *d2map.MapEngine
|
||||||
hero *d2hero.Hero
|
hero *d2map.Hero
|
||||||
gameControls *d2player.GameControls
|
gameControls *d2player.GameControls
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,15 +38,15 @@ func CreateGame(
|
||||||
func (v *Game) Load() []func() {
|
func (v *Game) Load() []func() {
|
||||||
return []func(){
|
return []func(){
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.PentSpin, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.PentSpin, d2resource.PaletteSky)
|
||||||
v.pentSpinLeft, _ = d2render.LoadSprite(animation)
|
v.pentSpinLeft, _ = d2ui.LoadSprite(animation)
|
||||||
v.pentSpinLeft.PlayBackward()
|
v.pentSpinLeft.PlayBackward()
|
||||||
v.pentSpinLeft.SetPlayLengthMs(475)
|
v.pentSpinLeft.SetPlayLengthMs(475)
|
||||||
v.pentSpinLeft.SetPosition(100, 300)
|
v.pentSpinLeft.SetPosition(100, 300)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.PentSpin, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.PentSpin, d2resource.PaletteSky)
|
||||||
v.pentSpinRight, _ = d2render.LoadSprite(animation)
|
v.pentSpinRight, _ = d2ui.LoadSprite(animation)
|
||||||
v.pentSpinRight.PlayForward()
|
v.pentSpinRight.PlayForward()
|
||||||
v.pentSpinRight.SetPlayLengthMs(475)
|
v.pentSpinRight.SetPlayLengthMs(475)
|
||||||
v.pentSpinRight.SetPosition(650, 300)
|
v.pentSpinRight.SetPosition(650, 300)
|
||||||
|
@ -62,11 +58,11 @@ func (v *Game) Load() []func() {
|
||||||
v.testLabel.SetPosition(400, 250)
|
v.testLabel.SetPosition(400, 250)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
v.mapEngine = d2mapengine.CreateMapEngine(v.gameState)
|
v.mapEngine = d2map.CreateMapEngine(v.gameState)
|
||||||
v.mapEngine.GenerateMap(d2enum.RegionAct1Town, 1, 0)
|
v.mapEngine.GenerateMap(d2enum.RegionAct1Town, 1, 0)
|
||||||
|
|
||||||
startX, startY := v.mapEngine.GetStartPosition()
|
startX, startY := v.mapEngine.GetStartPosition()
|
||||||
v.hero = d2hero.CreateHero(
|
v.hero = d2map.CreateHero(
|
||||||
int32(startX*5)+3,
|
int32(startX*5)+3,
|
||||||
int32(startY*5)+3,
|
int32(startY*5)+3,
|
||||||
0,
|
0,
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -8,30 +8,28 @@ import (
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MainMenu represents the main menu
|
// MainMenu represents the main menu
|
||||||
type MainMenu struct {
|
type MainMenu struct {
|
||||||
trademarkBackground *d2render.Sprite
|
trademarkBackground *d2ui.Sprite
|
||||||
background *d2render.Sprite
|
background *d2ui.Sprite
|
||||||
diabloLogoLeft *d2render.Sprite
|
diabloLogoLeft *d2ui.Sprite
|
||||||
diabloLogoRight *d2render.Sprite
|
diabloLogoRight *d2ui.Sprite
|
||||||
diabloLogoLeftBack *d2render.Sprite
|
diabloLogoLeftBack *d2ui.Sprite
|
||||||
diabloLogoRightBack *d2render.Sprite
|
diabloLogoRightBack *d2ui.Sprite
|
||||||
singlePlayerButton d2ui.Button
|
singlePlayerButton d2ui.Button
|
||||||
githubButton d2ui.Button
|
githubButton d2ui.Button
|
||||||
exitDiabloButton d2ui.Button
|
exitDiabloButton d2ui.Button
|
||||||
|
@ -97,37 +95,37 @@ func (v *MainMenu) Load() []func() {
|
||||||
v.openDiabloLabel.SetPosition(400, 580)
|
v.openDiabloLabel.SetPosition(400, 580)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.GameSelectScreen, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.GameSelectScreen, d2resource.PaletteSky)
|
||||||
v.background, _ = d2render.LoadSprite(animation)
|
v.background, _ = d2ui.LoadSprite(animation)
|
||||||
v.background.SetPosition(0, 0)
|
v.background.SetPosition(0, 0)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.TrademarkScreen, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.TrademarkScreen, d2resource.PaletteSky)
|
||||||
v.trademarkBackground, _ = d2render.LoadSprite(animation)
|
v.trademarkBackground, _ = d2ui.LoadSprite(animation)
|
||||||
v.trademarkBackground.SetPosition(0, 0)
|
v.trademarkBackground.SetPosition(0, 0)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Diablo2LogoFireLeft, d2resource.PaletteUnits)
|
animation, _ := d2asset.LoadAnimation(d2resource.Diablo2LogoFireLeft, d2resource.PaletteUnits)
|
||||||
v.diabloLogoLeft, _ = d2render.LoadSprite(animation)
|
v.diabloLogoLeft, _ = d2ui.LoadSprite(animation)
|
||||||
v.diabloLogoLeft.SetBlend(true)
|
v.diabloLogoLeft.SetBlend(true)
|
||||||
v.diabloLogoLeft.PlayForward()
|
v.diabloLogoLeft.PlayForward()
|
||||||
v.diabloLogoLeft.SetPosition(400, 120)
|
v.diabloLogoLeft.SetPosition(400, 120)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Diablo2LogoFireRight, d2resource.PaletteUnits)
|
animation, _ := d2asset.LoadAnimation(d2resource.Diablo2LogoFireRight, d2resource.PaletteUnits)
|
||||||
v.diabloLogoRight, _ = d2render.LoadSprite(animation)
|
v.diabloLogoRight, _ = d2ui.LoadSprite(animation)
|
||||||
v.diabloLogoRight.SetBlend(true)
|
v.diabloLogoRight.SetBlend(true)
|
||||||
v.diabloLogoRight.PlayForward()
|
v.diabloLogoRight.PlayForward()
|
||||||
v.diabloLogoRight.SetPosition(400, 120)
|
v.diabloLogoRight.SetPosition(400, 120)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Diablo2LogoBlackLeft, d2resource.PaletteUnits)
|
animation, _ := d2asset.LoadAnimation(d2resource.Diablo2LogoBlackLeft, d2resource.PaletteUnits)
|
||||||
v.diabloLogoLeftBack, _ = d2render.LoadSprite(animation)
|
v.diabloLogoLeftBack, _ = d2ui.LoadSprite(animation)
|
||||||
v.diabloLogoLeftBack.SetPosition(400, 120)
|
v.diabloLogoLeftBack.SetPosition(400, 120)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Diablo2LogoBlackRight, d2resource.PaletteUnits)
|
animation, _ := d2asset.LoadAnimation(d2resource.Diablo2LogoBlackRight, d2resource.PaletteUnits)
|
||||||
v.diabloLogoRightBack, _ = d2render.LoadSprite(animation)
|
v.diabloLogoRightBack, _ = d2ui.LoadSprite(animation)
|
||||||
v.diabloLogoRightBack.SetPosition(400, 120)
|
v.diabloLogoRightBack.SetPosition(400, 120)
|
||||||
},
|
},
|
||||||
func() {
|
func() {
|
||||||
|
@ -175,7 +173,7 @@ func (v *MainMenu) Load() []func() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MainMenu) onMapTestClicked() {
|
func (v *MainMenu) onMapTestClicked() {
|
||||||
d2scenemanager.SetNextScene(CreateMapEngineTest(0, 1))
|
d2scene.SetNextScene(CreateMapEngineTest(0, 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
func openbrowser(url string) {
|
func openbrowser(url string) {
|
||||||
|
@ -200,10 +198,10 @@ func openbrowser(url string) {
|
||||||
func (v *MainMenu) onSinglePlayerClicked() {
|
func (v *MainMenu) onSinglePlayerClicked() {
|
||||||
// Go here only if existing characters are available to select
|
// Go here only if existing characters are available to select
|
||||||
if d2gamestate.HasGameStates() {
|
if d2gamestate.HasGameStates() {
|
||||||
d2scenemanager.SetNextScene(CreateCharacterSelect())
|
d2scene.SetNextScene(CreateCharacterSelect())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
d2scenemanager.SetNextScene(CreateSelectHeroClass())
|
d2scene.SetNextScene(CreateSelectHeroClass())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MainMenu) onGithubButtonClicked() {
|
func (v *MainMenu) onGithubButtonClicked() {
|
||||||
|
@ -215,7 +213,7 @@ func (v *MainMenu) onExitButtonClicked() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *MainMenu) onCreditsButtonClicked() {
|
func (v *MainMenu) onCreditsButtonClicked() {
|
||||||
d2scenemanager.SetNextScene(CreateCredits())
|
d2scene.SetNextScene(CreateCredits())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unload unloads the data for the main menu
|
// Unload unloads the data for the main menu
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"math"
|
"math"
|
||||||
|
@ -8,7 +8,7 @@ import (
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render/d2mapengine"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RegionSpec struct {
|
type RegionSpec struct {
|
||||||
|
@ -83,7 +83,7 @@ var regions []RegionSpec = []RegionSpec{
|
||||||
|
|
||||||
type MapEngineTest struct {
|
type MapEngineTest struct {
|
||||||
gameState *d2gamestate.GameState
|
gameState *d2gamestate.GameState
|
||||||
mapEngine *d2mapengine.MapEngine
|
mapEngine *d2map.MapEngine
|
||||||
|
|
||||||
//TODO: this is region specific properties, should be refactored for multi-region rendering
|
//TODO: this is region specific properties, should be refactored for multi-region rendering
|
||||||
currentRegion int
|
currentRegion int
|
||||||
|
@ -133,7 +133,7 @@ func (v *MapEngineTest) LoadRegionByIndex(n int, levelPreset, fileIndex int) {
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
v.mapEngine.GenerateAct1Overworld()
|
v.mapEngine.GenerateAct1Overworld()
|
||||||
} else {
|
} else {
|
||||||
v.mapEngine = d2mapengine.CreateMapEngine(v.gameState) // necessary for map name update
|
v.mapEngine = d2map.CreateMapEngine(v.gameState) // necessary for map name update
|
||||||
v.mapEngine.GenerateMap(d2enum.RegionIdType(n), levelPreset, fileIndex)
|
v.mapEngine.GenerateMap(d2enum.RegionIdType(n), levelPreset, fileIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ func (v *MapEngineTest) Load() []func() {
|
||||||
d2audio.PlayBGM("")
|
d2audio.PlayBGM("")
|
||||||
return []func(){
|
return []func(){
|
||||||
func() {
|
func() {
|
||||||
v.mapEngine = d2mapengine.CreateMapEngine(v.gameState)
|
v.mapEngine = d2map.CreateMapEngine(v.gameState)
|
||||||
v.LoadRegionByIndex(v.currentRegion, v.levelPreset, v.fileIndex)
|
v.LoadRegionByIndex(v.currentRegion, v.levelPreset, v.fileIndex)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -245,13 +245,13 @@ func (met *MapEngineTest) OnKeyDown(event d2input.KeyEvent) bool {
|
||||||
if event.Key == d2input.KeyN {
|
if event.Key == d2input.KeyN {
|
||||||
if event.KeyMod == d2input.KeyModControl {
|
if event.KeyMod == d2input.KeyModControl {
|
||||||
met.fileIndex = increment(met.fileIndex, 0, met.filesCount-1)
|
met.fileIndex = increment(met.fileIndex, 0, met.filesCount-1)
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
} else if event.KeyMod == d2input.KeyModShift {
|
} else if event.KeyMod == d2input.KeyModShift {
|
||||||
met.levelPreset = increment(met.levelPreset, met.regionSpec.startPresetIndex, met.regionSpec.endPresetIndex)
|
met.levelPreset = increment(met.levelPreset, met.regionSpec.startPresetIndex, met.regionSpec.endPresetIndex)
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
} else {
|
} else {
|
||||||
met.currentRegion = increment(met.currentRegion, 0, len(regions))
|
met.currentRegion = increment(met.currentRegion, 0, len(regions))
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
@ -260,13 +260,13 @@ func (met *MapEngineTest) OnKeyDown(event d2input.KeyEvent) bool {
|
||||||
if event.Key == d2input.KeyP {
|
if event.Key == d2input.KeyP {
|
||||||
if event.KeyMod == d2input.KeyModControl {
|
if event.KeyMod == d2input.KeyModControl {
|
||||||
met.fileIndex = decrement(met.fileIndex, 0, met.filesCount-1)
|
met.fileIndex = decrement(met.fileIndex, 0, met.filesCount-1)
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
} else if event.KeyMod == d2input.KeyModShift {
|
} else if event.KeyMod == d2input.KeyModShift {
|
||||||
met.levelPreset = decrement(met.levelPreset, met.regionSpec.startPresetIndex, met.regionSpec.endPresetIndex)
|
met.levelPreset = decrement(met.levelPreset, met.regionSpec.startPresetIndex, met.regionSpec.endPresetIndex)
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
} else {
|
} else {
|
||||||
met.currentRegion = decrement(met.currentRegion, 0, len(regions))
|
met.currentRegion = decrement(met.currentRegion, 0, len(regions))
|
||||||
d2scenemanager.SetNextScene(met)
|
d2scene.SetNextScene(met)
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
|
@ -1,4 +1,4 @@
|
||||||
package d2scene
|
package d2gamescene
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image"
|
"image"
|
||||||
|
@ -6,16 +6,14 @@ import (
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gamestate"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
@ -27,14 +25,14 @@ import (
|
||||||
|
|
||||||
type HeroRenderInfo struct {
|
type HeroRenderInfo struct {
|
||||||
Stance d2enum.HeroStance
|
Stance d2enum.HeroStance
|
||||||
IdleSprite *d2render.Sprite
|
IdleSprite *d2ui.Sprite
|
||||||
IdleSelectedSprite *d2render.Sprite
|
IdleSelectedSprite *d2ui.Sprite
|
||||||
ForwardWalkSprite *d2render.Sprite
|
ForwardWalkSprite *d2ui.Sprite
|
||||||
ForwardWalkSpriteOverlay *d2render.Sprite
|
ForwardWalkSpriteOverlay *d2ui.Sprite
|
||||||
SelectedSprite *d2render.Sprite
|
SelectedSprite *d2ui.Sprite
|
||||||
SelectedSpriteOverlay *d2render.Sprite
|
SelectedSpriteOverlay *d2ui.Sprite
|
||||||
BackWalkSprite *d2render.Sprite
|
BackWalkSprite *d2ui.Sprite
|
||||||
BackWalkSpriteOverlay *d2render.Sprite
|
BackWalkSpriteOverlay *d2ui.Sprite
|
||||||
SelectionBounds image.Rectangle
|
SelectionBounds image.Rectangle
|
||||||
SelectSfx d2interface.SoundEffect
|
SelectSfx d2interface.SoundEffect
|
||||||
DeselectSfx d2interface.SoundEffect
|
DeselectSfx d2interface.SoundEffect
|
||||||
|
@ -52,8 +50,8 @@ func (hri *HeroRenderInfo) Advance(elapsed float64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SelectHeroClass struct {
|
type SelectHeroClass struct {
|
||||||
bgImage *d2render.Sprite
|
bgImage *d2ui.Sprite
|
||||||
campfire *d2render.Sprite
|
campfire *d2ui.Sprite
|
||||||
headingLabel d2ui.Label
|
headingLabel d2ui.Label
|
||||||
heroClassLabel d2ui.Label
|
heroClassLabel d2ui.Label
|
||||||
heroDesc1Label d2ui.Label
|
heroDesc1Label d2ui.Label
|
||||||
|
@ -446,12 +444,12 @@ func (v *SelectHeroClass) Unload() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v SelectHeroClass) onExitButtonClicked() {
|
func (v SelectHeroClass) onExitButtonClicked() {
|
||||||
d2scenemanager.SetNextScene(CreateCharacterSelect())
|
d2scene.SetNextScene(CreateCharacterSelect())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v SelectHeroClass) onOkButtonClicked() {
|
func (v SelectHeroClass) onOkButtonClicked() {
|
||||||
gameState := d2gamestate.CreateGameState(v.heroNameTextbox.GetText(), v.selectedHero, v.hardcoreCheckbox.GetCheckState())
|
gameState := d2gamestate.CreateGameState(v.heroNameTextbox.GetText(), v.selectedHero, v.hardcoreCheckbox.GetCheckState())
|
||||||
d2scenemanager.SetNextScene(CreateGame(gameState))
|
d2scene.SetNextScene(CreateGame(gameState))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *SelectHeroClass) Render(screen d2common.Surface) {
|
func (v *SelectHeroClass) Render(screen d2common.Surface) {
|
||||||
|
@ -652,27 +650,27 @@ func (v *SelectHeroClass) setDescLabels(descKey string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setSpriteToFirstFrame(sprite *d2render.Sprite) {
|
func setSpriteToFirstFrame(sprite *d2ui.Sprite) {
|
||||||
if sprite != nil {
|
if sprite != nil {
|
||||||
sprite.Rewind()
|
sprite.Rewind()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func drawSprite(sprite *d2render.Sprite, target d2common.Surface) {
|
func drawSprite(sprite *d2ui.Sprite, target d2common.Surface) {
|
||||||
if sprite != nil {
|
if sprite != nil {
|
||||||
sprite.Render(target)
|
sprite.Render(target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func advanceSprite(sprite *d2render.Sprite, elapsed float64) {
|
func advanceSprite(sprite *d2ui.Sprite, elapsed float64) {
|
||||||
if sprite != nil {
|
if sprite != nil {
|
||||||
sprite.Advance(elapsed)
|
sprite.Advance(elapsed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadSprite(animationPath, palettePath string) *d2render.Sprite {
|
func loadSprite(animationPath, palettePath string) *d2ui.Sprite {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(animationPath, palettePath)
|
animation, _ := d2asset.LoadAnimation(animationPath, palettePath)
|
||||||
sprite, _ := d2render.LoadSprite(animation)
|
sprite, _ := d2ui.LoadSprite(animation)
|
||||||
return sprite
|
return sprite
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,11 +3,10 @@ package d2player
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render/d2mapengine"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Panel interface {
|
type Panel interface {
|
||||||
|
@ -18,18 +17,18 @@ type Panel interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type GameControls struct {
|
type GameControls struct {
|
||||||
hero *d2hero.Hero
|
hero *d2map.Hero
|
||||||
mapEngine *d2mapengine.MapEngine
|
mapEngine *d2map.MapEngine
|
||||||
inventory *Inventory
|
inventory *Inventory
|
||||||
|
|
||||||
// UI
|
// UI
|
||||||
globeSprite *d2render.Sprite
|
globeSprite *d2ui.Sprite
|
||||||
mainPanel *d2render.Sprite
|
mainPanel *d2ui.Sprite
|
||||||
menuButton *d2render.Sprite
|
menuButton *d2ui.Sprite
|
||||||
skillIcon *d2render.Sprite
|
skillIcon *d2ui.Sprite
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGameControls(hero *d2hero.Hero, mapEngine *d2mapengine.MapEngine) *GameControls {
|
func NewGameControls(hero *d2map.Hero, mapEngine *d2map.MapEngine) *GameControls {
|
||||||
return &GameControls{
|
return &GameControls{
|
||||||
hero: hero,
|
hero: hero,
|
||||||
mapEngine: mapEngine,
|
mapEngine: mapEngine,
|
||||||
|
@ -57,17 +56,17 @@ func (g *GameControls) OnMouseButtonDown(event d2input.MouseEvent) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GameControls) Load() {
|
func (g *GameControls) Load() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.GameGlobeOverlap, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.GameGlobeOverlap, d2resource.PaletteSky)
|
||||||
g.globeSprite, _ = d2render.LoadSprite(animation)
|
g.globeSprite, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
animation, _ = d2assetmanager.LoadAnimation(d2resource.GamePanels, d2resource.PaletteSky)
|
animation, _ = d2asset.LoadAnimation(d2resource.GamePanels, d2resource.PaletteSky)
|
||||||
g.mainPanel, _ = d2render.LoadSprite(animation)
|
g.mainPanel, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
animation, _ = d2assetmanager.LoadAnimation(d2resource.MenuButton, d2resource.PaletteSky)
|
animation, _ = d2asset.LoadAnimation(d2resource.MenuButton, d2resource.PaletteSky)
|
||||||
g.menuButton, _ = d2render.LoadSprite(animation)
|
g.menuButton, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
animation, _ = d2assetmanager.LoadAnimation(d2resource.GenericSkills, d2resource.PaletteSky)
|
animation, _ = d2asset.LoadAnimation(d2resource.GenericSkills, d2resource.PaletteSky)
|
||||||
g.skillIcon, _ = d2render.LoadSprite(animation)
|
g.skillIcon, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
g.inventory.Load()
|
g.inventory.Load()
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,14 +3,14 @@ package d2player
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2hero"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Inventory struct {
|
type Inventory struct {
|
||||||
frame *d2render.Sprite
|
frame *d2ui.Sprite
|
||||||
panel *d2render.Sprite
|
panel *d2ui.Sprite
|
||||||
grid *ItemGrid
|
grid *ItemGrid
|
||||||
originX int
|
originX int
|
||||||
originY int
|
originY int
|
||||||
|
@ -44,18 +44,18 @@ func (g *Inventory) Close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *Inventory) Load() {
|
func (g *Inventory) Load() {
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.Frame, d2resource.PaletteSky)
|
animation, _ := d2asset.LoadAnimation(d2resource.Frame, d2resource.PaletteSky)
|
||||||
g.frame, _ = d2render.LoadSprite(animation)
|
g.frame, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
animation, _ = d2assetmanager.LoadAnimation(d2resource.InventoryCharacterPanel, d2resource.PaletteSky)
|
animation, _ = d2asset.LoadAnimation(d2resource.InventoryCharacterPanel, d2resource.PaletteSky)
|
||||||
g.panel, _ = d2render.LoadSprite(animation)
|
g.panel, _ = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
items := []InventoryItem{
|
items := []InventoryItem{
|
||||||
d2hero.GetWeaponItemByCode("wnd"),
|
d2inventory.GetWeaponItemByCode("wnd"),
|
||||||
d2hero.GetWeaponItemByCode("sst"),
|
d2inventory.GetWeaponItemByCode("sst"),
|
||||||
d2hero.GetWeaponItemByCode("jav"),
|
d2inventory.GetWeaponItemByCode("jav"),
|
||||||
d2hero.GetArmorItemByCode("buc"),
|
d2inventory.GetArmorItemByCode("buc"),
|
||||||
d2hero.GetWeaponItemByCode("clb"),
|
d2inventory.GetWeaponItemByCode("clb"),
|
||||||
}
|
}
|
||||||
g.grid.Add(items...)
|
g.grid.Add(items...)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,12 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type InventoryItem interface {
|
type InventoryItem interface {
|
||||||
|
@ -30,7 +30,7 @@ type ItemGrid struct {
|
||||||
height int
|
height int
|
||||||
originX int
|
originX int
|
||||||
originY int
|
originY int
|
||||||
sprites map[string]*d2render.Sprite
|
sprites map[string]*d2ui.Sprite
|
||||||
slotSize int
|
slotSize int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ func NewItemGrid(width int, height int, originX int, originY int) *ItemGrid {
|
||||||
originX: originX,
|
originX: originX,
|
||||||
originY: originY,
|
originY: originY,
|
||||||
slotSize: 29,
|
slotSize: 29,
|
||||||
sprites: make(map[string]*d2render.Sprite),
|
sprites: make(map[string]*d2ui.Sprite),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ func (g *ItemGrid) Add(items ...InventoryItem) (int, error) {
|
||||||
|
|
||||||
// Load reads the inventory sprites for items into local cache for rendering.
|
// Load reads the inventory sprites for items into local cache for rendering.
|
||||||
func (g *ItemGrid) Load(items ...InventoryItem) {
|
func (g *ItemGrid) Load(items ...InventoryItem) {
|
||||||
var itemSprite *d2render.Sprite
|
var itemSprite *d2ui.Sprite
|
||||||
|
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
if _, exists := g.sprites[item.ItemCode()]; exists {
|
if _, exists := g.sprites[item.ItemCode()]; exists {
|
||||||
|
@ -101,7 +101,7 @@ func (g *ItemGrid) Load(items ...InventoryItem) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Put the pattern into D2Shared
|
// TODO: Put the pattern into D2Shared
|
||||||
animation, err := d2assetmanager.LoadAnimation(
|
animation, err := d2asset.LoadAnimation(
|
||||||
fmt.Sprintf("/data/global/items/inv%s.dc6", item.ItemCode()),
|
fmt.Sprintf("/data/global/items/inv%s.dc6", item.ItemCode()),
|
||||||
d2resource.PaletteSky,
|
d2resource.PaletteSky,
|
||||||
)
|
)
|
||||||
|
@ -109,7 +109,7 @@ func (g *ItemGrid) Load(items ...InventoryItem) {
|
||||||
log.Printf("failed to load sprite for item (%s): %v", item.ItemCode(), err)
|
log.Printf("failed to load sprite for item (%s): %v", item.ItemCode(), err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
itemSprite, err = d2render.LoadSprite(animation)
|
itemSprite, err = d2ui.LoadSprite(animation)
|
||||||
|
|
||||||
g.sprites[item.ItemCode()] = itemSprite
|
g.sprites[item.ItemCode()] = itemSprite
|
||||||
}
|
}
|
||||||
|
|
12
go.sum
12
go.sum
|
@ -12,28 +12,25 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 h1:b+9H1GAsx5RsjvDFLoS5zkNBzIQMuVKUYQDmxU3N5XE=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 h1:b+9H1GAsx5RsjvDFLoS5zkNBzIQMuVKUYQDmxU3N5XE=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-restruct/restruct v0.0.0-20191018101351-5fb876c952c9 h1:f25lTFrAliLucJ3G6a9PcgyaGXA6omEF+682jgfC+7U=
|
|
||||||
github.com/go-restruct/restruct v0.0.0-20191018101351-5fb876c952c9/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk=
|
|
||||||
github.com/go-restruct/restruct v0.0.0-20191227155143-5734170a48a1 h1:LoN2wx/aN8JPGebG+2DaUyk4M+xRcqJXfuIbs8AWHdE=
|
github.com/go-restruct/restruct v0.0.0-20191227155143-5734170a48a1 h1:LoN2wx/aN8JPGebG+2DaUyk4M+xRcqJXfuIbs8AWHdE=
|
||||||
github.com/go-restruct/restruct v0.0.0-20191227155143-5734170a48a1/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk=
|
github.com/go-restruct/restruct v0.0.0-20191227155143-5734170a48a1/go.mod h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk=
|
||||||
github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc=
|
github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc=
|
||||||
github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/hajimehoshi/bitmapfont v1.2.0/go.mod h1:h9QrPk6Ktb2neObTlAbma6Ini1xgMjbJ3w7ysmD7IOU=
|
github.com/hajimehoshi/bitmapfont v1.2.0/go.mod h1:h9QrPk6Ktb2neObTlAbma6Ini1xgMjbJ3w7ysmD7IOU=
|
||||||
|
github.com/hajimehoshi/ebiten v1.10.3 h1:ywrEsXclsjrdKIhYYrmy/yxLFCd1y4efGVsnFRl8OLU=
|
||||||
|
github.com/hajimehoshi/ebiten v1.10.3/go.mod h1:i9dIEUf5/MuPtbK1/wHR0PB7ZtqhjOxxg+U1xfxapcY=
|
||||||
github.com/hajimehoshi/ebiten v1.11.0-alpha.2.0.20200102072751-e66f1fb71e2e h1:NRGAeXOSMrAo0f4GPaUoiF61eo0wWrfgONPSTZA6Zhg=
|
github.com/hajimehoshi/ebiten v1.11.0-alpha.2.0.20200102072751-e66f1fb71e2e h1:NRGAeXOSMrAo0f4GPaUoiF61eo0wWrfgONPSTZA6Zhg=
|
||||||
github.com/hajimehoshi/ebiten v1.11.0-alpha.2.0.20200102072751-e66f1fb71e2e/go.mod h1:0SLvfr8iI2NxzpNB/olBM+dLN9Ur5a9szG13wOgQ0nQ=
|
github.com/hajimehoshi/ebiten v1.11.0-alpha.2.0.20200102072751-e66f1fb71e2e/go.mod h1:0SLvfr8iI2NxzpNB/olBM+dLN9Ur5a9szG13wOgQ0nQ=
|
||||||
github.com/hajimehoshi/go-mp3 v0.2.1/go.mod h1:Rr+2P46iH6PwTPVgSsEwBkon0CK5DxCAeX/Rp65DCTE=
|
github.com/hajimehoshi/go-mp3 v0.2.1/go.mod h1:Rr+2P46iH6PwTPVgSsEwBkon0CK5DxCAeX/Rp65DCTE=
|
||||||
github.com/hajimehoshi/oto v0.3.4 h1:FSlftYfESnZgI1ghi6WLMqVMjTrl9i8nRri3bL4Bdhs=
|
|
||||||
github.com/hajimehoshi/oto v0.3.4/go.mod h1:PgjqsBJff0efqL2nlMJidJgVJywLn6M4y8PI4TfeWfA=
|
github.com/hajimehoshi/oto v0.3.4/go.mod h1:PgjqsBJff0efqL2nlMJidJgVJywLn6M4y8PI4TfeWfA=
|
||||||
github.com/hajimehoshi/oto v0.5.4 h1:Dn+WcYeF310xqStKm0tnvoruYUV5Sce8+sfUaIvWGkE=
|
github.com/hajimehoshi/oto v0.5.4 h1:Dn+WcYeF310xqStKm0tnvoruYUV5Sce8+sfUaIvWGkE=
|
||||||
github.com/hajimehoshi/oto v0.5.4/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI=
|
github.com/hajimehoshi/oto v0.5.4/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI=
|
||||||
github.com/jakecoffman/cp v0.1.0/go.mod h1:a3xPx9N8RyFAACD644t2dj/nK4SuLg1v+jL61m2yVo4=
|
github.com/jakecoffman/cp v0.1.0/go.mod h1:a3xPx9N8RyFAACD644t2dj/nK4SuLg1v+jL61m2yVo4=
|
||||||
github.com/jfreymuth/oggvorbis v1.0.0/go.mod h1:abe6F9QRjuU9l+2jek3gj46lu40N4qlYxh2grqkLEDM=
|
github.com/jfreymuth/oggvorbis v1.0.0/go.mod h1:abe6F9QRjuU9l+2jek3gj46lu40N4qlYxh2grqkLEDM=
|
||||||
github.com/jfreymuth/vorbis v1.0.0/go.mod h1:8zy3lUAm9K/rJJk223RKy6vjCZTWC61NA2QD06bfOE0=
|
github.com/jfreymuth/vorbis v1.0.0/go.mod h1:8zy3lUAm9K/rJJk223RKy6vjCZTWC61NA2QD06bfOE0=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
|
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
|
@ -47,18 +44,15 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
||||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
|
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
|
||||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136 h1:A1gGSx58LAGVHUUsOf7IiR0u8Xb6W51gRwfDBhkdcaw=
|
|
||||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
|
|
||||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||||
golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
golang.org/x/mobile v0.0.0-20191025110607-73ccc5ba0426/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ=
|
golang.org/x/mobile v0.0.0-20191025110607-73ccc5ba0426/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ=
|
||||||
golang.org/x/mobile v0.0.0-20191115022231-f0c40035f2ba h1:NVszahdZPQTROdO0F5gnXdZhGl2lXFb9w7Ek1F2Pbmk=
|
|
||||||
golang.org/x/mobile v0.0.0-20191115022231-f0c40035f2ba/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ=
|
golang.org/x/mobile v0.0.0-20191115022231-f0c40035f2ba/go.mod h1:p895TfNkDgPEmEQrNiOtIl3j98d/tGU95djDj7NfyjQ=
|
||||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
@ -70,7 +64,6 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777 h1:wejkGHRTr38uaKRqECZlsCsJ1/TGxIyFbH32x5zUdu4=
|
|
||||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
@ -81,7 +74,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
|
96
main.go
96
main.go
|
@ -3,38 +3,28 @@ package main
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
ebiten2 "github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio/ebiten"
|
"gopkg.in/alecthomas/kingpin.v2"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2assetmanager"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scenemanager"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2scene"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2game"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render/ebiten"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2term"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2config"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2gamescene"
|
||||||
|
|
||||||
"gopkg.in/alecthomas/kingpin.v2"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||||
|
ebiten2 "github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio/ebiten"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render/ebiten"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2scene"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2term"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2game"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GitBranch is set by the CI build process to the name of the branch
|
// GitBranch is set by the CI build process to the name of the branch
|
||||||
|
@ -48,9 +38,9 @@ var preset = kingpin.Arg("preset", "Level preset").Int()
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if len(GitBranch) == 0 {
|
if len(GitBranch) == 0 {
|
||||||
GitBranch = "Local Build"
|
GitBranch = "Local Build"
|
||||||
GitCommit = ""
|
GitCommit = ""
|
||||||
}
|
}
|
||||||
d2common.SetBuildInfo(GitBranch, GitCommit)
|
d2common.SetBuildInfo(GitBranch, GitCommit)
|
||||||
log.SetFlags(log.Lshortfile)
|
log.SetFlags(log.Lshortfile)
|
||||||
log.Println("OpenDiablo2 - Open source Diablo 2 engine")
|
log.Println("OpenDiablo2 - Open source Diablo 2 engine")
|
||||||
|
@ -67,9 +57,9 @@ func main() {
|
||||||
|
|
||||||
kingpin.Parse()
|
kingpin.Parse()
|
||||||
if *region == 0 {
|
if *region == 0 {
|
||||||
d2scenemanager.SetNextScene(d2scene.CreateMainMenu())
|
d2scene.SetNextScene(d2gamescene.CreateMainMenu())
|
||||||
} else {
|
} else {
|
||||||
d2scenemanager.SetNextScene(d2scene.CreateMapEngineTest(*region, *preset))
|
d2scene.SetNextScene(d2gamescene.CreateMapEngineTest(*region, *preset))
|
||||||
}
|
}
|
||||||
err = d2game.Run(GitBranch)
|
err = d2game.Run(GitBranch)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -89,7 +79,7 @@ func loadTextDictionary() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range toLoad {
|
for _, item := range toLoad {
|
||||||
fileData, err = d2assetmanager.LoadFile(item)
|
fileData, err = d2asset.LoadFile(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
return false
|
return false
|
||||||
|
@ -107,7 +97,7 @@ func loadPalettes() bool {
|
||||||
} {
|
} {
|
||||||
filePath := `data\global\palette\` + pal + `\pal.dat`
|
filePath := `data\global\palette\` + pal + `\pal.dat`
|
||||||
paletteType := d2enum.PaletteType(pal)
|
paletteType := d2enum.PaletteType(pal)
|
||||||
file, _ := d2assetmanager.LoadFile(filePath)
|
file, _ := d2asset.LoadFile(filePath)
|
||||||
d2datadict.LoadPalette(paletteType, file)
|
d2datadict.LoadPalette(paletteType, file)
|
||||||
}
|
}
|
||||||
log.Printf("Loaded %d palettes", len(d2datadict.Palettes))
|
log.Printf("Loaded %d palettes", len(d2datadict.Palettes))
|
||||||
|
@ -143,7 +133,7 @@ func initializeEverything() error {
|
||||||
}
|
}
|
||||||
d2term.BindLogger()
|
d2term.BindLogger()
|
||||||
|
|
||||||
d2assetmanager.Initialize()
|
d2asset.Initialize()
|
||||||
|
|
||||||
err = d2render.SetWindowIcon("d2logo.png")
|
err = d2render.SetWindowIcon("d2logo.png")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -172,86 +162,86 @@ func initializeEverything() error {
|
||||||
|
|
||||||
loadTextDictionary()
|
loadTextDictionary()
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.LevelType)
|
file, err = d2asset.LoadFile(d2resource.LevelType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadLevelTypes(file)
|
d2datadict.LoadLevelTypes(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.LevelPreset)
|
file, err = d2asset.LoadFile(d2resource.LevelPreset)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadLevelPresets(file)
|
d2datadict.LoadLevelPresets(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.LevelWarp)
|
file, err = d2asset.LoadFile(d2resource.LevelWarp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadLevelWarps(file)
|
d2datadict.LoadLevelWarps(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.ObjectType)
|
file, err = d2asset.LoadFile(d2resource.ObjectType)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadObjectTypes(file)
|
d2datadict.LoadObjectTypes(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.ObjectDetails)
|
file, err = d2asset.LoadFile(d2resource.ObjectDetails)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadObjects(file)
|
d2datadict.LoadObjects(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.Weapons)
|
file, err = d2asset.LoadFile(d2resource.Weapons)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadWeapons(file)
|
d2datadict.LoadWeapons(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.Armor)
|
file, err = d2asset.LoadFile(d2resource.Armor)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadArmors(file)
|
d2datadict.LoadArmors(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.Misc)
|
file, err = d2asset.LoadFile(d2resource.Misc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadMiscItems(file)
|
d2datadict.LoadMiscItems(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.UniqueItems)
|
file, err = d2asset.LoadFile(d2resource.UniqueItems)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadUniqueItems(file)
|
d2datadict.LoadUniqueItems(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.Missiles)
|
file, err = d2asset.LoadFile(d2resource.Missiles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadMissiles(file)
|
d2datadict.LoadMissiles(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.SoundSettings)
|
file, err = d2asset.LoadFile(d2resource.SoundSettings)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadSounds(file)
|
d2datadict.LoadSounds(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.AnimationData)
|
file, err = d2asset.LoadFile(d2resource.AnimationData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2data.LoadAnimationData(file)
|
d2data.LoadAnimationData(file)
|
||||||
|
|
||||||
file, err = d2assetmanager.LoadFile(d2resource.MonStats)
|
file, err = d2asset.LoadFile(d2resource.MonStats)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d2datadict.LoadMonStats(file)
|
d2datadict.LoadMonStats(file)
|
||||||
|
|
||||||
animation, _ := d2assetmanager.LoadAnimation(d2resource.LoadingScreen, d2resource.PaletteLoading)
|
animation, _ := d2asset.LoadAnimation(d2resource.LoadingScreen, d2resource.PaletteLoading)
|
||||||
loadingSprite, _ := d2render.LoadSprite(animation)
|
loadingSprite, _ := d2ui.LoadSprite(animation)
|
||||||
loadingSpriteSizeX, loadingSpriteSizeY := loadingSprite.GetCurrentFrameSize()
|
loadingSpriteSizeX, loadingSpriteSizeY := loadingSprite.GetCurrentFrameSize()
|
||||||
loadingSprite.SetPosition(int(400-(loadingSpriteSizeX/2)), int(300+(loadingSpriteSizeY/2)))
|
loadingSprite.SetPosition(int(400-(loadingSpriteSizeX/2)), int(300+(loadingSpriteSizeY/2)))
|
||||||
err = d2game.Initialize(loadingSprite)
|
err = d2game.Initialize(loadingSprite)
|
||||||
|
@ -259,8 +249,8 @@ func initializeEverything() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
animation, _ = d2assetmanager.LoadAnimation(d2resource.CursorDefault, d2resource.PaletteUnits)
|
animation, _ = d2asset.LoadAnimation(d2resource.CursorDefault, d2resource.PaletteUnits)
|
||||||
cursorSprite, _ := d2render.LoadSprite(animation)
|
cursorSprite, _ := d2ui.LoadSprite(animation)
|
||||||
d2ui.Initialize(cursorSprite)
|
d2ui.Initialize(cursorSprite)
|
||||||
|
|
||||||
d2term.BindAction("timescale", "set scalar for elapsed time", func(scale float64) {
|
d2term.BindAction("timescale", "set scalar for elapsed time", func(scale float64) {
|
||||||
|
|
Loading…
Reference in New Issue