forked from townforge/townforge
game: add daemon start/stop mining from the game
This commit is contained in:
parent
fec0907c58
commit
da975c6c35
@ -12,6 +12,7 @@ TBLayout: axis: y, distribution-position: "left top", distribution: "available"
|
||||
TBTextField: text: "Temperature:"
|
||||
TBTextField: id: "temperature"
|
||||
TBTextField: text: "⚬"
|
||||
|
||||
TBSection: value: 1, text: "Player"
|
||||
TBLayout: axis: y, spacing: 0, size: available
|
||||
TBToggleContainer: id: "player-wallet-loaded", toggle: expanded
|
||||
@ -33,6 +34,13 @@ TBLayout: axis: y, distribution-position: "left top", distribution: "available"
|
||||
TBButton: skin: "TBButton.column", text: "Accept invitation" id: "player-accept-invitation"
|
||||
TBButton: skin: "TBButton.column", text: "Load wallet" id: "player-load-wallet"
|
||||
|
||||
TBSection: value: 0, text: "Node"
|
||||
TBLayout: axis: y, spacing: 0, size: available
|
||||
TBToggleContainer: id: "start-mining-container", toggle: expanded
|
||||
TBButton: skin: "TBButton.column", id: "start-mining", text: "Start mining"
|
||||
TBToggleContainer: id: "stop-mining-container", toggle: expanded
|
||||
TBButton: skin: "TBButton.column", id: "stop-mining", text: "Stop mining"
|
||||
|
||||
TBSection: value: 0, text: "Commands"
|
||||
TBLayout: axis: y, spacing: 0, size: available
|
||||
TBButton: skin: "TBButton.column", text: "Buy land", id: "actions-buy-land"
|
||||
|
@ -370,6 +370,10 @@ public:
|
||||
bool is_syncing() const { return needs_sync; }
|
||||
uint32_t get_authorized_game_account() const { return authorized_game_account; }
|
||||
|
||||
bool start_mining();
|
||||
bool stop_mining();
|
||||
bool is_mining() const;
|
||||
|
||||
protected:
|
||||
virtual void on_new_block(uint64_t height, const cryptonote::block& block, const std::vector<cryptonote::transaction> &transactions) override;
|
||||
virtual void on_reorg(uint64_t height) override;
|
||||
@ -1380,6 +1384,21 @@ bool GameWalletInternal::get_attribute(const std::string &key, std::string &valu
|
||||
return w && w->get_attribute(key, value);
|
||||
}
|
||||
|
||||
bool GameWalletInternal::start_mining()
|
||||
{
|
||||
return w && w->start_mining();
|
||||
}
|
||||
|
||||
bool GameWalletInternal::stop_mining()
|
||||
{
|
||||
return w && w->stop_mining();
|
||||
}
|
||||
|
||||
bool GameWalletInternal::is_mining() const
|
||||
{
|
||||
return w && w->is_mining();
|
||||
}
|
||||
|
||||
void GameWalletInternal::on_reorg(uint64_t height)
|
||||
{
|
||||
MINFO("Reorg, clearing recent history");
|
||||
@ -1747,3 +1766,18 @@ bool GameWallet::generate_new_wallet(const char *wallet_file)
|
||||
{
|
||||
return internal->generate_new_wallet(wallet_file);
|
||||
}
|
||||
|
||||
bool GameWallet::start_mining()
|
||||
{
|
||||
return internal->start_mining();
|
||||
}
|
||||
|
||||
bool GameWallet::stop_mining()
|
||||
{
|
||||
return internal->stop_mining();
|
||||
}
|
||||
|
||||
bool GameWallet::is_mining() const
|
||||
{
|
||||
return internal->is_mining();
|
||||
}
|
||||
|
@ -94,6 +94,10 @@ public:
|
||||
bool generate_invitation(uint64_t amount, uint64_t expiration, std::string &invitation) const;
|
||||
bool generate_new_wallet(const char *wallet_file);
|
||||
|
||||
bool start_mining();
|
||||
bool stop_mining();
|
||||
bool is_mining() const;
|
||||
|
||||
private:
|
||||
void HandleLoadingWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleNewWallet(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
|
@ -242,6 +242,8 @@ public:
|
||||
void HandleGenerateInvitation(StringHash eventType, VariantMap& eventData);
|
||||
void HandleAcceptInvitation(StringHash eventType, VariantMap& eventData);
|
||||
void HandleRequestInvitationStatus(StringHash eventType, VariantMap& eventData);
|
||||
void HandleStartMining(StringHash eventType, VariantMap& eventData);
|
||||
void HandleStopMining(StringHash eventType, VariantMap& eventData);
|
||||
|
||||
void MoveCamera(float timeStep);
|
||||
void CloseBuildingTooltip();
|
||||
@ -817,6 +819,8 @@ 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_START_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStartMining));
|
||||
SubscribeToEvent(ui, E_CRYPTOCITY_STOP_MINING, URHO3D_HANDLER(CryptoCityUrho3D, HandleStopMining));
|
||||
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_PLAYER_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestPlayerData));
|
||||
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_ITEM_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestItemData));
|
||||
SubscribeToEvent(&gameState, E_CRYPTOCITY_REQUEST_BADGE_DATA, URHO3D_HANDLER(CryptoCityUrho3D, HandleRequestBadgeData));
|
||||
@ -2452,6 +2456,20 @@ void CryptoCityUrho3D::HandleAcceptInvitation(StringHash eventType, VariantMap&
|
||||
wallet->send_command(cmd);
|
||||
}
|
||||
|
||||
void CryptoCityUrho3D::HandleStartMining(StringHash eventType, VariantMap& eventData)
|
||||
{
|
||||
if (!wallet)
|
||||
return;
|
||||
wallet->start_mining();
|
||||
}
|
||||
|
||||
void CryptoCityUrho3D::HandleStopMining(StringHash eventType, VariantMap& eventData)
|
||||
{
|
||||
if (!wallet)
|
||||
return;
|
||||
wallet->stop_mining();
|
||||
}
|
||||
|
||||
void CryptoCityUrho3D::AddBlock(bool use_selection)
|
||||
{
|
||||
UnsetFocus();
|
||||
|
@ -166,6 +166,9 @@ UIUrho3D::UIUrho3D(Context *ctx, const GameState *gameState):
|
||||
citySpecialEventText = command_window->GetWidgetByIDAndType<TBTextField>("city-special-event");
|
||||
cityTreasuryText = command_window->GetWidgetByIDAndType<TBTextField>("city-treasury");
|
||||
|
||||
startMiningContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("start-mining-container");
|
||||
stopMiningContainer = command_window->GetWidgetByIDAndType<TBToggleContainer>("stop-mining-container");
|
||||
|
||||
CreateSpectatorModeWidget();
|
||||
CreateNodeNotificationWidget();
|
||||
CreateLoadingWalletNotificationWidget();
|
||||
@ -383,6 +386,13 @@ void UIUrho3D::Update(float timeStep, uint32_t mouse_x, uint32_t mouse_y, uint32
|
||||
UpdateQueuedCommandsNotification(w);
|
||||
UpdateCompass(timeStep, view_direction);
|
||||
|
||||
m_mining_checker.do_call([this, &w](){
|
||||
const bool is_mining = w->is_mining();
|
||||
startMiningContainer->SetValue(!is_mining);
|
||||
stopMiningContainer->SetValue(is_mining);
|
||||
return true;
|
||||
});
|
||||
|
||||
if (selectMaterial)
|
||||
selectMaterial->SetFocus(WIDGET_FOCUS_REASON_UNKNOWN);
|
||||
|
||||
@ -1046,6 +1056,18 @@ void UIUrho3D::HandleService(StringHash eventType, VariantMap& eventData)
|
||||
});
|
||||
}
|
||||
|
||||
void UIUrho3D::HandleStartMining(StringHash eventType, VariantMap& eventData)
|
||||
{
|
||||
VariantMap noEventData;
|
||||
SendEvent(E_CRYPTOCITY_START_MINING, noEventData);
|
||||
}
|
||||
|
||||
void UIUrho3D::HandleStopMining(StringHash eventType, VariantMap& eventData)
|
||||
{
|
||||
VariantMap noEventData;
|
||||
SendEvent(E_CRYPTOCITY_STOP_MINING, noEventData);
|
||||
}
|
||||
|
||||
void UIUrho3D::HandleAddBlock(StringHash eventType, VariantMap& eventData)
|
||||
{
|
||||
VariantMap noEventData;
|
||||
@ -1725,6 +1747,9 @@ void UIUrho3D::HandleTBMessage(StringHash eventType, VariantMap& eventData)
|
||||
|
||||
CONNECT("demolish-confirmation", HandleDemolishConfirmation);
|
||||
CONNECT("destroy-flag-confirmation", HandleDestroyFlagConfirmation);
|
||||
|
||||
CONNECT("start-mining", HandleStartMining);
|
||||
CONNECT("stop-mining", HandleStopMining);
|
||||
}
|
||||
else if (ev->type == EVENT_TYPE_CHANGED)
|
||||
{
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <tb/tb_window.h>
|
||||
#include <tb/tb_layout.h>
|
||||
#include <tb/tb_select_item.h>
|
||||
#include "math_helper.h"
|
||||
#include "controls.h"
|
||||
#include "shade-button.h"
|
||||
#include "shadable-window.h"
|
||||
@ -142,6 +143,8 @@ 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_START_MINING, StartMining) { }
|
||||
URHO3D_EVENT(E_CRYPTOCITY_STOP_MINING, StopMining) { }
|
||||
|
||||
class UIUrho3D: public Urho3D::UIElement
|
||||
{
|
||||
@ -243,6 +246,8 @@ private:
|
||||
void HandlePalette(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleFightFire(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleService(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleStartMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleStopMining(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
|
||||
void HandleDemolishConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
void HandleDestroyFlagConfirmation(Urho3D::StringHash eventType, Urho3D::VariantMap& eventData);
|
||||
@ -327,6 +332,9 @@ private:
|
||||
UITBWindow *shadingFix;
|
||||
uint32_t flag_owner;
|
||||
|
||||
tb::TBToggleContainer *startMiningContainer;
|
||||
tb::TBToggleContainer *stopMiningContainer;
|
||||
|
||||
// no ref, cleared when destroyed
|
||||
UIBuildingSettingsDialog *buildingSettingsDialog;
|
||||
UILastUpdateEventsDialog *lastUpdateEventsDialog;
|
||||
@ -366,6 +374,8 @@ private:
|
||||
float compass_rotation_speed;
|
||||
|
||||
UISelectMaterial *selectMaterial;
|
||||
|
||||
epee::math_helper::once_a_time_seconds<2> m_mining_checker;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -6122,6 +6122,37 @@ void wallet2::rescan_blockchain(bool hard, bool refresh, bool keep_key_images)
|
||||
finish_rescan_bc_keep_key_images(transfers_cnt, transfers_hash);
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool wallet2::start_mining()
|
||||
{
|
||||
COMMAND_RPC_START_MINING::request req = AUTO_VAL_INIT(req);
|
||||
req.miner_address = get_account().get_public_address_str(nettype());
|
||||
if (get_cc_pkey() != crypto::null_pkey)
|
||||
req.game_account_key = epee::string_tools::pod_to_hex(get_cc_pkey());
|
||||
req.threads_count = 0;
|
||||
req.do_background_mining = false;
|
||||
req.ignore_battery = false;
|
||||
|
||||
COMMAND_RPC_START_MINING::response res;
|
||||
bool r = invoke_http_json("/start_mining", req, res);
|
||||
return r && res.status == CORE_RPC_STATUS_OK;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool wallet2::stop_mining()
|
||||
{
|
||||
COMMAND_RPC_STOP_MINING::request req;
|
||||
COMMAND_RPC_STOP_MINING::response res;
|
||||
bool r = invoke_http_json("/stop_mining", req, res);
|
||||
return r && res.status == CORE_RPC_STATUS_OK;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool wallet2::is_mining()
|
||||
{
|
||||
COMMAND_RPC_MINING_STATUS::request req;
|
||||
COMMAND_RPC_MINING_STATUS::response res;
|
||||
bool r = invoke_http_json("/mining_status", req, res);
|
||||
return r && res.status == CORE_RPC_STATUS_OK && res.active;
|
||||
}
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
bool wallet2::is_transfer_unlocked(const transfer_details& td) const
|
||||
{
|
||||
return is_transfer_unlocked(td.m_tx.unlock_time, td.m_block_height);
|
||||
|
@ -1451,6 +1451,10 @@ private:
|
||||
uint64_t credits() const { return m_rpc_payment_state.credits; }
|
||||
void credit_report(uint64_t &expected_spent, uint64_t &discrepancy) const { expected_spent = m_rpc_payment_state.expected_spent; discrepancy = m_rpc_payment_state.discrepancy; }
|
||||
|
||||
bool start_mining();
|
||||
bool stop_mining();
|
||||
bool is_mining();
|
||||
|
||||
static const std::string &get_default_daemon_address() { return default_daemon_address; }
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user