
Untitled
By: a guest on Feb 7th, 2011 | syntax:
C# | size: 2.48 KB | hits: 203 | expires: Never
class Script
{
List<IScriptItem> m_items = new List<IScriptItem>();
GameResource m_gameResource;
int m_itemIndex;
String m_filename;
bool m_shouldDelete;
public Script(String filename, GameResource resource)
{
m_filename = filename;
m_gameResource = resource;
DataNode rootNode = DataNodeResource.getDataNode(@"Content\scripts\" + filename);
m_itemIndex = 0;
addFromNode(rootNode);
}
public void setDeleted()
{
m_shouldDelete = true;
}
public String getFilename()
{
return m_filename;
}
public bool shouldDelete()
{
return m_shouldDelete;
}
void addFromNode(DataNode node)
{
int nodeCount = node.getNodeCount();
for (int nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex)
{
DataNode thisNode = node.getNode(nodeIndex);
String itemType = thisNode.getName(); IScriptItem itemToAdd = null;
if ( itemType == "wait" ) // replace these else-ifs with your favourite String -> Object building logic
{
itemToAdd = new ScriptItems.Wait();
}
else if ( itemType == "play_cue" )
{
itemToAdd = new ScriptItems.PlayCue();
}
if (itemToAdd != null)
{
itemToAdd.baseSetup(m_gameResource); // set up base
itemToAdd.setup(thisNode); // pass data to item set up
m_items.Add(itemToAdd);
}
else
{
// throw an exception or do some error thing here - you've tried to use a command in your script which doesn't exist!
}
}
}
public bool run(float dt)
{
bool shouldBreak = false;
while ( true )
{
if ( m_itemIndex >= (int)m_items.Count )
{
return false;
}
if ( shouldBreak )
{
return true;
}
m_items[m_itemIndex].run(dt);
shouldBreak = m_items[m_itemIndex].shouldUpdateGame();
if ( m_items[m_itemIndex].isComplete() )
{
++m_itemIndex;
}
}
}
}