2017-12-24 06:03:25 -07:00
# include "adventure_control.h"
# include "DataDefs.h"
2017-12-25 11:38:05 -07:00
# 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"
2017-12-24 06:03:25 -07:00
# include "df/viewscreen.h"
# include "modules/Gui.h"
2017-12-25 09:30:45 -07:00
# include <queue>
2017-12-24 06:03:25 -07:00
using namespace AdventureControl ;
using namespace df : : enums ;
using namespace DFHack ;
using namespace Gui ;
2017-12-25 09:30:45 -07:00
std : : queue < interface_key : : interface_key > keyQueue ;
void KeyUpdate ( )
{
2017-12-25 11:38:05 -07:00
if ( ! keyQueue . empty ( ) )
{
getCurViewscreen ( ) - > feed_key ( keyQueue . front ( ) ) ;
keyQueue . pop ( ) ;
}
}
void SetCoord ( df : : coord in , RemoteFortressReader : : Coord * out )
{
out - > set_x ( in . x ) ;
out - > set_y ( in . y ) ;
out - > set_z ( in . z ) ;
2017-12-25 09:30:45 -07:00
}
2017-12-24 06:03:25 -07:00
command_result MoveCommand ( DFHack : : color_ostream & stream , const MoveCommandParams * in )
{
2022-12-26 17:57:19 -07:00
//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())
//{
//case -1:
// switch (dir.y())
// {
// case -1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_NW_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_NW);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_NW_UP);
// break;
// }
// break;
// case 0:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_W_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_W);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_W_UP);
// break;
// }
// break;
// case 1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_SW_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_SW);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_SW_UP);
// break;
// }
// break;
// }
// break;
//case 0:
// switch (dir.y())
// {
// case -1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_N_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_N);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_N_UP);
// break;
// }
// break;
// case 0:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_DOWN);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_UP);
// break;
// }
// break;
// case 1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_S_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_S);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_S_UP);
// break;
// }
// break;
// }
// break;
//case 1:
// switch (dir.y())
// {
// case -1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_NE_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_NE);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_NE_UP);
// break;
// }
// break;
// case 0:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_E_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_E);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_E_UP);
// break;
// }
// break;
// case 1:
// switch (dir.z())
// {
// case -1:
// viewScreen->feed_key(interface_key::A_MOVE_SE_DOWN);
// break;
// case 0:
// viewScreen->feed_key(interface_key::A_MOVE_SE);
// break;
// case 1:
// viewScreen->feed_key(interface_key::A_MOVE_SE_UP);
// break;
// }
// break;
// }
// break;
//}
2017-12-25 11:38:05 -07:00
return CR_OK ;
2017-12-25 09:30:45 -07:00
}
2017-12-26 00:04:46 -07:00
2017-12-25 09:30:45 -07:00
command_result JumpCommand ( DFHack : : color_ostream & stream , const MoveCommandParams * in )
{
2022-12-26 17:57:19 -07:00
//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();
//int y = dir.y();
//if (x > 0)
//{
// for (int i = 0; i < x; i++)
// {
// keyQueue.push(interface_key::CURSOR_RIGHT);
// }
//}
//if (x < 0)
//{
// for (int i = 0; i > x; i--)
// {
// keyQueue.push(interface_key::CURSOR_LEFT);
// }
//}
//if (y > 0)
//{
// for (int i = 0; i < y; i++)
// {
// keyQueue.push(interface_key::CURSOR_DOWN);
// }
//}
//if (y < 0)
//{
// for (int i = 0; i > y; i--)
// {
// keyQueue.push(interface_key::CURSOR_UP);
// }
//}
//keyQueue.push(interface_key::SELECT);
2017-12-25 11:38:05 -07:00
return CR_OK ;
}
command_result MenuQuery ( DFHack : : color_ostream & stream , const EmptyMessage * in , MenuContents * out )
{
2022-12-26 17:57:19 -07:00
//auto advUi = df::global::ui_advmode;
2017-12-25 11:38:05 -07:00
2022-12-26 17:57:19 -07:00
//if (advUi == NULL)
// return CR_FAILURE;
2017-12-25 11:38:05 -07:00
2022-12-26 17:57:19 -07:00
//out->set_current_menu((AdvmodeMenu)advUi->menu);
2017-12-25 11:38:05 -07:00
2022-12-26 17:57:19 -07:00
////Fixme: Needs a proper way to control it, but for now, this is the only way to allow Armok Vision to keep going without the user needing to switch to DF.
//if (advUi->menu == ui_advmode_menu::FallAction)
//{
// getCurViewscreen()->feed_key(interface_key::OPTION1);
//}
2017-12-26 09:51:36 -07:00
2022-12-26 17:57:19 -07:00
//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());
2017-12-25 11:38:05 -07:00
2022-12-26 17:57:19 -07:00
// STRICT_VIRTUAL_CAST_VAR(climbMovement, df::adventure_movement_climbst, movement);
// if (climbMovement)
// {
// SetCoord(climbMovement->grab, send_movement->mutable_grab());
// send_movement->set_movement_type(CarefulMovementType::CLIMB);
// }
// STRICT_VIRTUAL_CAST_VAR(holdTileMovement, df::adventure_movement_hold_tilest, movement);
// if (holdTileMovement)
// {
// SetCoord(holdTileMovement->grab, send_movement->mutable_grab());
// send_movement->set_movement_type(CarefulMovementType::HOLD_TILE);
// }
// }
//default:
// break;
//}
2017-12-25 11:38:05 -07:00
return CR_OK ;
}
2017-12-26 00:04:46 -07:00
command_result MovementSelectCommand ( DFHack : : color_ostream & stream , const dfproto : : IntMessage * in )
{
2022-12-26 17:57:19 -07:00
//if (!(df::global::ui_advmode->menu == ui_advmode_menu::MoveCarefully))
// return CR_OK;
//int choice = in->value();
//int page = choice / 5;
//int select = choice % 5;
//for (int i = 0; i < page; i++)
//{
// keyQueue.push(interface_key::SECONDSCROLL_PAGEDOWN);
//}
//keyQueue.push((interface_key::interface_key)(interface_key::OPTION1 + select));
2018-01-11 23:20:40 -07:00
return CR_OK ;
2017-12-26 00:04:46 -07:00
}
2017-12-26 09:51:36 -07:00
command_result MiscMoveCommand ( DFHack : : color_ostream & stream , const MiscMoveParams * in )
{
2022-12-26 17:57:19 -07:00
//if (!df::global::ui_advmode->menu == ui_advmode_menu::Default)
// return CR_OK;
2017-12-26 09:51:36 -07:00
2022-12-26 17:57:19 -07:00
//auto type = in->type();
2017-12-26 09:51:36 -07:00
2022-12-26 17:57:19 -07:00
//switch (type)
//{
//case AdventureControl::SET_CLIMB:
// getCurViewscreen()->feed_key(interface_key::A_HOLD);
// break;
//case AdventureControl::SET_STAND:
// getCurViewscreen()->feed_key(interface_key::A_STANCE);
// break;
//case AdventureControl::SET_CANCEL:
// getCurViewscreen()->feed_key(interface_key::LEAVESCREEN);
// break;
//default:
// break;
//}
2017-12-26 09:51:36 -07:00
return CR_OK ;
}