Changeset - r18272:acd8b4f10c7a
[Not reviewed]
master
0 10 0
rubidium - 13 years ago 2011-11-04 23:20:14
rubidium@openttd.org
(svn r23118) -Feature: [NoAI] Allow AIs to query the amount of remaining operations for the current tick
10 files changed with 46 insertions and 0 deletions:
0 comments (0 inline, 0 general)
bin/ai/regression/regression.nut
Show inline comments
 
@@ -10,9 +10,11 @@ function Regression::TestInit()
 
{
 
	print("");
 
	print("--TestInit--");
 
	print(" Ops:      " + this.GetOpsTillSuspend());
 
	print(" TickTest: " + this.GetTick());
 
	this.Sleep(1);
 
	print(" TickTest: " + this.GetTick());
 
	print(" Ops:      " + this.GetOpsTillSuspend());
 
	print(" SetCommandDelay: " + AIController.SetCommandDelay(1));
 
	print(" IsValid(vehicle.plane_speed): " + AIGameSettings.IsValid("vehicle.plane_speed"));
 
	print(" vehicle.plane_speed: " + AIGameSettings.GetValue("vehicle.plane_speed"));
 
@@ -166,6 +168,8 @@ function Regression::TestInit()
 
	foreach (idx, val in list) {
 
		print("   " + idx);
 
	}
 

	
 
	print(" Ops:      " + this.GetOpsTillSuspend());
 
}
 

	
 
function Regression::Std()
bin/ai/regression/regression.txt
Show inline comments
 

	
 
--TestInit--
 
 Ops:      9988
 
 TickTest: 1
 
 TickTest: 2
 
 Ops:      9990
 
 SetCommandDelay: (null : 0x00000000)
 
 IsValid(vehicle.plane_speed): true
 
 vehicle.plane_speed: 2
 
@@ -79,6 +81,7 @@
 
   20
 
   30
 
   40
 
 Ops:      8673
 

	
 
--Std--
 
 abs(-21): 21
src/ai/ai_instance.cpp
Show inline comments
 
@@ -789,3 +789,8 @@ bool AIInstance::CallLoad()
 
	sq_pop(vm, 4);
 
	return true;
 
}
 

	
 
SQInteger AIInstance::GetOpsTillSuspend()
 
{
 
	return this->engine->GetOpsTillSuspend();
 
}
src/ai/ai_instance.hpp
Show inline comments
 
@@ -172,6 +172,13 @@ public:
 
	 * call from within a function called by the AI.
 
	 */
 
	void Suspend();
 

	
 
	/**
 
	 * Get the number of operations the AI can execute before being suspended.
 
	 * This function is safe to call from within a function called by the AI.
 
	 * @return The number of operations to execute.
 
	 */
 
	SQInteger GetOpsTillSuspend();
 
private:
 
	class AIController *controller;  ///< The AI main class.
 
	class AIStorage *storage;        ///< Some global information for each running AI.
src/ai/api/ai_changelog.hpp
Show inline comments
 
@@ -26,6 +26,7 @@
 
 * \li AICompany::GetQuarterlyCargoDelivered
 
 * \li AICompany::GetQuarterlyPerformanceRating
 
 * \li AICompany::GetQuarterlyCompanyValue
 
 * \li AIController::GetOpsTillSuspend
 
 * \li AITown::GetTownAuthority
 
 * \li AIVehicle::ERR_VEHICLE_TOO_LONG in case vehicle length limit is reached
 
 *
src/ai/api/ai_controller.cpp
Show inline comments
 
@@ -66,6 +66,11 @@ AIController::~AIController()
 
	return ::Company::Get(_current_company)->ai_instance->GetController()->ticks;
 
}
 

	
 
/* static */ int AIController::GetOpsTillSuspend()
 
{
 
	return ::Company::Get(_current_company)->ai_instance->GetOpsTillSuspend();
 
}
 

	
 
/* static */ int AIController::GetSetting(const char *name)
 
{
 
	return AIConfig::GetConfig(_current_company)->GetSetting(name);
src/ai/api/ai_controller.hpp
Show inline comments
 
@@ -52,6 +52,16 @@ public:
 
	static uint GetTick();
 

	
 
	/**
 
	 * Get the number of operations the AI may still execute this tick.
 
	 * @return The amount of operations left to execute.
 
	 * @note This number can go negative when certain uninteruptable
 
	 *   operations are executed. The amount of operations that you go
 
	 *   over the limit will be deducted from the next tick you would
 
	 *   be allowed to run.
 
	 */
 
	static int GetOpsTillSuspend();
 

	
 
	/**
 
	 * Get the value of one of your settings you set via info.nut.
 
	 * @param name The name of the setting.
 
	 * @return the value for the setting, or -1 if the setting is not known.
src/ai/api/ai_controller.hpp.sq
Show inline comments
 
@@ -14,6 +14,7 @@ void SQAIController_Register(Squirrel *e
 
	DefSQClass <AIController> SQAIController("AIController");
 
	SQAIController.PreRegister(engine);
 
	SQAIController.DefSQStaticMethod(engine, &AIController::GetTick,         "GetTick",         1, ".");
 
	SQAIController.DefSQStaticMethod(engine, &AIController::GetOpsTillSuspend, "GetOpsTillSuspend", 1, ".");
 
	SQAIController.DefSQStaticMethod(engine, &AIController::SetCommandDelay, "SetCommandDelay", 2, ".i");
 
	SQAIController.DefSQStaticMethod(engine, &AIController::Sleep,           "Sleep",           2, ".i");
 
	SQAIController.DefSQStaticMethod(engine, &AIController::GetSetting,      "GetSetting",      2, ".s");
src/script/squirrel.cpp
Show inline comments
 
@@ -553,3 +553,8 @@ bool Squirrel::CanSuspend()
 
{
 
	return sq_can_suspend(this->vm);
 
}
 

	
 
SQInteger Squirrel::GetOpsTillSuspend()
 
{
 
	return this->vm->_ops_till_suspend;
 
}
src/script/squirrel.hpp
Show inline comments
 
@@ -253,6 +253,11 @@ public:
 
	 * Are we allowed to suspend the squirrel script at this moment?
 
	 */
 
	bool CanSuspend();
 

	
 
	/**
 
	 * How many operations can we execute till suspension?
 
	 */
 
	SQInteger GetOpsTillSuspend();
 
};
 

	
 
#endif /* SQUIRREL_HPP */
0 comments (0 inline, 0 general)