90 lines
2.3 KiB
Go
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
|
|
}
|