Re #924: handle dashboard commands and pit request in human robots

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6251 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 0f04c7b527725de524e213c776b164ebec385fef
Former-commit-id: 4f827ea329e05e9a939916331d903650cdf6e4c8
This commit is contained in:
kakukri 2015-11-22 19:14:23 +00:00
parent d3e788d1ca
commit cae541787b

View file

@ -116,6 +116,7 @@ typedef struct HumanContext
tControlCmd *cmdControl;
bool mouseControlUsed;
int lightCmd;
int dashboardCounter;
// simuV4 ...
bool useESP;
@ -222,7 +223,11 @@ static const tControlCmd CmdControlRef[] = {
{HM_ATT_HBOX_X, GFCTRL_TYPE_NOT_AFFECTED, -1, NULL, 0.0, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_HBOX_Y, GFCTRL_TYPE_NOT_AFFECTED, -1, NULL, 0.0, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_LEFTGLANCE, GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_L_GLANCE_MIN, 0.0, 0.0, HM_ATT_L_GLANCE_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_RIGHTGLANCE,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_R_GLANCE_MIN, 0.0, 0.0, HM_ATT_R_GLANCE_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0}
{HM_ATT_RIGHTGLANCE,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_R_GLANCE_MIN, 0.0, 0.0, HM_ATT_R_GLANCE_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_DASHB_NEXT ,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_DASHB_NEXT_MIN, 0.0, 0.0, HM_ATT_DASHB_NEXT_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_DASHB_PREV ,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_DASHB_PREV_MIN, 0.0, 0.0, HM_ATT_DASHB_PREV_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_DASHB_INC ,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_DASHB_INC_MIN, 0.0, 0.0, HM_ATT_DASHB_INC_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0},
{HM_ATT_DASHB_DEC ,GFCTRL_TYPE_NOT_AFFECTED, -1, HM_ATT_DASHB_DEC_MIN, 0.0, 0.0, HM_ATT_DASHB_DEC_MAX, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0, NULL, 0.0}
};
static const int NbCmdControl = sizeof(CmdControlRef) / sizeof(CmdControlRef[0]);
@ -1208,6 +1213,86 @@ static void common_drive(const int index, tCarElt* car, tSituation *s)
}
// dashboard handling
if ((cmd[CMD_DASHB_NEXT].type == GFCTRL_TYPE_JOY_BUT && joyInfo->edgeup[cmd[CMD_DASHB_NEXT].val])
|| (cmd[CMD_DASHB_NEXT].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->edgedn[cmd[CMD_DASHB_NEXT].val])
|| (cmd[CMD_DASHB_NEXT].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_NEXT].val)].edgeDn)
|| (cmd[CMD_DASHB_NEXT].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_NEXT].deadZone != 0))
{
car->_dashboardActiveItem++;
if (car->_dashboardActiveItem >= car->_dashboardInstantNb + car->_dashboardRequestNb)
{car->_dashboardActiveItem = 0;}
}
if ((cmd[CMD_DASHB_PREV].type == GFCTRL_TYPE_JOY_BUT && joyInfo->edgeup[cmd[CMD_DASHB_PREV].val])
|| (cmd[CMD_DASHB_PREV].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->edgedn[cmd[CMD_DASHB_PREV].val])
|| (cmd[CMD_DASHB_PREV].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_PREV].val)].edgeDn)
|| (cmd[CMD_DASHB_PREV].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_PREV].deadZone != 0))
{
car->_dashboardActiveItem--;
if (car->_dashboardActiveItem < 0)
{car->_dashboardActiveItem = car->_dashboardInstantNb + car->_dashboardRequestNb - 1;}
}
tDashboardItem *item;
if (car->_dashboardActiveItem < car->_dashboardInstantNb) {
item = &(car->_dashboardInstant[car->_dashboardActiveItem]);
} else {
item = &(car->_dashboardRequest[car->_dashboardActiveItem - car->_dashboardInstantNb]);
}
if ((cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_JOY_BUT && joyInfo->edgeup[cmd[CMD_DASHB_INC].val])
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->edgedn[cmd[CMD_DASHB_INC].val])
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_INC].val)].edgeDn)
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_INC].deadZone != 0))
{
HCtx[idx]->dashboardCounter = (int)(1.0/RCM_MAX_DT_ROBOTS);
item->setup->desired_value += item->setup->stepsize;
if (item->setup->desired_value > item->setup->max) {item->setup->desired_value = item->setup->max;}
item->setup->changed = TRUE;
car->ctrl.setupChangeCmd = item;
}
if ((cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_JOY_BUT && joyInfo->levelup[cmd[CMD_DASHB_INC].val])
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->button[cmd[CMD_DASHB_INC].val])
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_INC].val)].state)
|| (cmd[CMD_DASHB_INC].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_INC].deadZone != 0))
{
if (HCtx[idx]->dashboardCounter > 0) {
HCtx[idx]->dashboardCounter--;
} else {
item->setup->desired_value += item->setup->stepsize;
if (item->setup->desired_value > item->setup->max) {item->setup->desired_value = item->setup->max;}
item->setup->changed = TRUE;
car->ctrl.setupChangeCmd = item;
}
}
if ((cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_JOY_BUT && joyInfo->edgeup[cmd[CMD_DASHB_DEC].val])
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->edgedn[cmd[CMD_DASHB_DEC].val])
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_DEC].val)].edgeDn)
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_DEC].deadZone != 0))
{
HCtx[idx]->dashboardCounter = (int)(1.0/RCM_MAX_DT_ROBOTS);
item->setup->desired_value -= item->setup->stepsize;
if (item->setup->desired_value < item->setup->min) {item->setup->desired_value = item->setup->min;}
item->setup->changed = TRUE;
car->ctrl.setupChangeCmd = item;
}
if ((cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_JOY_BUT && joyInfo->levelup[cmd[CMD_DASHB_DEC].val])
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_MOUSE_BUT && mouseInfo->button[cmd[CMD_DASHB_DEC].val])
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_KEYBOARD && keyInfo[lookUpKeyMap(cmd[CMD_DASHB_DEC].val)].state)
|| (cmd[CMD_DASHB_DEC].type == GFCTRL_TYPE_JOY_ATOB && cmd[CMD_DASHB_DEC].deadZone != 0))
{
if (HCtx[idx]->dashboardCounter > 0) {
HCtx[idx]->dashboardCounter--;
} else {
item->setup->desired_value -= item->setup->stepsize;
if (item->setup->desired_value < item->setup->min) {item->setup->desired_value = item->setup->min;}
item->setup->changed = TRUE;
car->ctrl.setupChangeCmd = item;
}
}
switch (cmd[CMD_BRAKE].type) {
case GFCTRL_TYPE_JOY_AXIS:
brake = joyInfo->ax[cmd[CMD_BRAKE].val];
@ -1924,26 +2009,34 @@ int HumanDriver::pit_cmd(int index, tCarElt* car, tSituation *s)
const int idx = index - 1;
HCtx[idx]->nbPitStops++; //Yet another pitstop
tdble curr_fuel = car->_tank - car->_fuel; //Can receive max. this fuel
//tdble curr_fuel = car->_tank - car->_fuel; //Can receive max. this fuel
tdble planned_stops = 1.0
+ MAX(HCtx[idx]->nbPitStopProg - HCtx[idx]->nbPitStops, 0); //Planned pitstops still ahead
/*tdble planned_stops = 1.0
+ MAX(HCtx[idx]->nbPitStopProg - HCtx[idx]->nbPitStops, 0);*/ //Planned pitstops still ahead
//Need this amount of extra fuel to finish the race
tdble fuel =
/*tdble fuel =
( MaxFuelPerMeter
* (curTrack->length * car->_remainingLaps + car->_trkPos.seg->lgfromstart)
+ 2.7f / 60.0f * MAX(s->_totTime, 0) )
/ planned_stops
- car->_fuel;
- car->_fuel;*/
//No need to check for limits as curr_fuel cannot be bigger
//than the tank capacity
car->_pitFuel = MAX(MIN(curr_fuel, fuel), 0);
//car->_pitFuel = MAX(MIN(curr_fuel, fuel), 0);
car->_pitFuel = car->setup.fuel.desired_value - car->_fuel;
HCtx[idx]->lastPitStopLap = car->_laps;
car->_pitRepair = (int)car->_dammage;
//car->_pitRepair = (int)car->_dammage;
car->_pitRepair = car->setup.reqRepair.desired_value;
if (car->setup.reqPenalty.desired_value > 0.9) {
car->_pitStopType = RM_PIT_STOPANDGO;
} else {
car->_pitStopType = RM_PIT_REPAIR;
}
if (HCtx[idx]) {
const tControlCmd *cmd = HCtx[idx]->cmdControl;
@ -1958,7 +2051,7 @@ int HumanDriver::pit_cmd(int index, tCarElt* car, tSituation *s)
}//for i
}//if HCtx
return ROB_PIT_MENU; /* The player is able to modify the value by menu */
return ROB_PIT_IM; /* With dashboard no need for menu */
}