| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //-----------------------------------------------------------------------------
- // Torque
- // Copyright GarageGames, LLC 2013
- //-----------------------------------------------------------------------------
- function LeapToy::createTakesDamageBehavior( %this )
- {
- if (!isObject(TakesDamageBehavior))
- {
- %this.TakesDamageBehavior = new BehaviorTemplate(TakesDamageBehavior);
-
- %this.TakesDamageBehavior.friendlyName = "Takes Damage Advanced";
- %this.TakesDamageBehavior.behaviorType = "Game";
- %this.TakesDamageBehavior.description = "Set the object to take damage from DealsDamage objects that collide with it";
- %this.TakesDamageBehavior.addBehaviorField(health, "The amount of health the object has", int, 10);
- %this.TakesDamageBehavior.addBehaviorField(lives, "The number of times the object can lose all its health", int, 3);
- %this.TakesDamageBehavior.addBehaviorField(respawnTime, "The time between death and respawn (seconds)", float, 2.0);
- %this.TakesDamageBehavior.addBehaviorField(invincibleTime, "The time after spawning before damage is applied (seconds)", float, 1.0);
- %this.TakesDamageBehavior.addBehaviorField(respawnEffect, "The particle effect to play on spawn", asset, "", ParticleAsset);
- %this.TakesDamageBehavior.addBehaviorField(explodeEffect, "The particle effect to play on death", asset, "", ParticleAsset);
-
- %this.add(%this.TakesDamageBehavior);
- }
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::initialize(%this, %health, %lives, %respawnTime, %invincibleTime, %respawnEffect, %explodeEffect, %startFrame)
- {
- %this.health = %health;
- %this.lives = %lives;
- %this.respawnTime = %respawnTime;
- %this.invincibleTime = %invincibleTime;
- %this.respawnEffect = %respawnEffect;
- %this.explodeEffect = %explodeEffect;
- %this.startFrame = %startFrame;
- %this.startHealth = %this.health;
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::onBehaviorAdd( %this )
- {
- %this.startHealth = %this.health;
- %this.owner.collisionCallback = true;
- %this.spawn();
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::takeDamage( %this, %amount, %assailant )
- {
- if (%this.invincible)
- return;
-
- %this.health -= %amount;
-
- if (%this.health <= 0)
- {
- // Explode and kill the object
- %this.explode();
- %this.kill();
- return;
- }
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::kill( %this )
- {
- %this.lives--;
-
- if (%this.lives <= 0)
- {
- %this.owner.safeDelete();
- return;
- }
- %this.invincible = true;
- %this.owner.visible = false;
- %this.owner.setCollisionSuppress(true);
- %this.owner.collisionActiveReceive = false;
- %this.schedule(%this.respawnTime * 1000, "spawn");
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::setVincible(%this)
- {
- %this.invincible = false;
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::spawn( %this )
- {
- %this.owner.collisionActiveReceive = true;
- %this.schedule(%this.invincibleTime * 1000, "setVincible");
- %this.health = %this.startHealth;
- %this.owner.visible = true;
- %this.owner.setCollisionSuppress(false);
- %this.owner.setImageFrame(%this.startFrame);
-
- if (%this.respawnEffect !$= "")
- {
- %particlePlayer = new ParticlePlayer();
- %particlePlayer.BodyType = static;
- %particlePlayer.Size = "10";
- %particlePlayer.SetPosition( %this.owner.getPosition() );
- %particlePlayer.SceneLayer = %this.owner.getSceneLayer();
- %particlePlayer.ParticleInterpolation = true;
- %particlePlayer.Particle = %this.respawnEffect;
- SandboxScene.add(%particlePlayer);
- }
- }
- //-----------------------------------------------------------------------------
- function TakesDamageBehavior::explode( %this )
- {
- if (%this.explodeEffect !$= "")
- {
- %particlePlayer = new ParticlePlayer();
- %particlePlayer.BodyType = static;
- %particlePlayer.SetPosition( %this.owner.getPosition() );
- %particlePlayer.SceneLayer = %this.owner.getSceneLayer();
- %particlePlayer.ParticleInterpolation = true;
- %particlePlayer.Particle = %this.explodeEffect;
- %particlePlayer.SizeScale = 0.8;
- SandboxScene.add(%particlePlayer);
- }
- }
|