예제 #1
0
 /// <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);
     }
 }
예제 #2
0
 private void Start()
 {
     for (int i = 0; i < ammoRounds; i++)
     {
         AmmoRound round = new AmmoRound(new Particle(), ShotType.UNUSED, 0f);
         ammo[i] = round;
     }
 }
예제 #3
0
        void OnPrimitiveContacted(CollisionPrimitive primitive)
        {
            if (primitive is AmmoRound)
            {
                AmmoRound ammo = (AmmoRound)primitive;

                this.TakeDamage(ammo.Mass, ammo.Velocity, ammo.Position);
            }
        }
예제 #4
0
        /// <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);
            }
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
        /// <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;
                }
            }
        }
예제 #7
0
 /// <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);
 }
예제 #8
0
 /// <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);
 }