TGB/Tutorials/Asteroids/Section7
From TDN
[edit] Asteroids TutorialWritten for TGB Version: 1.6 |
|
[edit] Prelude
[edit] Create and Modify
|
//-----------------------------------------------------------------------------
// Torque Game Builder
// Copyright (C) GarageGames.com, Inc.
// Behavior by Mike Lilligreen for TDN Asteroids Tutorial
//-----------------------------------------------------------------------------
if (!isObject(HighScoreBehavior))
{
%template = new BehaviorTemplate(HighScoreBehavior);
%template.friendlyName = "High Score";
%template.behaviorType = "GUI";
%template.description = "Controls the text of the high score table";
%template.addBehaviorField(maxAmount, "The number of scores in table", int, 5);
%template.addBehaviorField(waitTime, "Number of seconds to wait before displaying table", float, 5.0);
}
function HighScoreBehavior::onAddToScene(%this)
{
new SimSet(HighScoreList);
%file = new FileObject();
if(%file.openForRead("~/highScore.txt"))
{
echo("High Score File found");
}else
{
echo("Creating High Score File");
%initialize = new FileObject();
if(%initialize.openForWrite("~/highScore.txt"))
{
%initialize.close();
%initialize.delete();
}
}
%file.close();
%file.delete();
}
function HighScoreBehavior::onRemoveFromScene(%this)
{
HighScoreList.delete();
}
function HighScoreBehavior::runSchedule(%this)
{
%this.schedule(3000, "recordScore");
%this.schedule(%this.waitTime * 1000, "displayHighScores");
}
function HighScoreBehavior::recordScore(%this)
{
%file = new FileObject();
if (%file.openForAppend("~/highScore.txt"))
{
%file.writeLine($currentScore);
echo("high score updated");
}else
{
error("file not open for writing");
}
%file.close();
%file.delete();
}
function HighScoreBehavior::displayHighScores(%this)
{
%this.readTextFile();
%this.sort();
%this.reduceToLimit();
for(%i=0;%i<HighScoreList.getCount();%i++)
{
%list = HighScoreList.getObject(%i);
switch(%i)
{
case 0:
if (isObject(%list))
hs1.text = %list.score;
case 1:
if (isObject(%list))
hs2.text = %list.score;
case 2:
if (isObject(%list))
hs3.text = %list.score;
case 3:
if (isObject(%list))
hs4.text = %list.score;
case 4:
if (isObject(%list))
hs5.text = %list.score;
}
}
%this.owner.setPosition(0, 0);
}
function HighScoreBehavior::readTextFile(%this)
{
%file = new FileObject();
if(%file.openForRead("~/highScore.txt"))
{
while(!%file.isEof())
{
%temp = %file.readLine();
%obj = new ScriptObject()
{
score = %temp;
};
HighScoreList.add(%obj);
}
}
echo("File read");
%file.close();
%file.delete();
}
function HighScoreBehavior::sort(%this)
{
%copy = %this.copySimSet(HighScoreList);
HighScoreList.clear();
while (%copy.getCount() > 0 && %trap < 100)
{
%high = null;
%x = -1;
for(%i=0;%i<%copy.getCount();%i++)
{
if (%x == -1)
{
%high = %copy.getObject(%i).score;
%x = %i;
}else
{
if (%copy.getObject(%i).score >= %high)
{
%high = %copy.getObject(%i).score;
%x = %i;
}
}
}
HighScoreList.add(%copy.getObject(%x));
%copy.remove(%copy.getObject(%x));
}
}
function HighScoreBehavior::copySimSet(%this, %set)
{
%obj = new SimSet();
for(%i=0;%i<%set.getCount();%i++)
{
%obj.add(%set.getObject(%i));
}
return %obj;
}
function HighScoreBehavior::reduceToLimit(%this)
{
%currentAmount = HighScoreList.getCount();
%limit = %this.maxAmount;
if (%currentAmount > %limit)
{
%file = new FileObject();
if (%file.openForWrite("~/highScore.txt"))
{
%first = HighScoreList.getObject(0);
%file.writeLine(%first.score);
}else
{
error("file not open for writing");
}
%file.close();
if (%file.openForAppend("~/highScore.txt"))
{
for(%i=1;%i<%limit;%i++)
{
%list = HighScoreList.getObject(%i);
%file.writeLine(%list.score);
}
}else
{
error("file not open for writing");
}
%file.close();
%file.delete();
}
}
|
if (%this.lives <= 0)
{
if (%check == false)
{
%this.owner.safeDelete();
return;
}else
{
%this.lifeCounter.update();
gameText.gameOverText();
hsTable.runSchedule();
%this.owner.safeDelete();
return;
}
}
[edit] The High Score Table
|






