Files
Embalming_Girl_Server/game/snapshot.go
T
2026-06-20 18:18:50 +08:00

90 lines
2.3 KiB
Go

package game
func (e *Engine) Snapshot(forPlayerID string) map[string]interface{} {
cp := e.CurrentPlayer()
currentTurnID := ""
if cp != nil {
currentTurnID = cp.ID
}
snap := map[string]interface{}{
"phase": e.Phase,
"turn_phase": e.TurnPhase,
"current_turn": currentTurnID,
"your_player_id": forPlayerID,
"harmony_target": e.HarmonyTarget,
"round_num": e.RoundNum,
"turn_id": e.TurnID,
}
var players []map[string]interface{}
for _, p := range e.Players {
pi := map[string]interface{}{
"player_id": p.ID,
"nickname": p.Nickname,
"is_bot": p.IsBot,
"is_exited": p.IsExited,
"hand_card_count": len(p.Hand),
"challenge_zone_count": len(p.ChallengeZone),
}
var skill []map[string]interface{}
for _, c := range p.SkillZone {
skill = append(skill, map[string]interface{}{
"uid": c.UID, "type_id": c.TypeID, "name": c.Name, "mp": c.MP,
})
}
pi["skill_zone"] = skill
players = append(players, pi)
}
snap["players"] = players
me := e.GetPlayer(forPlayerID)
var hand []map[string]interface{}
if me != nil {
for _, c := range me.Hand {
hand = append(hand, map[string]interface{}{
"uid": c.UID, "type_id": c.TypeID, "name": c.Name, "mp": c.MP,
})
}
}
snap["hand_cards"] = hand
var myChallenge []map[string]interface{}
if me != nil {
for _, c := range me.ChallengeZone {
myChallenge = append(myChallenge, map[string]interface{}{
"uid": c.UID, "placed_by": c.PlacedByNick,
})
}
}
snap["my_challenge_zone"] = myChallenge
var harmony []map[string]interface{}
for i, c := range e.HarmonyZone {
harmony = append(harmony, map[string]interface{}{
"uid": c.UID, "face_up": false, "order": i + 1,
})
}
snap["harmony_zone"] = harmony
if e.Effect != nil && e.Effect.Active {
ef := e.Effect
effectInfo := map[string]interface{}{
"active": true,
"card_type": ef.CardTypeID,
"caster_id": ef.CasterID,
}
if e.EffectNeedsResponseFrom(forPlayerID) {
effectInfo["needs_response"] = true
effectInfo["choice_type"] = ef.ChoiceType
effectInfo["choice_data"] = ef.ChoiceData
} else {
effectInfo["needs_response"] = false
effectInfo["waiting_message"] = "等待效果结算中..."
}
snap["effect"] = effectInfo
}
return snap
}