Torque game engine 0 6
This presentation is the property of its rightful owner.
Sponsored Links
1 / 15

Torque Game Engine - #0 6 PowerPoint PPT Presentation


  • 54 Views
  • Uploaded on
  • Presentation posted in: General

Torque Game Engine - #0 6. Κώστας Καρπούζης (kkarpou) Αμαρυλλίς Ραουζαίου (araouz) Γιώργος Καρυδάκης ( gcari) http://www.image.ntua.gr. Προηγούμενο μάθημα. tutorial.base

Download Presentation

Torque Game Engine - #0 6

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Torque game engine 0 6

Torque Game Engine - #06

Κώστας Καρπούζης (kkarpou)

Αμαρυλλίς Ραουζαίου (araouz)

Γιώργος Καρυδάκης (gcari)

http://www.image.ntua.gr


Torque game engine 0 6

Προηγούμενο μάθημα

tutorial.base

  • Αντιγραφή φακέλου "rocket_launcher" που περιέχει .dts αρχεία και τις εικόνες υφής (textures) για το rocket launcher και το rocket projectile, στο φάκελο "tutorial.base/data/shapes".

  • Αντιγραφή του "rocket_launcher.cs" στο φάκελο "tutorial.base/server".

  • Στο "tutorial.base/server/game.cs" στην συνάρτηση onServerCreated() προσθήκη της γραμμής (πριν από την αντίστοιχη εντολή για το player.cs):exec("./rocket_launcher.cs");

  • Στο " tutorial.base/server/player.cs" στην συνάρτηση PlayerShape::onAdd προσθέστε:

    parent::onAdd( %this, %obj );

    %obj.mountImage( RocketLauncherImage, 0 );

    %obj.setImageAmmo( 0, 1 );

    Εναλλακτικά http://image.ntua.gr/~gcari/cg/weapons.tutorial.working.rar


Bot i

Δημιουργία Bot I

  • Αντιγραφή "bot.cs" στο "tutorial.base/server"

  • Ανοίξτε το " tutorial.base/server/game.cs" και στην συνάρτηση onServerCreated() προσθέστε την εντολή (στο τέλος της λίστας με τα exec()):exec("./bot.cs");Στο bot.cs ορίζεται ο AIManager που διαχειρίζεται όλα τα bots. Το ειδικό αυτό αντικείμενο πρέπει να αρχικοποιηθεί προσθέτοντας τις εξής εντολές:

    • Στην συνάρτηση onMissionLoaded() new ScriptObject(AIManager) {}; MissionCleanup.add(AIManager); AIManager.think();

    • Στην συνάρτηση onMissionEnded() AIManager.delete();

      Το αρχείο bot.cs περιέχει σχόλια που περιγράφουν πώς θα ακολουθεί το bot το μονοπάτι που θα ορίσουμε.


Bot ii

Δημιουργία BotII

  • Προς το παρόν δεν έχουμε ορίσει κάποιο μονοπάτι για τα bots (αυτό γίνεται από τον Mission Editor), με αποτέλεσμα όταν δημιουργούνται με την κλήση της συνάρτησης AIManager::spawn(),θα εμφανίζεται ένα απλό bot που δεν θα ακολουθεί κάποιο μονοπάτι.


Torque game engine 0 6

Ορισμός μονοπατιού I

  • Τρέχουμε το torqueDemo.exe

  • Με F11 ανοίγουμε τον Mission editor

  • Στη συνέχεια ενεργοποιούμε τον World Editor Creator

  • Ανοίγουμε το δέντρο κάτω από το "Mission Objects" στο κάτω δεξιά παράθυρο της οθόνης:"Mission Objects->Mission"Στον φάκελο "Mission", επιλέγουμε το "Path" για να δημιουργήσουμε ένα νέο αντικείμενο new Path. Του δίνουμε όνομα, π.χ. "myPath".

  • Ανοίγουμε το δέντρο "MissionGroup" πάνω δεξιά, βρίσκουμε και επιλέγουμε το "myPath". Κρατάμε πατημένο το "Alt" key καθώς το επιλέγουμε με το ποντίκι. Τώρα το χρώμα του "myPath" πρέπει να αλλάξει από άσπρο σε γκρι. Στην συνέχεια θα δημιουργήσουμε τρεις PathMarkers και πρέπει να είμαστε σίγουροι ότι θα ανήκουν στο αντικείμενο "myPath".


Torque game engine 0 6

Ορισμός μονοπατιού II

  • Για να οριστεί ένα μονοπάτι αρκεί να ορίσουμε μερικά σημεία/σημάδια από τα οποία θα αποτελείται. Επιστρέφουμε στο κάτω δεξιά δέντρο, ανοίγουμε το φάκελο "Mission" και επιλέγουμε το "PathMarker". Του δίνουμε όνομα, π.χ. "myMarker0" και ελέγχουμε ότι ανήκει στο "myPath" στο δέντρο "MissionGroup" (πάνω δεξιά).

  • Επαναλαμβάνουμε την διαδικασία και δημιουργούμε άλλα δύο PathMarkers με ονόματα "myMarker1 και "myMarker2". Τα σημάδια που τοποθετήσαμε πρέπει να έχουν ικανοποιητική απόσταση μεταξύ τους χωρίς όμως να υπάρχει κίνδυνος να στείλουν το bot εκτός σκηνής. (Με Alt+c κινείται η κάμερα χωρίς τον παίκτη)

  • "File->Save Mission"

  • Εxit game


