Ejemplo n.º 1
0
    public HitAbleInfo GetNearestPlayers(Vector3 globalPosition, bool useColliderBounds, float range = -1)
    {
        if (GameManager.Instance.PlayerCount == 0)
        {
            return(null);
        }

        HitAbleInfo nearest = null;

        float nearestDistance = -1;

        for (int i = 0; i < GameManager.Instance.GetPlayers().Length; i++)
        {
            if (GameManager.Instance.GetPlayers()[i] == null)
            {
                continue;
            }

            HitAble hitAble = GameManager.Instance.GetPlayers()[i];

            float distance = DistanceBetween(globalPosition, hitAble, useColliderBounds);
            if ((range > 0 && distance < range) && (nearestDistance == -1 || distance < nearestDistance))
            {
                if (nearest == null)
                {
                    nearest = new HitAbleInfo();
                }

                nearest.hitAble  = hitAble;
                nearest.distance = distance;
                nearestDistance  = distance;
            }
        }
        return(nearest);
    }
Ejemplo n.º 2
0
    public HitAbleInfo GetNearestHitAbles(Vector3 globalPosition, HitAbleType mask, bool useColliderBounds, float maxDistance = -1)
    {
        if (SpawnedHitAbles.Count == 0)
        {
            return(null);
        }

        HitAbleInfo nearest = new HitAbleInfo()
        {
            hitAble = null
        };

        float nearestDistance = -1;

        for (int i = 0; i < SpawnedHitAbles.Count; i++)
        {
            if (!SpawnedHitAbles[i].Transform)
            {
                continue;
            }
            if (!HitAble.CheckForBitInMask(SpawnedHitAbles[i].hitAble.hitAbleType, mask))
            {
                continue;
            }

            float distance = DistanceBetween(globalPosition, SpawnedHitAbles[i].hitAble, useColliderBounds);
            if ((maxDistance > 0 && distance < maxDistance) && (nearestDistance == -1 || distance < nearestDistance))
            {
                nearest          = SpawnedHitAbles[i];
                nearest.distance = distance;
                nearestDistance  = distance;
            }
        }
        return(nearest);
    }
Ejemplo n.º 3
0
 public static void TriggerFoundTarget(Transform sender, HitAbleInfo target)
 {
     if (FoundTarget != null)
     {
         FoundTarget(sender, target);
     }
 }
Ejemplo n.º 4
0
    void TryAttack()
    {
        attackTimer -= Time.deltaTime;
        if (target == null)
        {
            targetLocked = false;
        }
        if (targetLocked)
        {
            if (Vector3.Distance(target.Transform.position, transform.position) > attackDistance)
            {
                targetLocked = false;
            }
            else
            {
                lockTimer -= Time.deltaTime;
                if (lockTimer <= 0)
                {
                    target.hitAble.Damage(
                        new Damage()
                    {
                        amount = MyDamage + GameManager.Instance.CurrentDifficulty * DamagePerDifficulty,
                        type   = DamageType.MEELE,
                        other  = transform
                    });
                    //Effekt

                    targetLocked = false;
                }
            }
            attackTimer = attackTime;
        }
        else
        {
            if (attackTimer <= 0)
            {
                HitAbleInfo nearestHitAble = EntitySpawnManager.Instance.GetNearestHitAbles(transform.position, AttackHitAbleMask, true, attackDistance);
                if (nearestHitAble.Transform)
                {
                    lockTimer    = lockTime;
                    targetLocked = true;

                    if (anim)
                    {
                        anim.SetTrigger("Attack");
                    }

                    target = nearestHitAble;
                }
            }
        }
    }
Ejemplo n.º 5
0
 void SearchForNewTarget()
 {
     if (target == null)
     {
         HitAbleInfo[] playersInRange = EntitySpawnManager.Instance.GetPlayersInCircles(transform.position, findTargetDistance, true, true);
         for (int i = 0; i < playersInRange.Length; i++)
         {
             if (playersInRange[i].hitAble.ColliderIsOneOfYours(Physics2D.Raycast(transform.position, playersInRange[i].hitAble.ColliderCenter - transform.position, findTargetDistance, RaycastTargetMask).collider))
             {
                 target = playersInRange[i];
                 GameEventHandler.TriggerFoundTarget(transform, target);
             }
         }
     }
 }
