71 lines
1.8 KiB
Go
71 lines
1.8 KiB
Go
package fight
|
|
|
|
import (
|
|
"go_dreamfactory/modules/battle/fight/core"
|
|
"math/rand"
|
|
)
|
|
|
|
//战斗角色排序
|
|
func FightRoleSort(arr []core.IFightRole, pType string, pOrder core.EOrderType) []core.IFightRole {
|
|
if len(arr) <= 1 {
|
|
return arr
|
|
}
|
|
pivot := arr[rand.Intn(len(arr))]
|
|
lowPart := make([]core.IFightRole, 0, len(arr))
|
|
highPart := make([]core.IFightRole, 0, len(arr))
|
|
middlePart := make([]core.IFightRole, 0, len(arr))
|
|
for _, v := range arr {
|
|
switch pType {
|
|
case "OperateValue":
|
|
switch {
|
|
case v.GetData().Operate.Value() < pivot.GetData().Operate.Value():
|
|
if pOrder == core.EOrderType_Asc {
|
|
lowPart = append(lowPart, v)
|
|
} else {
|
|
highPart = append(highPart, v)
|
|
}
|
|
break
|
|
case v.GetData().Operate.Value() == pivot.GetData().Operate.Value():
|
|
middlePart = append(middlePart, v)
|
|
break
|
|
case v.GetData().Operate.Value() > pivot.GetData().Operate.Value():
|
|
if pOrder == core.EOrderType_Asc {
|
|
highPart = append(highPart, v)
|
|
} else {
|
|
lowPart = append(lowPart, v)
|
|
}
|
|
break
|
|
}
|
|
break
|
|
case "Speed":
|
|
switch {
|
|
case v.GetData().Speed.Value() < pivot.GetData().Speed.Value():
|
|
if pOrder == core.EOrderType_Asc {
|
|
lowPart = append(lowPart, v)
|
|
} else {
|
|
highPart = append(highPart, v)
|
|
}
|
|
break
|
|
case v.GetData().Speed.Value() == pivot.GetData().Speed.Value():
|
|
middlePart = append(middlePart, v)
|
|
break
|
|
case v.GetData().Speed.Value() > pivot.GetData().Speed.Value():
|
|
if pOrder == core.EOrderType_Asc {
|
|
highPart = append(highPart, v)
|
|
} else {
|
|
lowPart = append(lowPart, v)
|
|
}
|
|
break
|
|
}
|
|
break
|
|
}
|
|
}
|
|
lowPart = FightRoleSort(lowPart, pType, pOrder)
|
|
highPart = FightRoleSort(highPart, pType, pOrder)
|
|
|
|
lowPart = append(lowPart, middlePart...)
|
|
lowPart = append(lowPart, highPart...)
|
|
return lowPart
|
|
|
|
}
|