Мелкие исправления эмулятора роботов, теперь после опускания барабана в 22 зоне автоматически выставляется флаг is_empty у барабана

This commit is contained in:
VladislavOstapov 2023-01-07 12:04:50 +03:00
parent d5c7c0e645
commit ec7f508931

View File

@ -36,6 +36,10 @@ static void emulate_robot(robot_code &code, robot_regs& r, char robot_id) {
return; return;
} }
if (code.barrel_id >= BARRELS_COUNT) {
code.barrel_id = -1;
}
// приватизируем бочку // приватизируем бочку
if (code.barrel_id >= 0) { if (code.barrel_id >= 0) {
barrels[code.barrel_id].flags.robot = robot_id; barrels[code.barrel_id].flags.robot = robot_id;
@ -46,7 +50,7 @@ static void emulate_robot(robot_code &code, robot_regs& r, char robot_id) {
switch (code.code[code.PC] & (short)ROBOT_CMD_MASK) { switch (code.code[code.PC] & (short)ROBOT_CMD_MASK) {
case ROBOT_CMD_MOVE_TO_ZONE_code: case ROBOT_CMD_MOVE_TO_ZONE_code:
// двигаемся в сторону цели // двигаемся в сторону цели
if (robot_move(r, (short)(cmd_arg & (~ROBOT_WITH_BARREL)), robot_id)) { if (robot_move(r, (short)(cmd_arg & 0x7F), robot_id)) {
code.PC++; code.PC++;
} }
if (cmd_arg & ROBOT_WITH_BARREL && code.barrel_id >= 0) { if (cmd_arg & ROBOT_WITH_BARREL && code.barrel_id >= 0) {
@ -81,7 +85,7 @@ static void emulate_robot(robot_code &code, robot_regs& r, char robot_id) {
break; break;
} }
barrels[code.barrel_id].flags.is_up = true; barrels[code.barrel_id].flags.is_up = true;
r.mz.is_up = 1; r.mz.is_up = true;
} }
code.PC++; code.PC++;
break; break;
@ -91,6 +95,10 @@ static void emulate_robot(robot_code &code, robot_regs& r, char robot_id) {
if (code.barrel_id >= 0 && cmd_arg) { if (code.barrel_id >= 0 && cmd_arg) {
barrels[code.barrel_id].flags.is_up = false; barrels[code.barrel_id].flags.is_up = false;
r.mz.is_up = 0; r.mz.is_up = 0;
if (r.dx.current_zone == ZONE_UNLOAD) {
barrels[code.barrel_id].flags.is_empty = true;
}
} }
code.PC++; code.PC++;
break; break;
@ -167,6 +175,11 @@ static void emulate_robot(robot_code &code, robot_regs& r, char robot_id) {
void robot_main() { void robot_main() {
if (hla_robot1_en) {
emulate_robot(robot1_code, robot1, 1); emulate_robot(robot1_code, robot1, 1);
}
if (hla_robot2_en) {
emulate_robot(robot2_code, robot2, 2); emulate_robot(robot2_code, robot2, 2);
} }
}