Ejemplo n.º 6
0
    public void Explode()
    {
        HitAbleInfo[] HitAblesInRange = EntitySpawnManager.Instance.GetHitAbleInCircles(transform.position, HitAbleHitMask, ExplosionRange, true);
        //HitAbleInfo[] collider = EntitySpawnManager.Instance.GetHitAbleInCircles(transform.position, HitAbleHitMask, distance, true, false);
        for (int i = 0; i < HitAblesInRange.Length; i++)
        {
            HitAbleInfo item = HitAblesInRange[i];

            if (item == null || item.hitAble == null)
            {
                continue;
            }

            float distance = 0f;
            distance = item.distance;

            float damageMult = (ExplosionRange - distance);

            item.hitAble.Damage(new Damage()
            {
                type              = DamageType.EXPLOSION,
                amount            = damageMult * damage,
                DamageFromAPlayer = true,
                player            = player,
                other             = player.transform
            });
            item.hitAble.Hit(item.ColliderCenter, (item.ColliderCenter - transform.position), force);

            /*
             * Debug.Log("Distance: " + HitAblesInRange[i].distance);
             * HitAblesInRange[i].hitAble.Damage(new Damage()
             * {
             *  DamageFromAPlayer = true,
             *  player = player,
             *  amount = Mathf.Min(distance - HitAblesInRange[i].distance, 0.0f),
             *  type = DamageType.EXPLOSION,
             *  other = player.transform
             * });
             * HitAblesInRange[i].hitAble.Hit(HitAblesInRange[i].ColliderCenter, (HitAblesInRange[i].ColliderCenter - transform.position), force);
             * */
        }

        AudioEffectController.Instance.PlayOneShot(explosion, transform.position);
        EntitySpawnManager.Spawn(hitEffektPoolName, transform.position, Quaternion.identity, forceDirectSpawn: true, countEntity: false);

        EntitySpawnManager.Despawn(poolName, gameObject, false);
    }
Ejemplo n.º 7
0
 public void OnFoundTarget(Transform sender, HitAbleInfo newTarget)
 {
     if (target == null && newTarget != null && transform)
     {
         if (Vector3.Distance(sender.position, transform.position) > findTargetDistance)
         {
             target = newTarget;
         }
         else
         {
             target = new HitAbleInfo()
             {
                 Transform = sender
             };
             //Follow the sender, maybe we will find one then
         }
     }
 }
Ejemplo n.º 8
0
    // Update is called once per frame
    void Update()
    {
        if (GameManager.GamePaused)
        {
            return;
        }

        randomJumpTimer -= Time.deltaTime;

        findTargetTimer += Time.deltaTime;
        if (findTargetTimer > findTargetTime)
        {
            SearchForNewTarget();
            findTargetTimer = 0;
        }

        float currentMaxSpeed    = CurrentMaxSpeed;
        float currentSpeedChance = speedChange + SpeedChangePerDifficulty * GameManager.Instance.CurrentDifficulty;

        if (GotHit)
        {
            currentMaxSpeed    *= 1.5f;
            currentSpeedChance *= 1.5f;
        }

        if (target != null)
        {
            if (target.Transform == null)
            {
                target = null;
            }
            else
            {
                targetPos = target.Transform.position;
                if (Vector3.Distance(target.Transform.position, transform.position) > findTargetDistance)
                {
                    target = null;
                }
            }
        }
        else
        {
            if (Vector3.Distance(targetPos, transform.position) < distanceToTarget)
            {
                DumpPositionFinder();
            }
        }

        currentSpeed = Mathf.Lerp(currentSpeed, direction * currentMaxSpeed, currentSpeedChance * Time.deltaTime);

        TargetWalk();

        TryAttack();

        if (anim)
        {
            anim.SetFloat("Forward", Mathf.Abs(direction));
        }

        if (direction == 1 && transform.localScale.x == -1)
        {
            transform.localScale = new Vector3(1, transform.localScale.y, transform.localScale.z);
        }
        else if (direction == -1 && transform.localScale.x == 1)
        {
            transform.localScale = new Vector3(-1, transform.localScale.y, transform.localScale.z);
        }
    }