From 37dbc13fc11ffae921d08198224cb2e106bbb499 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Tue, 13 Sep 2022 20:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=88=98=E6=96=97=E8=A7=92?= =?UTF-8?q?=E8=89=B2=20=E6=8E=92=E5=BA=8F=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/battle/fight/utils.go | 64 +++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/modules/battle/fight/utils.go b/modules/battle/fight/utils.go index 2ba2cbc64..8a7f2fc12 100644 --- a/modules/battle/fight/utils.go +++ b/modules/battle/fight/utils.go @@ -2,6 +2,7 @@ package fight import ( "go_dreamfactory/modules/battle/fight/core" + "math/rand" "sort" ) @@ -16,3 +17,66 @@ func (x FightRoleSlice) Swap(i, j int) { x[i], x[j] = x[j], x[i] } func (x FightRoleSlice) Sort(pType string) { sort.Sort(x) } + +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) + highPart = FightRoleSort(highPart, pType) + + lowPart = append(lowPart, middlePart...) + lowPart = append(lowPart, highPart...) + return lowPart + +}