|
|
|
@ -1,6 +1,13 @@
|
|
|
|
|
#include "adventure_control.h"
|
|
|
|
|
#include "DataDefs.h"
|
|
|
|
|
|
|
|
|
|
#include "df/adventure_movement_attack_creaturest.h"
|
|
|
|
|
#include "df/adventure_movement_building_interactst.h"
|
|
|
|
|
#include "df/adventure_movement_climbst.h"
|
|
|
|
|
#include "df/adventure_movement_hold_itemst.h"
|
|
|
|
|
#include "df/adventure_movement_hold_tilest.h"
|
|
|
|
|
#include "df/adventure_movement_optionst.h"
|
|
|
|
|
#include "df/ui_advmode.h"
|
|
|
|
|
#include "df/viewscreen.h"
|
|
|
|
|
|
|
|
|
|
#include "modules/Gui.h"
|
|
|
|
@ -23,11 +30,20 @@ void KeyUpdate()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetCoord(df::coord in, RemoteFortressReader::Coord *out)
|
|
|
|
|
{
|
|
|
|
|
out->set_x(in.x);
|
|
|
|
|
out->set_y(in.y);
|
|
|
|
|
out->set_z(in.z);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
command_result MoveCommand(DFHack::color_ostream &stream, const MoveCommandParams *in)
|
|
|
|
|
{
|
|
|
|
|
auto viewScreen = getCurViewscreen();
|
|
|
|
|
if (!in->has_direction())
|
|
|
|
|
return CR_WRONG_USAGE;
|
|
|
|
|
if (!df::global::ui_advmode->menu == ui_advmode_menu::Default)
|
|
|
|
|
return CR_OK;
|
|
|
|
|
auto dir = in->direction();
|
|
|
|
|
switch (dir.x())
|
|
|
|
|
{
|
|
|
|
@ -176,6 +192,8 @@ command_result JumpCommand(DFHack::color_ostream &stream, const MoveCommandParam
|
|
|
|
|
{
|
|
|
|
|
if (!in->has_direction())
|
|
|
|
|
return CR_WRONG_USAGE;
|
|
|
|
|
if (!df::global::ui_advmode->menu == ui_advmode_menu::Default)
|
|
|
|
|
return CR_OK;
|
|
|
|
|
auto dir = in->direction();
|
|
|
|
|
keyQueue.push(interface_key::A_JUMP);
|
|
|
|
|
int x = dir.x();
|
|
|
|
@ -211,3 +229,36 @@ command_result JumpCommand(DFHack::color_ostream &stream, const MoveCommandParam
|
|
|
|
|
keyQueue.push(interface_key::SELECT);
|
|
|
|
|
return CR_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
command_result MenuQuery(DFHack::color_ostream &stream, const EmptyMessage *in, MenuContents *out)
|
|
|
|
|
{
|
|
|
|
|
auto advUi = df::global::ui_advmode;
|
|
|
|
|
|
|
|
|
|
if (advUi == NULL)
|
|
|
|
|
return CR_FAILURE;
|
|
|
|
|
|
|
|
|
|
out->set_current_menu((AdvmodeMenu)advUi->menu);
|
|
|
|
|
|
|
|
|
|
switch (advUi->menu)
|
|
|
|
|
{
|
|
|
|
|
case ui_advmode_menu::MoveCarefully:
|
|
|
|
|
for (size_t i = 0; i < advUi->movements.size(); i++)
|
|
|
|
|
{
|
|
|
|
|
auto movement = advUi->movements[i];
|
|
|
|
|
auto send_movement = out->add_movements();
|
|
|
|
|
SetCoord(movement->source, send_movement->mutable_source());
|
|
|
|
|
SetCoord(movement->dest, send_movement->mutable_dest());
|
|
|
|
|
|
|
|
|
|
STRICT_VIRTUAL_CAST_VAR(climbMovement, df::adventure_movement_climbst, movement);
|
|
|
|
|
if (climbMovement)
|
|
|
|
|
SetCoord(climbMovement->grab, send_movement->mutable_grab());
|
|
|
|
|
STRICT_VIRTUAL_CAST_VAR(holdTileMovement, df::adventure_movement_hold_tilest, movement);
|
|
|
|
|
if (holdTileMovement)
|
|
|
|
|
SetCoord(holdTileMovement->grab, send_movement->mutable_grab());
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return CR_OK;
|
|
|
|
|
}
|
|
|
|
|