Files
bl/logic/service/fight/unified_test.go

114 lines
4.3 KiB
Go
Raw Normal View History

package fight
import (
"testing"
"blazing/common/socket/errorcode"
"blazing/logic/service/common"
fightinfo "blazing/logic/service/fight/info"
"blazing/logic/service/fight/input"
spaceinfo "blazing/logic/service/space/info"
"blazing/modules/player/model"
)
type stubPlayer struct {
info model.PlayerInfo
}
func (*stubPlayer) ApplyPetDisplayInfo(*spaceinfo.SimpleInfo) {}
func (*stubPlayer) GetPlayerCaptureContext() *fightinfo.PlayerCaptureContext { return nil }
func (*stubPlayer) Roll(int, int) (bool, float64, float64) { return false, 0, 0 }
func (*stubPlayer) Getfightinfo() fightinfo.Fightinfo { return fightinfo.Fightinfo{} }
func (*stubPlayer) ItemAdd(int64, int64) bool { return false }
func (p *stubPlayer) GetInfo() *model.PlayerInfo { return &p.info }
func (*stubPlayer) InvitePlayer(common.PlayerI) {}
func (*stubPlayer) SetFightC(common.FightI) {}
func (*stubPlayer) QuitFight() {}
func (*stubPlayer) MessWin(bool) {}
func (*stubPlayer) CanFight() errorcode.ErrorCode { return 0 }
func (*stubPlayer) SendPackCmd(uint32, any) {}
func (*stubPlayer) GetPetInfo(uint32) []model.PetInfo { return nil }
func TestFightActionEnvelopeEncodedTargetIndex(t *testing.T) {
self := NewSkillActionEnvelope(1, 2, 0, SkillTargetSelf, 0)
if got := self.EncodedTargetIndex(); got != EncodeTargetIndex(2, false) {
t.Fatalf("expected self target to encode actor slot, got %d", got)
}
ally := NewSkillActionEnvelope(1, 0, 1, SkillTargetAlly, 0)
if got := ally.EncodedTargetIndex(); got != EncodeTargetIndex(1, false) {
t.Fatalf("expected ally target to keep friendly slot, got %d", got)
}
fallbackSelf := NewSkillActionEnvelope(1, 3, 0, 9, 3)
if got := fallbackSelf.EncodedTargetIndex(); got != EncodeTargetIndex(3, false) {
t.Fatalf("expected atkType=3 to fall back to self target, got %d", got)
}
opponent := NewSkillActionEnvelope(1, 0, 2, SkillTargetOpponent, 0)
if got := opponent.EncodedTargetIndex(); got != EncodeTargetIndex(2, true) {
t.Fatalf("expected opponent target to stay on opposite side, got %d", got)
}
}
func TestBuildFightStateStartEnvelope(t *testing.T) {
ourPlayer := &stubPlayer{info: model.PlayerInfo{UserID: 1001}}
oppPlayer := &stubPlayer{info: model.PlayerInfo{UserID: 2002}}
our := input.NewInput(nil, ourPlayer)
our.InitAttackValue()
our.AttackValue.Prop[0] = 2
our.AttackValue.Status[1] = 1
ourPet := fightinfo.CreateBattlePetEntity(model.PetInfo{
ID: 11,
Name: "Alpha",
Level: 20,
Hp: 88,
MaxHp: 100,
CatchTime: 101,
SkillList: []model.SkillInfo{{ID: 300, PP: 10}},
})
ourPet.BindController(ourPlayer.info.UserID)
our.SetCurPetAt(0, ourPet)
opp := input.NewInput(nil, oppPlayer)
opp.InitAttackValue()
oppPet := fightinfo.CreateBattlePetEntity(model.PetInfo{
ID: 22,
Name: "Beta",
Level: 21,
Hp: 77,
MaxHp: 110,
CatchTime: 202,
SkillList: []model.SkillInfo{{ID: 400, PP: 5}},
})
oppPet.BindController(oppPlayer.info.UserID)
opp.SetCurPetAt(0, oppPet)
fc := &FightC{
Our: []*input.Input{our},
Opp: []*input.Input{opp},
}
fc.Round = 7
envelope := fc.BuildFightStateStartEnvelope()
if envelope.Phase != fightinfo.FightStatePhaseStart {
t.Fatalf("expected start phase, got %s", envelope.Phase)
}
if envelope.Meta.Round != 7 {
t.Fatalf("expected round 7, got %d", envelope.Meta.Round)
}
if len(envelope.Left) != 1 || len(envelope.Right) != 1 {
t.Fatalf("expected one fighter on each side, got left=%d right=%d", len(envelope.Left), len(envelope.Right))
}
if envelope.Left[0].UserID != 1001 || envelope.Left[0].PetID != 11 {
t.Fatalf("unexpected left fighter snapshot: %+v", envelope.Left[0])
}
if envelope.Left[0].Prop[0] != 2 || envelope.Left[0].Status[1] != 1 {
t.Fatalf("expected prop/status snapshot to be copied, got %+v %+v", envelope.Left[0].Prop, envelope.Left[0].Status)
}
if envelope.Right[0].UserID != 2002 || envelope.Right[0].CatchTime != 202 {
t.Fatalf("unexpected right fighter snapshot: %+v", envelope.Right[0])
}
}