Torque game engine 0 6

Ορισμός μονοπατιού ΙΙΙ

  • Ανοίγουμε το " tutorial.base/server/bot.cs" με σκοπό να χρησιμοποιήσουμε το μονοπάτι που μόλις ορίσαμε σαν μονοπάτι του bot. Στην συνάρτηση AIManager::spawn() βάζουμε σε σχόλια την εντολή που δημιουργεί το "Bot_1" και αφαιρούμε τα σχόλια που δημιουργούν το "Bot_2".

  • When done, save the "bot.cs" script file.

  • Το string "MissionGroup/myPath", που περνιέται σαν όρισμα στις συναρτήσεις AIPlayer::spawnOnPath(), και followPath() περιέχει την πληροφορία που χρειάζεται το "Bot_2" για να ακολουθήσει το μονοπάτι που δημιουργήσαμε.


Damage animation

Damage και animation θανάτου

  • Αντιγράφουμε τα "radiusDamage.cs" και "shapeBase.cs" στον φάκελο "tutorial.base/server"

  • Ανοίγουμε το " tutorial.base/server/game.cs" και στην συνάρτηση onServerCreated() προσθέτουμε στο τέλος της λίστας με τα exec()):exec("./radiusDamage.cs");exec("./shapeBase.cs");

  • Αντιγράφουμε το "player_dieknees.dsq" (αρχείο animation) στον φάκελο "\tutorial.base\data\shapes\player" directory.


Animation

Ορισμός animation

  • Ανοίγουμε το "\tutorial.base\data\shapes\player\player.cs" και προσθέτουμε την εξής εντολή στο τέλος του TSShapeConstructor datablock:

    sequence12 = "./player_dieknees.dsq die";

  • Με αυτή την εντολή ορίζουμε στον παίκτη ένα καινούριο death animation που θα εκτελείται όταν τον πετυχαίνουμε με το όπλο.


Animation1

Ενεργοποίηση animation

  • Ανοίογυμε το " tutorial.base/server/player.cs" και στο PlayerShape datablock προσθέτουμε την γραμμή PlayerData(PlayerShape){ className = Armor; ...

  • Ορίζοντας την μεταβλητή className ως Armor όλοι οι παίκτες και τα bots θα κληρονομούν όλες τις συναρτήσεις που ορίζονται στο Armor name space.

  • Συνεχίζουμε με αλλαγές στο ίδιο αρχείο.

  • Προσθέτουμε την παρακάτω συνάρτηση στο τέλος του "player.cs" function Player::playDeathAnimation( %this ){ %this.setActionThread( "die" );}


Damage

Υπολογισμός damage

  • Ακριβώς από κάτω προσθέτουμε την συνάρτηση:function Armor::damage( %this, %obj, %sourceObject, %position, %damage, %damageType ){ // If we're already dead, don't bother with it... if( %obj.getState() $= "Dead" ) return; %obj.applyDamage( %damage ); echo( "Damage Type = " @ %damageType ); // Deal with client callbacks here because we don't have this information // in the onDamage or onDisabled methods %client = %obj.client; %sourceClient = %sourceObject ? %sourceObject.client : 0; if( %obj.getState() $= "Dead" ) %client.onDeath( %sourceObject, %sourceClient, %damageType, %location );}

  • Προσοχή στους χαρακτήρες σκουπίδια!


Animation2

Κλήση animation θανάτου

  • Ακριβώς από κάτω προσθέτουμε την συνάρτηση:function Armor::onDisabled( %this, %obj, %state ){ // "damage" method. %obj.playDeathAnimation(); // Release the main weapon trigger. %obj.setImageTrigger( 0, false ); // Schedule time and duration of fade-out for dead players. %obj.schedule( 6000, "startFade", 1000, 0, true ); // Schedule deletion for dead players. %obj.schedule( 8000, "delete" );}

  • Με την έννοια object disable αναφέρεται στον θάνατο ενός παίκτη ή bot


Damage1

Παράμετροι damage

  • Στο αρχείο " tutorial.base/server/rocket_launcher.cs" αλλάζουμε τις τιμές ως εξής:

    datablock ProjectileData( RocketProjectile ){ ... directDamage = 50; radiusDamage = 25; damageRadius = 1.5; ...


Damage2

Σύνδεση σύγκρουσης με damage

  • Στην συνάρτηση RocketProjectile::onCollision:function RocketProjectile::onCollision( %this, %obj, %col, %fade, %pos, %normal ){ echo("RocketProjectile::onCollision called!------------");// For direct hits... apply damage to all shape base objects if( %col.getType() & $TypeMasks::ShapeBaseObjectType ) %col.damage( %obj, %pos, %this.directDamage, "Rocket" );

    // For radius damage hits... use the radiusDamage utility function defined

    // by the radiusDamage.cs script to see if we our player or bot will take// any damage. radiusDamage( %obj, VectorAdd(%pos, VectorScale(%normal, 0.01)), %this.damageRadius, %this.radiusDamage, "Radius", 40 );}

  • Και πάλι προσοχή στα σκουπίδια!


Torque game engine 0 6

ΤΕΛΟΣ

  • Τρέχουμε το παιχνίδι

  • Αν όλα έχουν πάει καλά θα πρέπει να μπορούμε να ανατινάξουμε το bot καθώς και τον παίκτη μας (πυροβολώντας στα πόδια του)


  • Login