From dd0c1487848f08caee2d7f43a34a74afbe3e9d92 Mon Sep 17 00:00:00 2001 From: gravestench Date: Mon, 26 Oct 2020 10:53:42 +0000 Subject: [PATCH] fixed all `gocognit` lint errors (#848) * reduced ItemFactory.NewItem complexity * d2compression/wav.go: suppressing gocognit lint error, suppressing gocyclo lint error * d2maprenderer/renderer.go: reducing complexity of rnderPass2 and renderPass3 --- d2common/d2data/d2compression/wav.go | 2 +- d2core/d2item/diablo2item/item_factory.go | 63 ++++++--------- d2core/d2map/d2maprenderer/renderer.go | 94 +++++++++++++---------- 3 files changed, 78 insertions(+), 81 deletions(-) diff --git a/d2common/d2data/d2compression/wav.go b/d2common/d2data/d2compression/wav.go index 85818289..fa02f7e4 100644 --- a/d2common/d2data/d2compression/wav.go +++ b/d2common/d2data/d2compression/wav.go @@ -6,7 +6,7 @@ import ( // WavDecompress decompresses wav files //nolint:gomnd // binary decode magic -func WavDecompress(data []byte, channelCount int) []byte { //nolint:funlen // can't reduce +func WavDecompress(data []byte, channelCount int) []byte { //nolint:funlen,gocognit,gocyclo // can't reduce Array1 := []int{0x2c, 0x2c} Array2 := make([]int, channelCount) diff --git a/d2core/d2item/diablo2item/item_factory.go b/d2core/d2item/diablo2item/item_factory.go index d4001365..95a2988e 100644 --- a/d2core/d2item/diablo2item/item_factory.go +++ b/d2core/d2item/diablo2item/item_factory.go @@ -82,11 +82,9 @@ func (f *ItemFactory) SetSeed(seed int64) { // NewItem creates a new item instance from the given codes func (f *ItemFactory) NewItem(codes ...string) (*Item, error) { - var item *Item - var common, set, unique string - var prefixes, suffixes []string + prefixes, suffixes := make([]string, 0), make([]string, 0) for _, code := range codes { if found := f.asset.Records.Item.All[code]; found != nil { @@ -105,57 +103,44 @@ func (f *ItemFactory) NewItem(codes ...string) (*Item, error) { } if found := f.asset.Records.Item.Magic.Prefix[code]; found != nil { - if prefixes == nil { - prefixes = make([]string, 0) - } - prefixes = append(prefixes, code) - continue } if found := f.asset.Records.Item.Magic.Suffix[code]; found != nil { - if suffixes == nil { - suffixes = make([]string, 0) - } - suffixes = append(suffixes, code) - continue } } - if common != "" { // we will at least have a regular item - item = &Item{CommonCode: common} + if common == "" { + return nil, errors.New("cannot create item") + } - if set != "" { // it's a set item - item.SetItemCode = set - return item.init(), nil - } - - if unique != "" { // it's a unique item - item.UniqueCode = unique - return item.init(), nil - } - - if prefixes != nil { - if len(prefixes) > 0 { // it's a magic or rare item - item.PrefixCodes = prefixes - } - } - - if suffixes != nil { - if len(suffixes) > 0 { // it's a magic or rare item - item.SuffixCodes = suffixes - } - } - - item.factory = f + item := &Item{ + factory: f, + CommonCode: common, + } + if set != "" { // it's a set item + item.SetItemCode = set return item.init(), nil } - return nil, errors.New("cannot create item") + if unique != "" { // it's a unique item + item.UniqueCode = unique + return item.init(), nil + } + + if len(prefixes) > 0 { + item.PrefixCodes = prefixes + } + + if len(suffixes) > 0 { + item.SuffixCodes = suffixes + } + + return item.init(), nil } // NewProperty creates a property diff --git a/d2core/d2map/d2maprenderer/renderer.go b/d2core/d2map/d2maprenderer/renderer.go index 285550b7..fae603ff 100644 --- a/d2core/d2map/d2maprenderer/renderer.go +++ b/d2core/d2map/d2maprenderer/renderer.go @@ -206,25 +206,7 @@ func (mr *MapRenderer) renderPass2(target d2interface.Surface, startX, startY, e for tileX := startX; tileX < endX; tileX++ { mr.viewport.PushTranslationWorld(float64(tileX), float64(tileY)) - tileEnt := make([]d2interface.MapEntity, 0) - - // need to add render culling - // https://github.com/OpenDiablo2/OpenDiablo2/issues/821 - for _, mapEntity := range mr.mapEngine.Entities() { - pos := mapEntity.GetPosition() - vec := pos.World() - entityX, entityY := vec.X(), vec.Y() - - if mapEntity.GetLayer() != 1 { - continue - } - - if (int(entityX) != tileX) || (int(entityY) != tileY) { - continue - } - - tileEnt = append(tileEnt, mapEntity) - } + tileEnt := mr.getEntitiesBelowWalls(tileX, tileY) for subY := 0; subY < 5; subY++ { for subX := 0; subX < 5; subX++ { @@ -246,6 +228,30 @@ func (mr *MapRenderer) renderPass2(target d2interface.Surface, startX, startY, e } } +func (mr *MapRenderer) getEntitiesBelowWalls(tileX, tileY int) []d2interface.MapEntity { + entities := make([]d2interface.MapEntity, 0) + + // need to add render culling + // https://github.com/OpenDiablo2/OpenDiablo2/issues/821 + for _, mapEntity := range mr.mapEngine.Entities() { + pos := mapEntity.GetPosition() + vec := pos.World() + entityX, entityY := vec.X(), vec.Y() + + if mapEntity.GetLayer() != 1 { + continue + } + + if (int(entityX) != tileX) || (int(entityY) != tileY) { + continue + } + + entities = append(entities, mapEntity) + } + + return entities +} + // Upper wall tiles and entities above walls. func (mr *MapRenderer) renderPass3(target d2interface.Surface, startX, startY, endX, endY int) { for tileY := startY; tileY < endY; tileY++ { @@ -254,36 +260,18 @@ func (mr *MapRenderer) renderPass3(target d2interface.Surface, startX, startY, e mr.viewport.PushTranslationWorld(float64(tileX), float64(tileY)) mr.renderTilePass2(tile, target) - tileEnt := make([]d2interface.MapEntity, 0) - - // need to add render culling - // https://github.com/OpenDiablo2/OpenDiablo2/issues/821 - for _, mapEntity := range mr.mapEngine.Entities() { - pos := mapEntity.GetPosition() - vec := pos.World() - entityX, entityY := vec.X(), vec.Y() - - if mapEntity.GetLayer() == 1 { - continue - } - - if (int(entityX) != tileX) || (int(entityY) != tileY) { - continue - } - - tileEnt = append(tileEnt, mapEntity) - } + entities := mr.getEntitiesAboveWalls(tileX, tileY) for subY := 0; subY < 5; subY++ { for subX := 0; subX < 5; subX++ { - for _, mapEntity := range tileEnt { - pos := mapEntity.GetPosition() + for _, entity := range entities { + pos := entity.GetPosition() if (int(pos.SubTileOffset().X()) != subX) || (int(pos.SubTileOffset().Y()) != subY) { continue } target.PushTranslation(mr.viewport.GetTranslationScreen()) - mapEntity.Render(target) + entity.Render(target) target.Pop() } } @@ -294,6 +282,30 @@ func (mr *MapRenderer) renderPass3(target d2interface.Surface, startX, startY, e } } +func (mr *MapRenderer) getEntitiesAboveWalls(tileX, tileY int) []d2interface.MapEntity { + entities := make([]d2interface.MapEntity, 0) + + // need to add render culling + // https://github.com/OpenDiablo2/OpenDiablo2/issues/821 + for _, mapEntity := range mr.mapEngine.Entities() { + pos := mapEntity.GetPosition() + vec := pos.World() + entityX, entityY := vec.X(), vec.Y() + + if mapEntity.GetLayer() != 1 { + continue + } + + if (int(entityX) != tileX) || (int(entityY) != tileY) { + continue + } + + entities = append(entities, mapEntity) + } + + return entities +} + // Roof tiles. func (mr *MapRenderer) renderPass4(target d2interface.Surface, startX, startY, endX, endY int) { for tileY := startY; tileY < endY; tileY++ {