bool CharacterObject::enterVehicle(VehicleObject* vehicle, size_t seat) { if(vehicle) { // Check that the seat is free if(vehicle->getOccupant(seat)) { return false; } else { // Make sure we leave any vehicle we're inside enterVehicle(nullptr, 0); vehicle->setOccupant(seat, this); setCurrentVehicle(vehicle, seat); //enterAction(VehicleSit); return true; } } else { if(currentVehicle) { currentVehicle->setOccupant(seat, nullptr); // Disabled due to crashing. //setPosition(currentVehicle->getPosition()); setCurrentVehicle(nullptr, 0); return true; } } return false; }
void game_create_character_as_passenger(const ScriptArguments& args) { auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0)); auto type = args[1].integerValue(); RW_UNUSED(type); RW_UNIMPLEMENTED("game_create_character_as_passenger(): character type"); auto id = args[2].integerValue(); auto seat = args[3].integerValue(); auto character = args.getWorld()->createPedestrian(id, vehicle->getPosition() + spawnMagic); new DefaultAIController(character); if (seat <= -1) { for (seat = 0; seat < static_cast<int>(vehicle->info->seats.size()); seat++) { if (vehicle->getOccupant(seat) == nullptr && !vehicle->isOccupantDriver(seat)) { break; } } } else { /// @todo 0 - passenger seat (or back seat of bike); 1 - left rear seat; 2 - right rear seat seat++; } RW_CHECK(seat < static_cast<int>(vehicle->info->seats.size()), "Seat index too high"); RW_CHECK(vehicle->getOccupant(seat) == nullptr, "Seat is not free"); RW_CHECK(vehicle->isOccupantDriver(seat) == false, "Seat is not a passenger seat"); character->setCurrentVehicle(vehicle, seat); vehicle->setOccupant(seat, character); *args[4].globalInteger = character->getGameObjectID(); }
void game_create_character_in_vehicle(const ScriptArguments& args) { auto vehicle = static_cast<VehicleObject*>(args.getObject<VehicleObject>(0)); auto type = args[1].integer; RW_UNUSED(type); RW_UNIMPLEMENTED("game_create_character_in_vehicle(): character type"); auto id = args[2].integer; auto character = args.getWorld()->createPedestrian(id, vehicle->getPosition() + spawnMagic); new DefaultAIController(character); character->setCurrentVehicle(vehicle, 0); vehicle->setOccupant(0, character); *args[3].globalInteger = character->getGameObjectID(); }