diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-04 12:30:51 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-04 12:30:51 +0200 |
commit | d041392641d91e6ce9c69415e14f3c0261621791 (patch) | |
tree | e258abcf13c35be6f0ce52180a85223d27a65ce4 /content.go | |
parent | b73d56f6fa0d0ff0f2d06a381e77180546b7df70 (diff) |
Fix content loading concurrency (#42)
Diffstat (limited to 'content.go')
-rw-r--r-- | content.go | 182 |
1 files changed, 74 insertions, 108 deletions
@@ -285,7 +285,6 @@ type param0SrvMap map[mt.Content]struct { func muxItemDefs(conns []*contentConn) ([]mt.ItemDef, []struct{ Alias, Orig string }) { var itemDefs []mt.ItemDef var aliases []struct{ Alias, Orig string } - var wg sync.WaitGroup itemDefs = append(itemDefs, mt.ItemDef{ Type: mt.ToolItem, @@ -299,46 +298,40 @@ func muxItemDefs(conns []*contentConn) ([]mt.ItemDef, []struct{ Alias, Orig stri }) for _, cc := range conns { - wg.Add(1) - go func() { - <-cc.done() - for _, def := range cc.itemDefs { - if def.Name == "" { - def.Name = "hand" - } + <-cc.done() - prepend(cc.name, &def.Name) - prependTexture(cc.name, &def.InvImg) - prependTexture(cc.name, &def.WieldImg) - prepend(cc.name, &def.PlacePredict) - prepend(cc.name, &def.PlaceSnd.Name) - prepend(cc.name, &def.PlaceFailSnd.Name) - prependTexture(cc.name, &def.Palette) - prependTexture(cc.name, &def.InvOverlay) - prependTexture(cc.name, &def.WieldOverlay) - itemDefs = append(itemDefs, def) + for _, def := range cc.itemDefs { + if def.Name == "" { + def.Name = "hand" } - for _, alias := range cc.aliases { - prepend(cc.name, &alias.Alias) - prepend(cc.name, &alias.Orig) + prepend(cc.name, &def.Name) + prependTexture(cc.name, &def.InvImg) + prependTexture(cc.name, &def.WieldImg) + prepend(cc.name, &def.PlacePredict) + prepend(cc.name, &def.PlaceSnd.Name) + prepend(cc.name, &def.PlaceFailSnd.Name) + prependTexture(cc.name, &def.Palette) + prependTexture(cc.name, &def.InvOverlay) + prependTexture(cc.name, &def.WieldOverlay) + itemDefs = append(itemDefs, def) + } - aliases = append(aliases, struct{ Alias, Orig string }{ - Alias: alias.Alias, - Orig: alias.Orig, - }) - } + for _, alias := range cc.aliases { + prepend(cc.name, &alias.Alias) + prepend(cc.name, &alias.Orig) - wg.Done() - }() + aliases = append(aliases, struct{ Alias, Orig string }{ + Alias: alias.Alias, + Orig: alias.Orig, + }) + } } - wg.Wait() return itemDefs, aliases } func muxNodeDefs(conns []*contentConn) (nodeDefs []mt.NodeDef, p0Map param0Map, p0SrvMap param0SrvMap) { - var wg sync.WaitGroup var param0 mt.Content p0Map = make(param0Map) @@ -364,81 +357,70 @@ func muxNodeDefs(conns []*contentConn) (nodeDefs []mt.NodeDef, p0Map param0Map, } for _, cc := range conns { - wg.Add(1) - go func() { - <-cc.done() - for _, def := range cc.nodeDefs { - if p0Map[cc.name] == nil { - p0Map[cc.name] = map[mt.Content]mt.Content{ - mt.Unknown: mt.Unknown, - mt.Air: mt.Air, - mt.Ignore: mt.Ignore, - } - } - - p0Map[cc.name][def.Param0] = param0 - p0SrvMap[param0] = struct { - name string - param0 mt.Content - }{ - name: cc.name, - param0: def.Param0, + <-cc.done() + + for _, def := range cc.nodeDefs { + if p0Map[cc.name] == nil { + p0Map[cc.name] = map[mt.Content]mt.Content{ + mt.Unknown: mt.Unknown, + mt.Air: mt.Air, + mt.Ignore: mt.Ignore, } + } - def.Param0 = param0 - prepend(cc.name, &def.Name) - prepend(cc.name, &def.Mesh) - for i := range def.Tiles { - prependTexture(cc.name, &def.Tiles[i].Texture) - } - for i := range def.OverlayTiles { - prependTexture(cc.name, &def.OverlayTiles[i].Texture) - } - for i := range def.SpecialTiles { - prependTexture(cc.name, &def.SpecialTiles[i].Texture) - } - prependTexture(cc.name, &def.Palette) - for k, v := range def.ConnectTo { - def.ConnectTo[k] = p0Map[cc.name][v] - } - prepend(cc.name, &def.FootstepSnd.Name) - prepend(cc.name, &def.DiggingSnd.Name) - prepend(cc.name, &def.DugSnd.Name) - prepend(cc.name, &def.DigPredict) - nodeDefs = append(nodeDefs, def) - - param0++ - if param0 >= mt.Unknown && param0 <= mt.Ignore { - param0 = mt.Ignore + 1 - } + p0Map[cc.name][def.Param0] = param0 + p0SrvMap[param0] = struct { + name string + param0 mt.Content + }{ + name: cc.name, + param0: def.Param0, } - wg.Done() - }() + def.Param0 = param0 + prepend(cc.name, &def.Name) + prepend(cc.name, &def.Mesh) + for i := range def.Tiles { + prependTexture(cc.name, &def.Tiles[i].Texture) + } + for i := range def.OverlayTiles { + prependTexture(cc.name, &def.OverlayTiles[i].Texture) + } + for i := range def.SpecialTiles { + prependTexture(cc.name, &def.SpecialTiles[i].Texture) + } + prependTexture(cc.name, &def.Palette) + for k, v := range def.ConnectTo { + def.ConnectTo[k] = p0Map[cc.name][v] + } + prepend(cc.name, &def.FootstepSnd.Name) + prepend(cc.name, &def.DiggingSnd.Name) + prepend(cc.name, &def.DugSnd.Name) + prepend(cc.name, &def.DigPredict) + nodeDefs = append(nodeDefs, def) + + param0++ + if param0 >= mt.Unknown && param0 <= mt.Ignore { + param0 = mt.Ignore + 1 + } + } } - wg.Wait() return } func muxMedia(conns []*contentConn) []mediaFile { var media []mediaFile - var wg sync.WaitGroup for _, cc := range conns { - wg.Add(1) - go func() { - <-cc.done() - for _, f := range cc.media { - prepend(cc.name, &f.name) - media = append(media, f) - } + <-cc.done() - wg.Done() - }() + for _, f := range cc.media { + prepend(cc.name, &f.name) + media = append(media, f) + } } - wg.Wait() return media } @@ -467,25 +449,9 @@ func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias conns = append(conns, cc) } - var wg sync.WaitGroup - wg.Add(3) - - go func() { - defer wg.Done() - itemDefs, aliases = muxItemDefs(conns) - }() - - go func() { - defer wg.Done() - nodeDefs, p0Map, p0SrvMap = muxNodeDefs(conns) - }() - - go func() { - defer wg.Done() - media = muxMedia(conns) - }() - - wg.Wait() + itemDefs, aliases = muxItemDefs(conns) + nodeDefs, p0Map, p0SrvMap = muxNodeDefs(conns) + media = muxMedia(conns) return } |