1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-20 14:15:23 +00:00

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
This commit is contained in:
gravestench 2020-10-26 10:53:42 +00:00 committed by GitHub
parent aa9f6be411
commit dd0c148784
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 81 deletions

View File

@ -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)

View File

@ -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

View File

@ -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++ {