/// <summary> /// Disparador del evento de proyectil en movimiento /// </summary> /// <param name="ammoRound">Proyectil</param> private void FireProjectileMovedEvent(AmmoRound ammoRound) { if (this.ProjectileMoved != null) { this.ProjectileMoved(ammoRound); } }
private void Start() { for (int i = 0; i < ammoRounds; i++) { AmmoRound round = new AmmoRound(new Particle(), ShotType.UNUSED, 0f); ammo[i] = round; } }
void OnPrimitiveContacted(CollisionPrimitive primitive) { if (primitive is AmmoRound) { AmmoRound ammo = (AmmoRound)primitive; this.TakeDamage(ammo.Mass, ammo.Velocity, ammo.Position); } }
/// <summary> /// Recibir daño /// </summary> /// <param name="round">Munición</param> public virtual void TakeDamage(AmmoRound round) { if (round != null) { float penetration = round.Penetration; float damage = round.Damage; this.TakeDamage(damage, penetration); } }
/// <summary> /// Inicializar los proyectiles /// </summary> /// <param name="quantity">Cantidad de proyectiles</param> public void InitializeProyectiles(int quantity) { List <AmmoRound> roundList = new List <AmmoRound>(); for (int i = 0; i < quantity; i++) { AmmoRound round = new AmmoRound(); this.RegisterProjectile(round); roundList.Add(round); } }
/// <summary> /// Dispara un proyectil /// </summary> /// <param name="mass">Masa del proyectil</param> /// <param name="range">Rango de disparo</param> /// <param name="damage">Daño</param> /// <param name="penetration">Penetración del blindaje</param> /// <param name="position">Posición de origen del disparo</param> /// <param name="direction">Dirección del disparo</param> /// <param name="appliedGravity">Gravedad aplicada</param> /// <param name="radius">Radio</param> /// <param name="generateExplosion">Indica si la colisión generará una explosión</param> public void Fire(float mass, float range, float damage, float penetration, Vector3 position, Vector3 direction, Vector3 appliedGravity, float radius, bool generateExplosion) { // Buscar la primera bala disponible for (int i = 0; i < m_ProjectileData.Count; i++) { AmmoRound round = m_ProjectileData[i] as AmmoRound; if (round != null && !round.IsActive) { // Establecer el estado inicial de la bala con el tipo de munición actual y la posición por defecto round.Fire( mass, range, damage, penetration, position, direction, appliedGravity, radius, generateExplosion); break; } } }
/// <summary> /// Evento de proyectil en movimiento /// </summary> /// <param name="obj">Objeto</param> /// <param name="position">Posición</param> /// <param name="velocity">Velocidad</param> void Physics_OnProjectileMoved(AmmoRound ammo) { this.m_ParticleManager.AddParticle(ParticleSystemTypes.ProjectileTrail, ammo.Position, Vector3.Zero); }
/// <summary> /// Registra una primitiva de colisión que actuará como disparo /// </summary> /// <param name="proyectile">Primitiva de colisión</param> public void RegisterProjectile(AmmoRound proyectile) { this.m_ProjectileData.Add(proyectile); }