public override void OnAbilityTriggered(EvtAbilityStart evt)
        {
            HitExplodeTracingBulletMixinArgument abilityArgument = evt.abilityArgument as HitExplodeTracingBulletMixinArgument;
            uint nextNonSyncedRuntimeID = Singleton <RuntimeIDManager> .Instance.GetNextNonSyncedRuntimeID(6);

            this.CreateBullet(abilityArgument, nextNonSyncedRuntimeID, evt.otherID);
        }
        protected virtual void CreateBullet(HitExplodeTracingBulletMixinArgument arg, uint bulletRuntimeID, uint otherID)
        {
            string bulletTypeName = this.baseConfig.BulletTypeName;
            float  speed          = base.instancedAbility.Evaluate(this.baseConfig.BulletSpeed);

            if (arg != null)
            {
                if (arg.BulletName != null)
                {
                    bulletTypeName = arg.BulletName;
                }
                if (arg.RandomBulletNames != null)
                {
                    bulletTypeName = arg.RandomBulletNames[UnityEngine.Random.Range(0, arg.RandomBulletNames.Length)];
                }
                if (arg.BulletSpeed != null)
                {
                    speed = base.instancedAbility.Evaluate(arg.BulletSpeed);
                }
            }
            AbilityTriggerBullet bullet = Singleton <DynamicObjectManager> .Instance.CreateAbilityLinearTriggerBullet(bulletTypeName, base.actor, speed, this.baseConfig.Targetting, this.baseConfig.IgnoreTimeScale, bulletRuntimeID, base.instancedAbility.Evaluate(this.baseConfig.AliveDuration));

            if ((this.baseConfig.BulletEffect != null) && (this.baseConfig.BulletEffect.EffectPattern != null))
            {
                Singleton <EffectManager> .Instance.TriggerEntityEffectPattern(this.baseConfig.BulletEffect.EffectPattern, bullet.triggerBullet, this.baseConfig.BulletEffectGround);
            }
            this.InitBulletForward(bullet);
            this.InitBulletForwardWithArgument(bullet, arg, otherID);
            this._bulletAttackDatas.Add(bullet.runtimeID, DamageModelLogic.CreateAttackDataFromAttackerAnimEvent(base.actor, this.baseConfig.HitAnimEventID));
        }
 private void RemoteHandleInvokeEntry(AbilityInvokeEntry invokeEntry, int fromPeerID)
 {
     this._mixinArg = invokeEntry.GetArgument <MixinArg_HitExplodeMixin>(this._mixinArg);
     if (this._mixinArg.Action == HitExplodeBulletAction.Trigger)
     {
         HitExplodeTracingBulletMixinArgument arg = null;
         if (this._mixinArg.ArgMappingID != 0)
         {
             arg = IndexedConfig <HitExplodeTracingBulletMixinArgument> .Mapping.Get(this._mixinArg.ArgMappingID);
         }
         this.CreateBullet(arg, this._mixinArg.BulletID, this._mixinArg.OtherID);
     }
 }
        public override void OnAbilityTriggered(EvtAbilityStart evt)
        {
            if (base.selfIdentity.isAuthority)
            {
                RecordInvokeEntryContext             context;
                HitExplodeTracingBulletMixinArgument abilityArgument = evt.abilityArgument as HitExplodeTracingBulletMixinArgument;
                uint nextRuntimeID = Singleton <RuntimeIDManager> .Instance.GetNextRuntimeID(6);

                base.StartRecordMixinInvokeEntry(out context, 0);
                Offset <MixinArg_HitExplodeMixin> offset = MixinArg_HitExplodeMixin.CreateMixinArg_HitExplodeMixin(context.builder, HitExplodeBulletAction.Trigger, (abilityArgument == null) ? ((ushort)0) : ((ushort)IndexedConfig <HitExplodeTracingBulletMixinArgument> .Mapping.Get(abilityArgument)), nextRuntimeID, evt.otherID);
                context.Finish <MixinArg_HitExplodeMixin>(offset, AbilityInvokeArgument.MixinArg_HitExplodeMixin);
                this.CreateBullet(abilityArgument, nextRuntimeID, evt.otherID);
            }
        }
        public override void OnAbilityTriggered(EvtAbilityStart evt)
        {
            BaseMonoAvatar localAvatar = Singleton <AvatarManager> .Instance.GetLocalAvatar();

            if (localAvatar != null)
            {
                int count = localAvatar.SubAttackTargetList.Count;
                for (int i = 0; i < count; i++)
                {
                    string bulletTypeName = this.config.BulletTypeName;
                    HitExplodeTracingBulletMixinArgument abilityArgument = evt.abilityArgument as HitExplodeTracingBulletMixinArgument;
                    if (abilityArgument != null)
                    {
                        if (abilityArgument.BulletName != null)
                        {
                            bulletTypeName = abilityArgument.BulletName;
                        }
                        if (abilityArgument.RandomBulletNames != null)
                        {
                            bulletTypeName = abilityArgument.RandomBulletNames[UnityEngine.Random.Range(0, abilityArgument.RandomBulletNames.Length)];
                        }
                    }
                    AbilityTriggerBullet bullet = Singleton <DynamicObjectManager> .Instance.CreateAbilityLinearTriggerBullet(bulletTypeName, base.actor, base.instancedAbility.Evaluate(this.config.BulletPostionLinearSpeed), this.config.Targetting, this.config.IgnoreTimeScale, Singleton <DynamicObjectManager> .Instance.GetNextSyncedDynamicObjectRuntimeID(), -1f);

                    if ((this.config.BulletEffect != null) && (this.config.BulletEffect.EffectPattern != null))
                    {
                        Singleton <EffectManager> .Instance.TriggerEntityEffectPattern(this.config.BulletEffect.EffectPattern, bullet.triggerBullet, this.config.BulletEffectGround);
                    }
                    base._bulletAttackDatas.Add(bullet.runtimeID, DamageModelLogic.CreateAttackDataFromAttackerAnimEvent(base.actor, this.config.HitAnimEventID));
                    float   angle    = (180 / (count + 1)) * (i + 1);
                    float   num4     = base.instancedAbility.Evaluate(this.config.BulletPositionRadius);
                    float   duration = base.instancedAbility.Evaluate(this.config.BulletPositionDuration);
                    Vector3 vector   = Vector3.Cross(Vector3.up, base.entity.transform.forward);
                    vector = (Vector3)(Quaternion.AngleAxis(angle, base.entity.transform.forward) * vector);
                    Vector3 vector2  = (Vector3)(vector.normalized * num4);
                    Vector3 position = localAvatar.SubAttackTargetList[i].transform.position;
                    Vector3 up       = Vector3.up;
                    position += up;
                    bullet.triggerBullet.SetupPositioning(bullet.triggerBullet.transform.position, bullet.triggerBullet.transform.position + vector2, duration, base.instancedAbility.Evaluate(this.config.BulletSpeed), this.config.TracingLerpCoef, this.config.TracingLerpCoefAcc, position, this.config.PassBy);
                    this.InitBulletForward(bullet);
                }
            }
        }
        public override void OnAbilityTriggered(EvtAbilityStart evt)
        {
            this._bulletNum      = (this.config.Type != HitExplodeRandomPosBulletMixin.CreateType.CreateOne) ? this.config.RandomPosPool.Length : 1;
            this._bulletNumCount = 0;
            this._bulletName     = this.config.BulletTypeName;
            HitExplodeTracingBulletMixinArgument abilityArgument = evt.abilityArgument as HitExplodeTracingBulletMixinArgument;

            if (abilityArgument != null)
            {
                if (abilityArgument.BulletName != null)
                {
                    this._bulletName = abilityArgument.BulletName;
                }
                if (abilityArgument.RandomBulletNames != null)
                {
                    this._bulletName = abilityArgument.RandomBulletNames[UnityEngine.Random.Range(0, abilityArgument.RandomBulletNames.Length)];
                }
            }
            this._internalTimer = 0f;
            this.GeneralPosIndexOrderList(this.config.NeedShuffle);
        }
        protected override void InitBulletForwardWithArgument(AbilityTriggerBullet bullet, HitExplodeTracingBulletMixinArgument arg, uint otherID)
        {
            base.InitBulletForwardWithArgument(bullet, arg, otherID);
            if (this.config.IsRandomInit)
            {
                if (this.config.IsRandomInitCone)
                {
                    bullet.triggerBullet.transform.forward = (Vector3)((Quaternion.AngleAxis((float)UnityEngine.Random.Range(-40, 40), base.entity.transform.up) * Quaternion.AngleAxis((float)-UnityEngine.Random.Range(-10, 40), base.entity.transform.right)) * base.entity.transform.forward);
                }
                else
                {
                    bullet.triggerBullet.transform.forward = (Vector3)(Quaternion.AngleAxis((float)-UnityEngine.Random.Range(20, 0x2d), base.entity.transform.right) * base.entity.transform.forward);
                }
            }
            BaseMonoEntity entity = null;

            if (otherID != 0)
            {
                entity = Singleton <EventManager> .Instance.GetEntity(otherID);
            }
            int        num   = this._traceBullets.SeekAddPosition <TraceDelay>();
            TraceDelay delay = new TraceDelay {
                lineTimer       = this.config.TurnStartDelay,
                turnTimer       = this.config.TraceStartDelay,
                bulletID        = bullet.runtimeID,
                subAttackTarget = entity
            };

            this._traceBullets[num] = delay;
        }
        public override void OnAbilityTriggered(EvtAbilityStart evt)
        {
            HitExplodeTracingBulletMixinArgument abilityArgument = evt.abilityArgument as HitExplodeTracingBulletMixinArgument;

            this.CreateBullet(abilityArgument, Singleton <DynamicObjectManager> .Instance.GetNextSyncedDynamicObjectRuntimeID(), evt.otherID);
        }
 protected virtual void InitBulletForwardWithArgument(AbilityTriggerBullet bullet, HitExplodeTracingBulletMixinArgument arg, uint otherID)
 {
     if ((arg != null) && (arg.XZAngleOffset != 0f))
     {
         bullet.triggerBullet.transform.Rotate(new Vector3(0f, arg.XZAngleOffset, 0f));
     }
 }