AI related bug fixes and improvements.

Removed references to AIObjective and aiAvoidThis which are not used.
Made minor improvements to the spawning system in the aiPlayer.cs file.
This commit is contained in:
TwistedJenius 2012-09-21 06:51:53 -05:00
parent 9afd794913
commit f922bc4fd0
10 changed files with 30 additions and 44 deletions

View file

@ -126,7 +126,7 @@ function WorldEditor::onSelectionCentroidChanged( %this )
function WorldEditor::init(%this)
{
// add objclasses which we do not want to collide with
%this.ignoreObjClass(Sky, AIObjective);
%this.ignoreObjClass(Sky);
// editing modes
%this.numEditModes = 3;

View file

@ -126,7 +126,7 @@ function WorldEditor::onSelectionCentroidChanged( %this )
function WorldEditor::init(%this)
{
// add objclasses which we do not want to collide with
%this.ignoreObjClass(Sky, AIObjective);
%this.ignoreObjClass(Sky);
// editing modes
%this.numEditModes = 3;

View file

@ -504,8 +504,6 @@ datablock PlayerData(DefaultPlayerData)
throwForce = 30;
aiAvoidThis = 1;
minLookAngle = "-1.4";
maxLookAngle = "0.9";
maxFreelookAngle = 3.0;

View file

@ -87,7 +87,7 @@ function DemoPlayer::onEndSequence(%this,%obj,%slot)
// AIPlayer static functions
//-----------------------------------------------------------------------------
function AIPlayer::spawn(%name,%spawnPoint)
function AIPlayer::create(%name,%spawnPoint)
{
// Create the demo player object
%player = new AiPlayer()
@ -107,7 +107,7 @@ function AIPlayer::spawnOnPath(%name,%path)
if (!isObject(%path))
return 0;
%node = %path.getObject(0);
%player = AIPlayer::spawn(%name, %node.getTransform());
%player = AIPlayer::create(%name, %node.getTransform());
return %player;
}
@ -118,7 +118,6 @@ function AIPlayer::spawnOnPath(%name,%path)
function AIPlayer::followPath(%this,%path,%node)
{
// Start the player following a path
%this.stopThread(0);
if (!isObject(%path))
{
%this.path = "";
@ -160,7 +159,7 @@ function AIPlayer::moveToNode(%this,%index)
// Move to the given path node index
%this.currentNode = %index;
%node = %this.path.getObject(%index);
%this.setMoveDestination(%node.getTransform(), %index == %this.targetNode);
%this.setMoveDestination(%node.getTransform());
}
//-----------------------------------------------------------------------------
@ -298,28 +297,26 @@ function AIPlayer::getNearestPlayerTarget(%this)
//-----------------------------------------------------------------------------
function AIManager::think(%this)
function AIPlayer::think(%player)
{
// We could hook into the player's onDestroyed state instead of having to
// "think", but thinking allows us to consider other things...
if (!isObject(%this.player))
%this.player = %this.spawn();
%this.schedule(500, think);
// Thinking allows us to consider other things...
%player.schedule(500, think);
}
function AIManager::spawn(%this)
function AIPlayer::spawn(%path)
{
%player = AIPlayer::spawnOnPath("Shootme", "MissionGroup/Paths/Path1");
%player = AIPlayer::spawnOnPath("Shootme", %path);
if (isObject(%player))
{
%player.followPath("MissionGroup/Paths/Path1", -1);
%player.followPath(%path, -1);
// slow this sucker down, I'm tired of chasing him!
%player.setMoveSpeed(0.5);
//%player.mountImage(xxxImage, 0);
//%player.setInventory(xxxAmmo, 1000);
//%player.think();
return %player;
}

View file

@ -405,10 +405,8 @@ function GameCore::startGame(%game)
$Game::Schedule = %game.schedule($Game::Duration * 1000, "onGameDurationEnd");
$Game::Running = true;
// // Start the AIManager
// new ScriptObject(AIManager) {};
// MissionCleanup.add(AIManager);
// AIManager.think();
// // Start the AI on the specified path
// AIPlayer::spawn("Path1");
}
function GameCore::endGame(%game, %client)
@ -699,7 +697,7 @@ function GameCore::onDeath(%game, %client, %sourceObject, %sourceClient, %damage
call( %sendMsgFunction, 'MsgClientKilled', %client, %sourceClient, %damLoc );
// Dole out points and check for win
if ( %damageType $= "Suicide" || %sourceClient == %client )
if (( %damageType $= "Suicide" || %sourceClient == %client ) && isObject(%sourceClient))
{
%game.incDeaths( %client, 1, true );
%game.incScore( %client, -1, false );

View file

@ -126,7 +126,7 @@ function WorldEditor::onSelectionCentroidChanged( %this )
function WorldEditor::init(%this)
{
// add objclasses which we do not want to collide with
%this.ignoreObjClass(Sky, AIObjective);
%this.ignoreObjClass(Sky);
// editing modes
%this.numEditModes = 3;

View file

@ -504,8 +504,6 @@ datablock PlayerData(DefaultPlayerData)
throwForce = 30;
aiAvoidThis = 1;
minLookAngle = "-1.4";
maxLookAngle = "0.9";
maxFreelookAngle = 3.0;

View file

@ -87,7 +87,7 @@ function DemoPlayer::onEndSequence(%this,%obj,%slot)
// AIPlayer static functions
//-----------------------------------------------------------------------------
function AIPlayer::spawn(%name,%spawnPoint)
function AIPlayer::create(%name,%spawnPoint)
{
// Create the demo player object
%player = new AiPlayer()
@ -107,7 +107,7 @@ function AIPlayer::spawnOnPath(%name,%path)
if (!isObject(%path))
return 0;
%node = %path.getObject(0);
%player = AIPlayer::spawn(%name, %node.getTransform());
%player = AIPlayer::create(%name, %node.getTransform());
return %player;
}
@ -118,7 +118,6 @@ function AIPlayer::spawnOnPath(%name,%path)
function AIPlayer::followPath(%this,%path,%node)
{
// Start the player following a path
%this.stopThread(0);
if (!isObject(%path))
{
%this.path = "";
@ -160,7 +159,7 @@ function AIPlayer::moveToNode(%this,%index)
// Move to the given path node index
%this.currentNode = %index;
%node = %this.path.getObject(%index);
%this.setMoveDestination(%node.getTransform(), %index == %this.targetNode);
%this.setMoveDestination(%node.getTransform());
}
//-----------------------------------------------------------------------------
@ -298,28 +297,26 @@ function AIPlayer::getNearestPlayerTarget(%this)
//-----------------------------------------------------------------------------
function AIManager::think(%this)
function AIPlayer::think(%player)
{
// We could hook into the player's onDestroyed state instead of having to
// "think", but thinking allows us to consider other things...
if (!isObject(%this.player))
%this.player = %this.spawn();
%this.schedule(500, think);
// Thinking allows us to consider other things...
%player.schedule(500, think);
}
function AIManager::spawn(%this)
function AIPlayer::spawn(%path)
{
%player = AIPlayer::spawnOnPath("Shootme", "MissionGroup/Paths/Path1");
%player = AIPlayer::spawnOnPath("Shootme", %path);
if (isObject(%player))
{
%player.followPath("MissionGroup/Paths/Path1", -1);
%player.followPath(%path, -1);
// slow this sucker down, I'm tired of chasing him!
%player.setMoveSpeed(0.5);
//%player.mountImage(xxxImage, 0);
//%player.setInventory(xxxAmmo, 1000);
//%player.think();
return %player;
}

View file

@ -405,10 +405,8 @@ function GameCore::startGame(%game)
$Game::Schedule = %game.schedule($Game::Duration * 1000, "onGameDurationEnd");
$Game::Running = true;
// // Start the AIManager
// new ScriptObject(AIManager) {};
// MissionCleanup.add(AIManager);
// AIManager.think();
// // Start the AI on the specified path
// AIPlayer::spawn("Path1");
}
function GameCore::endGame(%game, %client)
@ -699,7 +697,7 @@ function GameCore::onDeath(%game, %client, %sourceObject, %sourceClient, %damage
call( %sendMsgFunction, 'MsgClientKilled', %client, %sourceClient, %damLoc );
// Dole out points and check for win
if ( %damageType $= "Suicide" || %sourceClient == %client )
if (( %damageType $= "Suicide" || %sourceClient == %client ) && isObject(%sourceClient))
{
%game.incDeaths( %client, 1, true );
%game.incScore( %client, -1, false );

View file

@ -126,7 +126,7 @@ function WorldEditor::onSelectionCentroidChanged( %this )
function WorldEditor::init(%this)
{
// add objclasses which we do not want to collide with
%this.ignoreObjClass(Sky, AIObjective);
%this.ignoreObjClass(Sky);
// editing modes
%this.numEditModes = 3;