T2DBasicTutorial1 CompleteSourceCode
From TDN
Here is the completed code (torquescript) of the Basic Tutorial (client.cs)
this is for T2D v1.0.2
//-----------------------------------------------------------------------------
// Torque 2D.
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
// --------------------------------------------------------------------
// Initialise Client.
// --------------------------------------------------------------------
function initialiseClient()
{
// Initialise Base Client.
InitBaseClient();
// Key-Bindings.
GlobalActionMap.bind(keyboard, tilde, ToggleConsole);
GlobalActionMap.bindCmd(keyboard, "alt enter", "", "toggleFullScreen();");
// Initialise Canvas.
InitCanvas("T2D");
// ************************************************************************
// Load-up Demo Datablocks.
// NOTE:- Remove this is you're not interested in running the demos
// or any or the default datablocks.
// ************************************************************************
exec("./demoDatablocks.cs");
// Load-up Datablocks.
exec("./datablocks.cs");
// Load-up GUIs.
exec("./mainScreenGui.gui");
// Set GUI.
Canvas.setContent(mainScreenGui);
// Set Cursor.
Canvas.setCursor(DefaultCursor);
// Setup Scene.
setupT2DScene();
}
// --------------------------------------------------------------------
// Destroy Client.
//
// Here we destroy the SceneGraph.
// --------------------------------------------------------------------
function destroyClient()
{
// Destroy fxSceneGraph2D.
if ( isObject(t2dSceneGraph) )
t2dSceneGraph.delete();
}
// --------------------------------------------------------------------
// Setup T2D Scene.
// --------------------------------------------------------------------
function setupT2DScene()
{
// Create fxSceneGraph2D.
new fxSceneGraph2D(t2dSceneGraph);
// Associate Scenegraph with Window.
sceneWindow2D.setSceneGraph( t2dSceneGraph );
// Set Camera Position to be centered on (0,0) with
// view width/height of (100/80).
sceneWindow2D.setCurrentCameraPosition( "0 0 100 75" );
// ************************************************************************
//
// Add your custom code here...
//
// ************************************************************************
// Set up the images for the game
SetupImages();
// Set up the player's stuff
CreatePlayer();
// Set up the enemy
CreateEnemy();
//Create Tilemap
CreateTileMap();
}
function CreateEnemy()
{
// Create an enemy ship
%enemy = new fxStaticSprite2D() { scenegraph = t2dSceneGraph; };
%enemy.setImageMap( enemyship1ImageMap );
%enemy.setSize( "14 7" );
%enemy.setPosition("40" SPC (-30 + (getRandom() * 60)));
// Move the enemy towards us.
%enemy.setLinearVelocityX(-20);
// Create an enemy missile and fire it
%enemyFire = new fxStaticSprite2D() { scenegraph = t2dSceneGraph; };
%enemyFire.setPosition( %enemy.getPosition() );
%enemyFire.setSize( "3 1.5" );
%enemyFire.setImageMap( enemymissileImageMap );
%enemyFire.setLinearVelocityX( -35 );
%enemyFire.setWorldLimit( kill, "-60 -40 60 40" );
//add thrusters
attachThruster( %enemy, "0.8 -0.12", 180 );
attachThruster( %enemy, "0.8 0.18", 180 );
// Set enemy collision info
%enemy.setGroup( 2 );
%enemy.setLayer( 2 );
%enemy.setCollisionActive( true, true );
%enemy.setCollisionMaterial( standardMaterial );
%enemy.setCollisionPolyCustom( 5, "-0.9 0 0 -0.6 1 -0.3 1 0.3 0 0.5" );
%enemy.setCollisionMasks( BIT(1), BIT(1) );
%enemy.setCollisionCallback( true );
// Set up collision info
%enemyFire.setGroup( 2 );
%enemyFire.setLayer( 2 );
%enemyFire.setCollisionActive( true, true );
%enemyFire.setCollisionMaterial( standardMaterial );
%enemyFire.setCollisionScale("0.9 0.5");
%enemyFire.setCollisionMasks( BIT(1), BIT(1) );
%enemyFire.setCollisionCallback( true );
schedule(2000, 0, "CreateEnemy");
}
function CreatePlayer()
{
// Create the player's ship sprite
$player = new fxStaticSprite2D() { scenegraph = t2dSceneGraph; };
$player.setPosition("-35 0");
$player.setSize( "14 7" );
$player.setImageMap( playershipImageMap );
$player.fireLinkPoint = $player.addLinkPoint( "0.45 0.2" );
$player.setWorldLimit( clamp, "-49 -37 40 37" );
//add thruster
attachThruster( $player, "-0.12 -0.33", 0 );
// Create a new action map.
new ActionMap(playerMap);
// Bind keys to actions.
playerMap.bindCmd(keyboard, "w", "playerUp();", "playerUpStop();");
playerMap.bindCmd(keyboard, "s", "playerDown();", "playerDownStop();");
playerMap.bindCmd(keyboard, "a", "playerLeft();", "playerLeftStop();");
playerMap.bindCmd(keyboard, "d", "playerRight();", "playerRightStop();");
playerMap.bindCmd(keyboard, "space", "playerFire();", "");
// Activate the action map.
playerMap.push();
// Set player's collision info:
$player.setGroup( 1 );
$player.setLayer( 1 );
$player.setCollisionActive( true, true );
$player.setCollisionMaterial( standardMaterial );
$player.setCollisionPolyCustom( 4, "-1 0 -0.1 -0.6 0.98 0.15 -0.1 0.7" );
$player.setCollisionMasks( BIT(2), BIT(2) );
$player.setCollisionCallback( true );
}
function SetupImages()
{
// Create an image for the player ship
datablock fxImageMapDatablock2D(playershipImageMap)
{
mode = full;
textureName = "~/client/images/playerShip";
};
// Create an image for the player's missiles
datablock fxImageMapDatablock2D(playermissileImageMap)
{
mode = full;
textureName = "~/client/images/playerMissile";
};
// Create an image for enemy ships
datablock fxImageMapDatablock2D(enemyship1ImageMap)
{
mode = full;
textureName = "~/client/images/enemyship1";
};
// Create an image for the enemy's missiles
datablock fxImageMapDatablock2D(enemymissileImageMap)
{
mode = full;
textureName = "~/client/images/enemyMissile";
};
// Create images for the tilemap
datablock fxImageMapDatablock2D(bgBlankSkyImageMap)
{
mode = full;
textureName = "~/client/images/bg_blank_sky";
};
datablock fxImageMapDatablock2D(bgCloud1ImageMap)
{
mode = full;
textureName = "~/client/images/bg_cloud_1";
};
datablock fxImageMapDatablock2D(bgCloud2ImageMap)
{
mode = full;
textureName = "~/client/images/bg_cloud_2";
};
datablock fxImageMapDatablock2D(bgCloud3aImageMap)
{
mode = full;
textureName = "~/client/images/bg_cloud_3a";
};
datablock fxImageMapDatablock2D(bgCloud3bImageMap)
{
mode = full;
textureName = "~/client/images/bg_cloud_3b";
};
}
function playerUp()
{
// Set the player moving up.
$player.setLinearVelocityY( -10 );
}
function playerUpStop()
{
$player.setLinearVelocityY( 0 );
}
function playerUpStop()
{
// If we're moving up then nullify any upward movement.
if ( $player.getLinearVelocityY() < 0 )
$player.setLinearVelocityY( 0 );
}
function playerDown()
{
// Set the player moving down.
$player.setLinearVelocityY( 10 );
}
function playerDownStop()
{
// If we're moving down then nullify any downward movement.
if ( $player.getLinearVelocityY() > 0 )
$player.setLinearVelocityY( 0 );
}
function playerLeft()
{
// Set the player moving left.
$player.setLinearVelocityX( -10 );
}
function playerLeftStop()
{
// If we're moving left then nullify any leftward movement.
if ( $player.getLinearVelocityX() < 0 )
$player.setLinearVelocityX( 0 );
}
function playerRight()
{
// Set the player moving right.
$player.setLinearVelocityX( 10 );
}
function playerRightStop()
{
// If we're moving right then nullify any rightward movement.
if ( $player.getLinearVelocityX() > 0 )
$player.setLinearVelocityX( 0 );
}
function playerFire()
{
// Create player projectile.
%projectile = new fxStaticSprite2D() { scenegraph = t2dSceneGraph; };
%projectile.setPosition( $player.getLinkPoint($player.fireLinkPoint) );
%projectile.setSize( "3 1.5" );
%projectile.setImageMap( playermissileImageMap );
%projectile.setWorldLimit( kill, "-52 -40 52 40" );
%projectile.setLinearVelocityX( 35 );
// Setup collision info
%projectile.setGroup( 1 );
%projectile.setLayer( 1 );
%projectile.setCollisionActive(true, true);
%projectile.setCollisionMaterial(projectileMaterial);
%projectile.setCollisionScale("0.9 0.5");
%projectile.setCollisionMasks( BIT(2), BIT(2));
%projectile.setCollisionCallback( true );
}
function KillPlayer()
{
$player.setVisible( false );
playerMap.pop();
schedule(2000, 0, "ResetPlayer");
}
function ResetPlayer()
{
$player.setPosition("-35 0");
$player.setVisible(true);
playerMap.push();
}
function fxSceneObject2D::onCollision( %srcObj, %dstObj, %srcRef, %dstRef, %time, %normal, %contactCount, %contacts )
{
// Create an explosion for the collision that just occurred
createExplosion( %dstObj );
if (%srcObj == $player)
{
KillPlayer();
%dstObj.safeDelete();
}
else if (%dstObj == $player)
{
KillPlayer();
%srcObj.safeDelete();
}
else
{
%srcObj.safeDelete();
%dstObj.safeDelete();
}
}
function CreateTileMap()
{
// Create tile-map.
%scrollerMap = new fxTileMap2D() { scenegraph = t2dSceneGraph; };
// Load saved tile-map file.
%scrollerMap.loadTileMap("~/client/maps/scroller.map");
// Load tile layer from tile-map
%skyLayer = %scrollerMap.getTileLayer( 0 );
// Generate Scrolling Sky, re-size to fill the whole screen
%skyLayer.setPosition( "0 -10" );
%skyLayer.setTileSize( "25 25" );
%skyLayer.setWrap( true, false );
%skyLayer.setAutoPan( "10 0" );
}
function attachThruster(%mountObj, %mountPosition, %angle)
{
// Create Player Thruster.
%thruster = new fxParticleEffect2D() { scenegraph = t2dSceneGraph; };
%thruster.loadEffect("~/client/effects/smallThruster.eff");
%thruster.mount( %mountObj, %mountPosition, 0, false );
%thruster.setRotation( %angle );
%thruster.playEffect();
}
function createExplosion( %object )
{
// Ignore if object not around anymore.
if ( !isObject(%object) )
return;
// Shockwave Explosion.
%explosion = new fxParticleEffect2D() { scenegraph = t2dSceneGraph; };
%explosion.loadEffect("t2d/client/effects/shockwave_burst.eff");
%explosion.setPosition( %object.getPosition() );
%explosion.setEffectLifeMode( kill, 0.1 );
%explosion.playEffect();
}



