| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "Scripts/NinjaSnowWar/GameObject.as"
- const float snowballMinHitSpeed = 1;
- const float snowballDampingForce = 20;
- const float snowballDuration = 5;
- const float snowballGroundHitDuration = 1;
- const float snowballObjectHitDuration = 0;
- const int snowballDamage = 1;
- class SnowBall : GameObject
- {
- int hitDamage;
- SnowBall()
- {
- duration = snowballDuration;
- hitDamage = snowballDamage;
- }
- void Start()
- {
- SubscribeToEvent(node, "NodeCollision", "HandleNodeCollision");
- }
-
- void FixedUpdate(float timeStep)
- {
- // Apply damping when rolling on the ground, or near disappearing
- RigidBody@ body = node.GetComponent("RigidBody");
- if ((onGround) || (duration < snowballGroundHitDuration))
- {
- Vector3 vel = body.linearVelocity;
- body.ApplyForce(Vector3(-snowballDampingForce * vel.x, 0, -snowballDampingForce * vel.z));
- }
- // Disappear when duration expired
- if (duration >= 0)
- {
- duration -= timeStep;
- if (duration <= 0)
- {
- SpawnParticleEffect(node.position, "Particle/SnowExplosion.xml", 1);
- node.Remove();
- }
- }
- }
-
- void WorldCollision(VariantMap& eventData)
- {
- GameObject::WorldCollision(eventData);
- // If hit the ground, disappear after a short while
- if (duration > snowballGroundHitDuration)
- duration = snowballGroundHitDuration;
- }
- void ObjectCollision(GameObject@ otherObject, VariantMap& eventData)
- {
- if (hitDamage > 0)
- {
- RigidBody@ body = node.GetComponent("RigidBody");
- if ((body.linearVelocity.length >= snowballMinHitSpeed))
- {
- if (side != otherObject.side)
- {
- otherObject.Damage(this, hitDamage);
- // Create a temporary node for the hit sound
- SpawnSound(node.position, "Sounds/PlayerFistHit.wav", 0.2);
- }
- hitDamage = 0;
- }
- }
- if (duration > snowballObjectHitDuration)
- duration = snowballObjectHitDuration;
- }
- }
|