mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-22 20:53:53 +00:00
7349221b9c
git-svn-id: https://openmw.svn.sourceforge.net/svnroot/openmw/trunk@62 ea6a568a-9f4f-0410-981a-c910a81bb256
70 lines
1.5 KiB
D
70 lines
1.5 KiB
D
module mscripts.object;
|
|
|
|
import monster.monster;
|
|
import std.stdio;
|
|
import std.date;
|
|
|
|
// Set up the base Monster classes we need in OpenMW
|
|
void initMonsterScripts()
|
|
{
|
|
// Add the script directory
|
|
MonsterClass.addPath("mscripts/");
|
|
|
|
// Make sure the Object class is loaded
|
|
auto mc = new MonsterClass("Object", "object.mn");
|
|
|
|
// Bind various functions
|
|
mc.bind("print", { print(); });
|
|
mc.bind("sleep", new IdleSleep);
|
|
|
|
// Load and run the test script
|
|
mc = new MonsterClass("Test");
|
|
mc.createObject().call("test");
|
|
}
|
|
|
|
// Write a message to screen
|
|
void print()
|
|
{
|
|
AIndex[] args = stack.popAArray();
|
|
|
|
foreach(AIndex ind; args)
|
|
writef("%s ", arrays.getRef(ind).carr);
|
|
writefln();
|
|
}
|
|
|
|
// Sleep a given amount of time. Currently uses the system clock, but
|
|
// will later be optimized to use the already existing timing
|
|
// information from OGRE.
|
|
class IdleSleep : IdleFunction
|
|
{
|
|
long getLong(MonsterObject *mo)
|
|
{ return *(cast(long*)mo.extra); }
|
|
void setLong(MonsterObject *mo, long l)
|
|
{ *(cast(long*)mo.extra) = l; }
|
|
|
|
override:
|
|
bool initiate(MonsterObject *mo)
|
|
{
|
|
// Get the parameter
|
|
double secs = stack.popFloat;
|
|
|
|
// Get current time
|
|
long newTime = getUTCtime();
|
|
|
|
// Calculate when we should return
|
|
newTime += secs*TicksPerSecond;
|
|
|
|
// Store it
|
|
if(mo.extra == null) mo.extra = new long;
|
|
setLong(mo, newTime);
|
|
|
|
// Schedule us
|
|
return true;
|
|
}
|
|
|
|
bool hasFinished(MonsterObject *mo)
|
|
{
|
|
// Is it time?
|
|
return getUTCtime() >= getLong(mo);
|
|
}
|
|
}
|