/*************************************************************************** file : tutorial5pace.cpp created : September 2026 copyright : (C) 2026 by Bernhard Wymann email : berniw@bluewin.ch ***************************************************************************/ /* This program is free software; you can redistribute it and/or modify it * under the GNU General Public License, version 2 or (at your option) any * later version. Distributed WITHOUT ANY WARRANTY, including MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See . */ #include #include #include "traffic5.h" // A separate, single-entry reference driver. It follows the Chapter 4 centerline. static constexpr double PACE_SPEED = 18.0; // m/s; keep fixed for the first experiments static tTrack* currentTrack = nullptr; static SpeedDriver driver; static void initTrack(int, tTrack* track, void*, void** settings, tSituation*) { currentTrack = track; *settings = nullptr; } static void newRace(int, tCarElt* car, tSituation*) { driver.configure(currentTrack, car); } static void drive(int, tCarElt* car, tSituation* situation) { driver.drive(car, situation); applySpeedTarget(driver, car, PACE_SPEED, 1.0); } static void shutdown(int) { currentTrack = nullptr; } static int initInterface(int index, void* pointer) { auto* itf = static_cast(pointer); *itf = tRobotItf{}; itf->rbNewTrack = initTrack; itf->rbNewRace = newRace; itf->rbDrive = drive; itf->rbShutdown = shutdown; itf->index = index; return 0; } extern "C" int tutorial5pace(tModInfo* modInfo) { for (int i = 0; i < 10; ++i) { modInfo[i] = tModInfo{}; } modInfo[0].name = strdup("Tutorial Pace"); modInfo[0].desc = strdup("Chapter 5 reference opponent"); modInfo[0].fctInit = initInterface; modInfo[0].gfId = ROB_IDENT; modInfo[0].index = 1; return 0; }