game: add wallet creation capability

This commit is contained in:
Crypto City 2020-06-29 17:55:56 +00:00
parent f6af276e28
commit 16aa25cc1b
4 changed files with 47 additions and 0 deletions

View File

@ -32,6 +32,9 @@ TBLayout: axis: y, distribution-position: "left top", distribution: "available"
TBToggleContainer: id: "accept-invitation-container", toggle: "expanded"
TBLayout: axis: y, spacing: 0, size: available
TBButton: skin: "TBButton.column", text: "Accept invitation" id: "player-accept-invitation"
TBToggleContainer: id: "create-new-wallet-container", toggle: "expanded"
TBLayout: axis: y, spacing: 0, size: available
TBButton: skin: "TBButton.column", text: "Create new wallet" id: "player-create-new-wallet"
TBButton: skin: "TBButton.column", text: "Load wallet" id: "player-load-wallet"
TBSection: value: 0, text: "Node"

View File

@ -265,6 +265,7 @@ public:
void HandleGenerateInvitation(StringHash eventType, VariantMap& eventData);
void HandleAcceptInvitation(StringHash eventType, VariantMap& eventData);
void HandleRequestInvitationStatus(StringHash eventType, VariantMap& eventData);
void HandleCreateNewWallet(StringHash eventType, VariantMap& eventData);
void HandleStartMining(StringHash eventType, VariantMap& eventData);
void HandleStopMining(StringHash eventType, VariantMap& eventData);
@ -849,6 +850,7 @@ void CryptoCityUrho3D::SetupUI()
SubscribeToEvent(ui, E_CRYPTOCITY_GENERATE_INVITATION, URHO3D_HANDLER(CryptoCityUrho3D, HandleGenerateInvitation));
SubscribeToEvent(ui, E_CRYPTOCITY_ACCEPT_INVITATION, URHO3D_HANDLER(CryptoCityUrho3D, HandleAcceptInvitation));
SubscribeToEvent(ui, E_CRYPTOCITY_REQUEST_INVITATION_STATUS, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestInvitationStatus));
SubscribeToEvent(ui, E_CRYPTOCITY_CREATE_NEW_WALLET, URHO3D_HANDLER(CryptoCityUrho3D, HandleCreateNewWallet));
SubscribeToEvent(ui, E_CRYPTOCITY_START_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStartMining));
SubscribeToEvent(ui, E_CRYPTOCITY_STOP_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStopMining));
SubscribeToEvent(ui, E_CRYPTOCITY_MUSIC_TRACK, URHO3D_HANDLER(CryptoCityUrho3D, HandleMusicTrack));
@ -2527,6 +2529,36 @@ void CryptoCityUrho3D::HandleAcceptInvitation(StringHash eventType, VariantMap&
wallet->send_command(cmd);
}
void CryptoCityUrho3D::HandleCreateNewWallet(StringHash eventType, VariantMap& eventData)
{
const String filename = eventData[CreateNewWallet::P_FILENAME].GetString();
if (filename.Empty())
{
auto *fileSelector = new UIFileSelector(context_);
fileSelector->SetTitle("Select filename to save new wallet");
fileSelector->SetButtonTexts("Create", "Cancel");
fileSelector->SetFilters(Vector<String>(1, "*.keys"), 0);
SubscribeToEvent(fileSelector, E_FILESELECTED, [this](StringHash eventType, VariantMap& eventData) {
const bool ok = eventData[FileSelected::P_OK].GetBool();
if (ok)
{
VariantMap newEventData;
newEventData[CreateNewWallet::P_FILENAME] = eventData[FileSelected::P_FILENAME].GetString();
HandleCreateNewWallet(E_CRYPTOCITY_CREATE_NEW_WALLET, newEventData);
new MessageBox(context_, "Creating new wallet\nYou can then fund it and create a game account");
}
});
return;
}
if (!wallet->generate_new_wallet(filename.CString()))
{
new MessageBox(context_, "Failed to create new wallet");
return;
}
}
void CryptoCityUrho3D::HandleStartMining(StringHash eventType, VariantMap& eventData)
{
if (!wallet)

View File

@ -173,6 +173,7 @@ UIUrho3D::UIUrho3D(Context *ctx, const GameState *gameState):
playerMaterialList->SetSource(&playerMaterialListSource);
playerWalletLoaded = command_window->GetWidgetByIDAndType<TBToggleContainer>("player-wallet-loaded");
playerAcceptInvitationContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("accept-invitation-container");
playerCreateNewWalletContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("create-new-wallet-container");
cityNameText = command_window->GetWidgetByIDAndType<TBTextField>("city-name");
cityLevelText = command_window->GetWidgetByIDAndType<TBTextField>("city-level");
@ -925,6 +926,7 @@ void UIUrho3D::UpdatePlayer()
playerWalletLoaded->SetValue(gameState->playerState.has_wallet);
playerAcceptInvitationContainer->SetValue(!gameState->playerState.has_wallet || gameState->playerState.id == 0);
playerCreateNewWalletContainer->SetValue(!gameState->playerState.has_wallet);
}
void UIUrho3D::HandleLoadWallet(StringHash eventType, VariantMap& eventData)
@ -956,6 +958,12 @@ void UIUrho3D::HandleAcceptInvitation(StringHash eventType, VariantMap& eventDat
});
}
void UIUrho3D::HandleCreateNewWallet(StringHash eventType, VariantMap& eventData)
{
VariantMap noEventData;
SendEvent(E_CRYPTOCITY_CREATE_NEW_WALLET, noEventData);
}
void UIUrho3D::HandleDeposit(StringHash eventType, VariantMap& eventData)
{
VariantMap newEventData;
@ -1831,6 +1839,7 @@ void UIUrho3D::HandleTBMessage(StringHash eventType, VariantMap& eventData)
CONNECT("player-withdraw", HandleWithdrawInfo);
CONNECT("player-load-wallet", HandleLoadWallet);
CONNECT("player-accept-invitation", HandleAcceptInvitation);
CONNECT("player-create-new-wallet", HandleCreateNewWallet);
CONNECT("city-level-help", HandleCityLevelHelp);
CONNECT("city-level-up", HandleCityLevelUp);

View File

@ -144,6 +144,7 @@ URHO3D_EVENT(E_CRYPTOCITY_SERVICE_PRICE, ServicePrice) { URHO3D_PARAM(P_FLAG, Fl
URHO3D_EVENT(E_CRYPTOCITY_GENERATE_INVITATION, GenerateInvitation) { URHO3D_PARAM(P_AMOUNT, Amount); URHO3D_PARAM(P_EXPIRATION, Expiration); URHO3D_PARAM(P_INVITATION, Invitation); }
URHO3D_EVENT(E_CRYPTOCITY_ACCEPT_INVITATION, AcceptInvitation) { URHO3D_PARAM(P_INVITATION, Invitation); URHO3D_PARAM(P_FILENAME, Filename); URHO3D_PARAM(P_NAME, Name); }
URHO3D_EVENT(E_CRYPTOCITY_REQUEST_INVITATION_STATUS, RequestInvitationStatus) { URHO3D_PARAM(P_PUBLIC_KEY, PublicKey); URHO3D_PARAM(P_USED, Used); URHO3D_PARAM(P_BALANCE_OK, BalanceOK); }
URHO3D_EVENT(E_CRYPTOCITY_CREATE_NEW_WALLET, CreateNewWallet) { URHO3D_PARAM(P_FILENAME, Filename); }
URHO3D_EVENT(E_CRYPTOCITY_START_MINING, StartMining) { }
URHO3D_EVENT(E_CRYPTOCITY_STOP_MINING, StopMining) { }
URHO3D_EVENT(E_CRYPTOCITY_MUSIC_TRACK, MusicTrack) { URHO3D_PARAM(P_TRACK, Track); }
@ -195,6 +196,7 @@ private:
void HandleLoadWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleAcceptInvitation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleCreateNewWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDepositInfo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleWithdrawInfo(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
void HandleDeposit(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
@ -317,6 +319,7 @@ private:
tb::TBSelectList *playerMaterialList;
tb::TBGenericStringItemSource playerMaterialListSource;
tb::TBToggleContainer *playerAcceptInvitationContainer;
tb::TBToggleContainer *playerCreateNewWalletContainer;
tb::TBButton *loadWalletButton;
tb::TBButton *depositButton;
tb::TBButton *withdrawButton;