Exemple #1
0
        private void ApplyBuff(MeleeArc arc, string buff)
        {
            if (buff != null)
            {
                if (!BuffRegistry.All.TryGetValue(buff, out var info))
                {
                    Log.Error($"Unknown buff {buff}");

                    return;
                }

                arc.Color = info.Effect.GetColor();

                arc.OnHurt += (p, e) => {
                    if (e.TryGetComponent <BuffsComponent>(out var buffs))
                    {
                        var b = BuffRegistry.Create(buff);

                        if (InfiniteBuff)
                        {
                            b.Infinite = true;
                        }
                        else
                        {
                            b.TimeLeft = b.Duration = BuffDuration;
                        }

                        buffs.Add(b);
                    }
                };
            }
        }
Exemple #2
0
        public void ModifyProjectile(MeleeArc arc)
        {
            if (Rnd.Float() > Chance + Run.Luck * 0.2f)
            {
                return;
            }

            arc.Mines   = Mine;
            arc.Damage *= Damage;

            if (Math.Abs(Scale - 1) > 0.01f)
            {
                arc.Width  *= Scale;
                arc.Height *= Scale;

                // arc.AdjustSize();
            }

            if (RandomEffect)
            {
                if (lastEffect == -1 || (EffectChangeSpeed > 0 && Engine.Time - lastEffectTime >= EffectChangeSpeed))
                {
                    lastEffect     = Rnd.Int(effects.Length);
                    lastEffectTime = Engine.Time;
                }

                ApplyBuff(arc, effects[lastEffect]);

                return;
            }

            if (BuffToApply != null)
            {
                ApplyBuff(arc, BuffToApply);
            }
        }
Exemple #3
0
        public override void Use(Entity entity, Item item)
        {
            entity.GetComponent <AudioEmitterComponent>().EmitRandomizedPrefixed(AttackSound, 4);

            var arc = new MeleeArc {
                Owner     = entity,
                LifeTime  = LifeTime,
                Damage    = Damage * (item.Scourged ? 1.5f : 1),
                Width     = W,
                Height    = H,
                Sound     = HitSound,
                Position  = entity.Center,
                Knockback = Knockback,
                Angle     = entity.AngleTo(entity.GetComponent <AimComponent>().RealAim) + Angle
            };

            entity.HandleEvent(new MeleeArc.CreatedEvent {
                Arc   = arc,
                Owner = entity,
                By    = item
            });

            entity.Area.Add(arc);
        }
Exemple #4
0
    IEnumerator CoUpdate()
    {
        myTransform = this.transform;
        baseYPosition = myTransform.localPosition.y;
        if(meleeRange == null)
            meleeRange = myTransform.GetComponentInChildren(typeof(MeleeArc)) as MeleeArc;

        if(seek == null)
                seek = GetComponent(typeof(AIFollow)) as AIFollow;

        if(movement == null)
            movement = GetComponent(typeof(CharacterController)) as CharacterController;

        yield return new WaitForSeconds(2f);
        //Initialize AI
        while(true)
        {
            if(myHealth.IsDead)
            {
                behave = AIBehavior.die;
            }
            else
            {
                Vector3 horizontalVelocity = new Vector3(movement.velocity.x, 0, movement.velocity.z);
                if(horizontalVelocity.magnitude > 0.1f )
                {
                    if(horizontalVelocity.magnitude > 2.5f)
                        animations.CrossFade(runAnimation);
                    else
                        animations.CrossFade(walkAnimation);
                }
                else
                    animations.CrossFade(idleAninimation);

                if(CanSeePlayer() || myTarget != null)
                {
                    stillLooking = true;
                    if(CanSeePlayer() )
                    {
                        countTilLostTarget = 0;
                    }
                    if(!CanSeePlayer() || !InMeleeRange())
                        FlipForward();
                    else
                        behave = AIBehavior.attack;
                }
                if(!CanSeePlayer() && myTarget != null && stillLooking && switchedDirections)
                {
                    StartCoroutine(FlipDirectionDelay() );
                    switchedDirections = false;
                    forwardDirection.eulerAngles = new Vector3(0, forwardDirection.eulerAngles.y*yRotationMod, 0);
                    if( (forwardDirection.eulerAngles.y < -80 || forwardDirection.eulerAngles.y > 240) && forwardDirection.eulerAngles.z < 100)
                    {
                        forwardDirection.eulerAngles = new Vector3(0, forwardDirection.eulerAngles.y, 180);
                    }
                    else
                    {
                        forwardDirection.eulerAngles = new Vector3(0, forwardDirection.eulerAngles.y, 0);
                    }
                }
                else if(countTilLostTarget >= lostTargetNumber)
                {
                    myTarget = null;
                }

                forwardDirection.position = myTransform.position;

            }
            //Debug.Log("State: "+ ((AIBehavior) behave).ToString("F") );
            switch(behave)
            {
            case AIBehavior.idle:
                StartCoroutine(Idle() );
                break;
            case AIBehavior.pursue:
                StartCoroutine(Pursue() );
                break;
            case AIBehavior.attack:
                StartCoroutine(Attack() );
                break;
            case AIBehavior.flee:
                StartCoroutine(Flee() );
                break;
            case AIBehavior.die:
                StartCoroutine(Die() );
                break;
            }
            yield return new WaitForSeconds(updateDelayTime);
        }
    }