Esempio n. 1
0
        internal override void Execute(WeaponEffectExecutionContext context)
        {
            var weaponBonus = context.Weapon.ParentGameObject.FindBehavior <WeaponBonusUpgrade>();

            if (weaponBonus?.Triggered ?? false)
            {
                //TODO: increase damage with context.Weapon.Template.WeaponBonuses
            }

            context.Weapon.CurrentTarget.DoDamage(DamageType, (Fix64)Damage, DeathType, context.Time);
        }
Esempio n. 2
0
        internal override void Execute(WeaponEffectExecutionContext context)
        {
            var projectileTemplate = ProjectileTemplate.Value;

            WeaponTemplate warheadTemplate;

            if (IsConvertedFromLegacyData)
            {
                warheadTemplate = new WeaponTemplate();
                warheadTemplate.ProjectileCollidesWith = ParentWeaponTemplate.ProjectileCollidesWith;
                warheadTemplate.Nuggets.AddRange(ParentWeaponTemplate.Nuggets.OfType <DamageNugget>());
            }
            else
            {
                warheadTemplate = WarheadTemplate.Value;
            }

            var projectileObject = context.GameContext.GameObjects.Add(
                projectileTemplate,
                context.Weapon.ParentGameObject.Owner);

            var launchBoneTransform = context.Weapon.ParentGameObject.Drawable.GetWeaponLaunchBoneTransform(
                context.Weapon.Slot, context.Weapon.WeaponIndex);

            projectileObject.SetTransformMatrix(launchBoneTransform.Value);

            projectileObject.SetWarhead(warheadTemplate);

            projectileObject.CurrentWeapon.SetTarget(context.Weapon.CurrentTarget);

            projectileObject.Speed = ParentWeaponTemplate.WeaponSpeed;

            if (IsConvertedFromLegacyData)
            {
                var bezierProjectileBehavior = projectileObject.FindBehavior <BezierProjectileBehavior>();
                if (bezierProjectileBehavior != null)
                {
                    bezierProjectileBehavior.DetonationFX = ParentWeaponTemplate.ProjectileDetonationFX?.Value;
                }

                var missileAIUpdate = projectileObject.FindBehavior <MissileAIUpdate>();
                if (missileAIUpdate != null)
                {
                    missileAIUpdate.DetonationFX = ParentWeaponTemplate.ProjectileDetonationFX?.Value;
                }
            }
        }
Esempio n. 3
0
        protected override void OnEnterStateImpl(TimeSpan enterTime)
        {
            base.OnEnterStateImpl(enterTime);

            if (Context.Weapon.UsesClip)
            {
                Context.Weapon.CurrentRounds--;
            }

            Context.GameContext.AudioSystem.PlayAudioEvent(
                Context.Weapon.Template.FireSound?.Value);

            var weaponEffectExecutionContext = new WeaponEffectExecutionContext(Context.Weapon, Context.GameContext);

            foreach (var nugget in Context.Weapon.Template.Nuggets)
            {
                nugget.Execute(weaponEffectExecutionContext);
            }

            TriggerWeaponFireFX();
        }
Esempio n. 4
0
 internal override void Execute(WeaponEffectExecutionContext context)
 {
     context.Weapon.CurrentTarget.DoDamage(DamageType, (Fix64)Damage, DeathType);
 }
Esempio n. 5
0
 internal virtual void Execute(WeaponEffectExecutionContext context)
 {
 }                                                                       // TODO: This should be abstract.