github.com/loomnetwork/gamechain@v0.0.0-20200406110549-36c47eb97a92/cli/cmd/get_initial_game_state.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/loomnetwork/gamechain/tools/battleground_utility"
     6  	"github.com/loomnetwork/gamechain/types/zb/zb_calls"
     7  	"strings"
     8  
     9  	"github.com/loomnetwork/go-loom"
    10  	"github.com/loomnetwork/go-loom/auth"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  var getInitialGameStateCmdArgs struct {
    15  	MatchID int64
    16  }
    17  
    18  var getInitialGameStateCmd = &cobra.Command{
    19  	Use:   "get_initial_game_state",
    20  	Short: "get initial gamestate",
    21  	RunE: func(cmd *cobra.Command, args []string) error {
    22  		signer := auth.NewEd25519Signer(commonTxObjs.privateKey)
    23  		callerAddr := loom.Address{
    24  			ChainID: commonTxObjs.rpcClient.GetChainID(),
    25  			Local:   loom.LocalAddressFromPublicKey(signer.PublicKey()),
    26  		}
    27  		var req = zb_calls.GetInitialGameStateRequest{
    28  			MatchId: getInitialGameStateCmdArgs.MatchID,
    29  		}
    30  		var resp zb_calls.GetInitialGameStateResponse
    31  		_, err := commonTxObjs.contract.StaticCall("GetInitialGameState", &req, callerAddr, &resp)
    32  		if err != nil {
    33  			return err
    34  		}
    35  
    36  		state := resp.GameState
    37  
    38  		switch strings.ToLower(rootCmdArgs.outputFormat) {
    39  		case "json":
    40  			err := battleground_utility.PrintProtoMessageAsJsonToStdout(state)
    41  			if err != nil {
    42  				return err
    43  			}
    44  		default:
    45  			fmt.Printf("============StateInfo=============\n")
    46  			fmt.Printf("Is ended: %v, Winner: %s\n", state.IsEnded, state.Winner)
    47  			fmt.Printf("Current Player Index: %v\n", state.CurrentPlayerIndex)
    48  
    49  			for i, player := range state.PlayerStates {
    50  				if state.CurrentPlayerIndex == int32(i) {
    51  					fmt.Printf("Player%d: %s 🧟\n", i+1, player.Id)
    52  				} else {
    53  					fmt.Printf("Player%d: %s\n", i+1, player.Id)
    54  				}
    55  				fmt.Printf("\tdefense: %v\n", player.Defense)
    56  				fmt.Printf("\tcurrent goo: %v\n", player.CurrentGoo)
    57  				fmt.Printf("\tgoo vials: %v\n", player.GooVials)
    58  				fmt.Printf("\thas drawn card: %v\n", player.HasDrawnCard)
    59  				fmt.Printf("\tcard in hand (%d): %v\n", len(player.CardsInHand), player.CardsInHand)
    60  				fmt.Printf("\tcard in play (%d): %v\n", len(player.CardsInPlay), player.CardsInPlay)
    61  				fmt.Printf("\tcard in deck (%d): %v\n", len(player.CardsInDeck), player.CardsInDeck)
    62  				fmt.Printf("\tcard in graveyard (%d): %v\n", len(player.CardsInGraveyard), player.CardsInGraveyard)
    63  				fmt.Printf("\n") // extra line
    64  			}
    65  
    66  			fmt.Printf("Actions: count %v\n", len(state.PlayerActions))
    67  			for i, action := range state.PlayerActions {
    68  				if int64(i) == state.CurrentActionIndex {
    69  					fmt.Printf("   -->> [%d] %v\n", i, action)
    70  				} else {
    71  					fmt.Printf("\t[%d] %v\n", i, action)
    72  				}
    73  			}
    74  			fmt.Printf("Current Action Index: %v\n", state.CurrentActionIndex)
    75  			fmt.Printf("==================================\n")
    76  		}
    77  
    78  		return nil
    79  	},
    80  }
    81  
    82  func init() {
    83  	rootCmd.AddCommand(getInitialGameStateCmd)
    84  
    85  	getInitialGameStateCmd.Flags().Int64VarP(&getInitialGameStateCmdArgs.MatchID, "matchId", "m", 0, "Match ID")
    86  }