From: <wjp...@us...> - 2013-04-11 21:50:36
|
Revision: 7376 http://exult.svn.sourceforge.net/exult/?rev=7376&view=rev Author: wjpalenstijn Date: 2013-04-11 21:50:29 +0000 (Thu, 11 Apr 2013) Log Message: ----------- Add utility function to find effective schedule at a time Modified Paths: -------------- exult/trunk/actors.cc exult/trunk/actors.h Modified: exult/trunk/actors.cc =================================================================== --- exult/trunk/actors.cc 2013-04-11 21:50:06 UTC (rev 7375) +++ exult/trunk/actors.cc 2013-04-11 21:50:29 UTC (rev 7376) @@ -4844,6 +4844,24 @@ return -1; } +int Npc_actor::find_schedule_at_time( + int hour3 // 0=midnight, 1=3am, etc. +) { + if (party_id >= 0 || is_dead() || num_schedules == 0) + return -1; // Fail if a party member or dead. + int closest_dist = 100; + int closest_index = 0; + for (int i = 0; i < num_schedules; i++) { + int dist = (hour3 - schedules[i].get_time() + 8) % 8; + if (dist < closest_dist) { + closest_dist = dist; + closest_index = i; + } + } + assert(closest_dist != 100); + return closest_index; +} + /* * Update schedule at a 3-hour time change. */ @@ -4856,9 +4874,7 @@ int i = find_schedule_change(hour3); if (i < 0) { // Not found? Look at prev. - int backwards = 8; - while (backwards-- && i < 0) - i = find_schedule_change((--hour3 + 8) % 8); + i = find_schedule_at_time(hour3); if (i < 0) return; if ((schedule_type == schedules[i].get_type() || Modified: exult/trunk/actors.h =================================================================== --- exult/trunk/actors.h 2013-04-11 21:50:06 UTC (rev 7375) +++ exult/trunk/actors.h 2013-04-11 21:50:29 UTC (rev 7376) @@ -740,6 +740,7 @@ unsigned char num_schedules; // # entries below. Schedule_change *schedules; // List of schedule changes. int find_schedule_change(int hour3); + int find_schedule_at_time(int hour3); public: Npc_actor(const std::string &nm, int shapenum, int num = -1, int uc = -1); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |