Exemplo n.º 1
0
 void Update()
 {
     changeDirCooldown -= Time.deltaTime;
     if ((chasing == false) || (target == null))
     {
         processIdleState();
     }
     else
     {
         processChaseInRangeState();
     }
     //hit boxes if any
     RaycastHit2D[] hits = Physics2D.RaycastAll(this.transform.position + new Vector3(0, 1, 0), new Vector3(direction, 0, 0), 1f, movement.layersToSense);
     foreach (RaycastHit2D hit in hits)
     {
         DamageAcceptor da = hit.collider.gameObject.GetComponent <DamageAcceptor>();
         if (da != null)
         {
             if (Time.time - prevAttackTime > 0.5f)
             {
                 prevAttackTime = Time.time;
                 DoDamage(da, 5, Vector2.up * 20000);
             }
         }
     }
 }
Exemplo n.º 2
0
 public void ReportKill(DamageAcceptor killed)
 {
     //AcceptorAndCooldown anc = acceptorsInZone.Find(x => x.da == killed);
     //if (anc != null)
     {
         //acceptorsInZone.Remove(anc);
     }
 }
Exemplo n.º 3
0
 public void ReportKill(DamageAcceptor killed)
 {
     //slevel.IncreaseLevel(UnityEngine.Random.Range(1,5));
     GameObject popup = Instantiate(Resources.Load("KillPopup", typeof(GameObject)),
                                    ((Component)killed).gameObject.transform.position + Vector3.up * 2, Quaternion.identity,
                                    gpParent.transform)
                        as GameObject;
 }
Exemplo n.º 4
0
 protected virtual void DoDamage(DamageAcceptor acceptor, float damage, Vector2 knockback)
 {
     Registry.instance.damageAcceptors.doTargetDamage(
         acceptor,
         GetComponentInParent <Tag>().gameObject,
         damage,
         "normal",
         knockback);
 }
Exemplo n.º 5
0
 /*void OnTriggerExit2Dbcp(Collider2D other)
  * {
  *  DamageAcceptor otherDA = other.gameObject.GetComponent<DamageAcceptor>();
  *  if (otherDA != null)
  *  {
  *      AcceptorAndCooldown anc = acceptorsInZone.Find(x => x.da == otherDA);
  *      if (anc != null)
  *      {
  *          acceptorsInZone.Remove(anc);
  *      }
  *  }
  * }*/
 void DoDamage(DamageAcceptor acceptor, float damage, Vector2 knockback)
 {
     Registry.instance.damageAcceptors.doTargetDamage(
         acceptor,
         gameObject,
         damage,
         "normal",
         knockback);
 }
Exemplo n.º 6
0
    /*
     * void Update()
     * {
     *  //UpdateCooldowns();
     * }
     * void UpdateCooldowns()
     * {
     *  foreach(AcceptorAndCooldown anc in acceptorsInZone)
     *  {
     *      if(anc.da == null)
     *      {
     *          acceptorsInZone.Remove(anc);
     *          break;
     *      }
     *      anc.cooldown -= Time.deltaTime;
     *      if(anc.cooldown <= 0)
     *      {
     *          anc.cooldown = 1f;
     *          DoDamage(anc.da, damage, new Vector2(0,0));
     *          break;
     *      }
     *  }
     * }*/
    void OnTriggerStay2D(Collider2D other)
    {
        DamageAcceptor otherDA = other.gameObject.GetComponent <DamageAcceptor>();

        if (otherDA != null)
        {
            //acceptorsInZone.Add(new AcceptorAndCooldown(otherDA));
            DoDamage(otherDA, damage, new Vector2((other.transform.position - transform.position).normalized.x * knockback.x, knockback.y));
        }
    }
Exemplo n.º 7
0
    /*
     * public void doTargetDamage(DamageAcceptor damageAcceptor, GameObject argInSource, float argInDmg, string argInDamageType, Vector2 argInKnockBack)
     * {
     *  if (damageAcceptor != null)
     *  {
     *      if (((Component)damageAcceptor).gameObject != argInSource)
     *      {
     *              DamageArgs args = new DamageArgs();
     *              args.knockback = argInKnockBack;
     *              args.dmg = argInDmg;
     *              args.source = argInSource;
     *              args.type = argInDamageType;
     *
     *              damageAcceptor.acceptDamage(args);
     *      }
     *  }
     * }*/

    public void doTargetDamage(DamageAcceptor damageAcceptor, GameObject argInSource, float argInDmg, string argInDamageType, Vector2 argInKnockBack /*,  List<string> argInIgnoreGroups*/)
    {
        if (damageAcceptor != null)
        {
            if (((Component)damageAcceptor).gameObject != argInSource)
            {
                //if (!(damageAcceptor.groups.Intersect(argInIgnoreGroups).Any()))
                {
                    DamageArgs args = new DamageArgs();
                    args.knockback = argInKnockBack;
                    args.dmg       = argInDmg;
                    args.source    = argInSource;
                    args.type      = argInDamageType;

                    damageAcceptor.acceptDamage(args);
                }
            }
        }
    }
Exemplo n.º 8
0
    public override bool Engage(Vector3 newTarget)
    {
        bool result = false;

        if (cooldown <= 0f)
        {
            //LineRenderer lr = GetComponentInChildren<LineRenderer>();
            Vector3[] positions = new Vector3[2];
            positions[0] = this.transform.position;
            positions[1] = this.transform.position + ((newTarget - this.transform.position).normalized * 100);

            cooldown = (1f / fireRate);
            audioSource.Play();
            RaycastHit2D[] hits = Physics2D.RaycastAll(positions[0], positions[1] - positions[0], range);

            //lazer effect
            /*GameObject lazer =*/ Instantiate(Resources.Load("Lazer", typeof(GameObject)),
                                               barrel.transform.position,
                                               Quaternion.FromToRotation(Vector3.right, newTarget - this.transform.position),
                                               gpParent.transform) /* as GameObject*/;
            ////

            foreach (RaycastHit2D hit in hits)
            {
                DamageAcceptor acceptor = hit.collider.gameObject.GetComponent <DamageAcceptor>();
                if ((acceptor != null) && (acceptor != this.GetComponentInParent <DamageAcceptor>()))
                {
                    registry.damageAcceptors.doTargetDamage(
                        acceptor,
                        GetComponentInParent <Tag>().gameObject,
                        damage,
                        "normal",
                        new Vector2(0, 0));
                }
            }
            result = true;
        }
        return(result);
    }
Exemplo n.º 9
0
 bool CanMoveTo(float direction)
 {
     sideTouch = false;
     //if forward is free
     RaycastHit2D[] hits = Physics2D.RaycastAll(transform.position + new Vector3(0f, 0.3f, 0f), new Vector3(Mathf.Sign(direction), 0f, 0f), 2f);
     foreach (RaycastHit2D hit in hits)
     {
         if (hit.collider.GetComponent <PlayerTag>())
         {
             if ((hit.distance < 0.6f))
             {
                 DamageAcceptor da = hit.collider.GetComponent <DamageAcceptor>();
                 if ((da != null))
                 {
                     if (Time.time - prevAttackTime > 2f)
                     {
                         prevAttackTime = Time.time;
                         DoDamage(da, damage, direction * 3000 * Vector2.right);
                     }
                 }
             }
         }
         if (hit.collider.gameObject.GetComponent <BorderTag>() != null)
         {
             sideTouch = true;
         }
     }
     if (!sideTouch)
     {
         //if forward-down is a floor
         if (true == Physics2D.Raycast(transform.position + new Vector3(Mathf.Sign(direction) * 1, 0.2f, 0), new Vector3(0, -1, 0), 0.5f, layersToSense))
         {
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 10
0
    public override bool Engage(Vector3 newTarget)
    {
        bool result = false;

        if ((Time.time - previousShotTime) >= (1f / fireRate))
        {
            if (engineAudio.isPlaying && engineAudio.clip == gasSound)
            {
                //if (engineAudio.volume < 1)
                {
                    //engineAudio.volume = Mathf.Clamp01(engineAudio.volume + Time.deltaTime * 30)/2;
                }
            }
            else
            {
                engineAudio.clip = gasSound;
                engineAudio.loop = true;
                engineAudio.Play();
                //engineAudio.volume = 0f;
            }

            gasCooldown      = 0.3f;
            previousShotTime = Time.time;

            Collider2D[] cols  = new Collider2D[5];
            int          count = GetComponent <Collider2D>().GetContacts(cols);
            if (count > 0)
            {
                cutAudio.Play();
                GameObject bulletHitEffect = Instantiate(Resources.Load("BulletHitEffect", typeof(GameObject)), gpParent.transform) as GameObject;
                bulletHitEffect.transform.position = new Vector3(barrel.transform.position.x, barrel.transform.position.y, -2f);

                List <DamageAcceptor> acceptors = new List <DamageAcceptor>();
                for (int i = 0; (i < count) && (i < cols.Length); i++)
                {
                    DamageAcceptor acceptor = cols[i].gameObject.GetComponent <DamageAcceptor>();

                    if (/*(cols[i].isTrigger) ||*/
                        ((acceptor != null) && (acceptor == this.GetComponentInParent <DamageAcceptor>())) ||
                        (cols[i].usedByEffector))
                    {
                        continue;
                    }

                    if (acceptor != null)
                    {
                        if (acceptors.Contains(acceptor))
                        {
                            continue;
                        }

                        acceptors.Add(acceptor);
                        registry.damageAcceptors.doTargetDamage(
                            acceptor,
                            GetComponentInParent <Tag>().gameObject,
                            damage,
                            "melee",
                            (newTarget - this.transform.position).normalized * 2000f);

                        //if ((((Component)acceptor).gameObject.GetComponent<StickStats>() != null) || (((Component)acceptor).gameObject.GetComponent<Ragdoll>() != null))
                        {
                            //bulletHitEffect.GetComponent<ParticleSystem>().startColor = Color.red;
                            //bulletHitEffect.GetComponent<ParticleSystem>().startSize *= 2;
                        }
                    }
                }
                acceptors.Clear();
            }
            result = true;
        }

        return(result);
    }
Exemplo n.º 11
0
 public AcceptorAndCooldown(DamageAcceptor argInAcceptor)
 {
     da       = argInAcceptor;
     cooldown = 1f;
 }
Exemplo n.º 12
0
 public void RemoveDamageAcceptor(DamageAcceptor argInDamageAcceptor)
 {
     damageAcceptors.RemoveAll(x => x == argInDamageAcceptor);
 }
Exemplo n.º 13
0
 public void AddDamageAcceptor(DamageAcceptor argInDamageAcceptor)
 {
     damageAcceptors.Add(argInDamageAcceptor);
 }
    //bool fired = false;
    void ProcessAttackState()
    {
        preAttackCooldown -= Time.deltaTime;
        if (preAttackCooldown <= 0f)
        {
            preAttackCooldown = 0f;
            //anim.SetTrigger("Attack");

            /*Vector3 translation = (attackDirection).normalized * Time.deltaTime * attackMoveSpeed * Mathf.Sin(90f * (1 - passedAttackDistance/attackDistance) );
             * transform.position += translation;
             * //transform.Translate(translation);
             * passedAttackDistance += translation.magnitude;
             * if (passedAttackDistance >= attackDistance)
             * {
             *  passedAttackDistance = 0f;
             *  attackCooldown = 1 / attackFrequency;
             *  preAttackCooldown = preAttackTime;
             * }*/
            passedFireTime += Time.deltaTime;
            if (passedFireTime <= 1f)
            {
                ParticleSystem fire = weap.GetComponentInChildren <ParticleSystem>();//Instantiate(firePrefab, transform.position, Quaternion.identity, transform);
                fire.Play();
                //Debug.Log("FIRE_Flamethrower");

                RaycastHit2D[] hits = Physics2D.RaycastAll(fire.transform.position, fire.transform.right * Mathf.Sign(this.transform.localScale.x), passedFireTime * fire.startSpeed);
                Debug.DrawLine(fire.transform.position, fire.transform.position + (fire.transform.right * Mathf.Sign(this.transform.localScale.x) * passedFireTime * fire.startSpeed), Color.green);

                foreach (RaycastHit2D hit in hits)
                {
                    DamageAcceptor da = hit.collider.GetComponent <DamageAcceptor>();
                    if (da != null)
                    {
                        DoDamage(da, damage, fire.transform.right * Mathf.Sign(this.transform.localScale.x) * knockback);
                    }
                }
            }
            else
            {
                passedFireTime = 0f;
                //fired = false;
                ParticleSystem fire = weap.GetComponentInChildren <ParticleSystem>();//Instantiate(firePrefab, transform.position, Quaternion.identity, transform);
                fire.Stop();
                attackCooldown    = 1 / attackFrequency;
                preAttackCooldown = preAttackTime;

                weap.transform.rotation = Quaternion.identity;
                anim.SetFloat("LookAngle", 0);
            }
        }
        else
        {
            //anim.SetTrigger("PreAttack");

            // flamethrower rotate
            float degreesToRotate = Quaternion.FromToRotation(Vector3.right * Mathf.Sign(transform.localScale.x), (target.transform.position + Vector3.up) - weap.transform.position).eulerAngles.z;
            weap.transform.rotation = Quaternion.AngleAxis(degreesToRotate, Vector3.forward);

            lookAtDirection           = Mathf.Sign(target.transform.position.x - transform.position.x);
            this.transform.localScale = new Vector3(lookAtDirection, 1, 1);
            transform.rotation        = Quaternion.identity;

            float lookAngleForAnimator = weap.transform.rotation.eulerAngles.z;
            if (Mathf.Abs(lookAngleForAnimator) > 90)
            {
                lookAngleForAnimator -= 360;
            }
            lookAngleForAnimator *= Mathf.Sign(transform.localScale.x);
            anim.SetFloat("LookAngle", lookAngleForAnimator);
        }
    }
Exemplo n.º 15
0
    public override bool Engage(Vector3 newTarget)
    {
        bool result = false;

        if ((Time.time - previousShotTime) >= (1f / fireRate))
        {
            previousShotTime = Time.time;
            mgShootEffect.Play();
            float localdmg = damage;

            RaycastHit2D[] hits = Physics2D.RaycastAll(this.transform.position, newTarget - this.transform.position, 30f);
            Array.Sort(hits, delegate(RaycastHit2D hit1, RaycastHit2D hit2)
                       { return(hit1.distance.CompareTo(hit2.distance)); });
            List <DamageAcceptor> acceptors = new List <DamageAcceptor>();
            foreach (RaycastHit2D hit in hits)
            {
                DamageAcceptor acceptor = hit.collider.gameObject.GetComponent <DamageAcceptor>();

                if ( /*(hit.collider.isTrigger) ||*/
                    ((acceptor != null) && (acceptor == this.GetComponentInParent <DamageAcceptor>())) ||
                    (hit.collider.usedByEffector) ||
                    (hit.collider.gameObject == this.gameObject))
                {
                    continue;
                }

                GameObject bulletHitEffect = Instantiate(Resources.Load("BulletHitEffect", typeof(GameObject)), gpParent.transform) as GameObject;
                bulletHitEffect.transform.position = new Vector3(hit.point.x, hit.point.y, -2f);

                if (acceptor != null)
                {
                    if (acceptors.Contains(acceptor))
                    {
                        continue;
                    }

                    acceptors.Add(acceptor);
                    registry.damageAcceptors.doTargetDamage(
                        acceptor,
                        GetComponentInParent <Tag>().gameObject,
                        (int)localdmg,
                        "normal",
                        (newTarget - this.transform.position).normalized * 500f);

                    //if ( (((Component)acceptor).gameObject.GetComponent<StickStats>() != null) || (((Component)acceptor).gameObject.GetComponent<Ragdoll>() != null))
                    {
                        //bulletHitEffect.GetComponent<ParticleSystem>().startColor = Color.red;
                        //bulletHitEffect.GetComponent<ParticleSystem>().startSize *= 2;
                    }
                }
                if (!hit.collider.isTrigger)
                {
                    localdmg *= 0.8f;
                }
                if (localdmg <= damage / 10)
                {
                    break;
                }
            }
            acceptors.Clear();
            audioSource.Play();
            result = true;
        }

        return(result);
    }