Ejemplo n.º 1
0
        public override void Attack()
        {
            Ray        raycastDir = ownerCamera.ScreenPointToRay(screenCenter);
            RaycastHit hitInfo;
            Vector3    lazerEnd = Vector3.zero;

            if (Physics.Raycast(raycastDir, out hitInfo, effectiveRange, raycastLayerMask))
            {
                lazerEnd = hitInfo.point;
                GameObject victim = hitInfo.collider.gameObject;
                if (victim.CompareTag("Player"))
                {
                    PlayerManager.playerToPlayerManager[victim].OnAttacked(damagePerSecond * Time.deltaTime);
                }
            }
            else
            {
                lazerEnd = raycastDir.origin + raycastDir.direction.normalized * effectiveRange;
            }

            lineRenderer.SetPosition(0, gunpoint.position);
            lineRenderer.SetPosition(1, lazerEnd);

            ItemUtils.Play(soundEffect);
        }
Ejemplo n.º 2
0
 public override void OnThrown()
 {
     foreach (var particleSystem in GetComponentsInChildren <ParticleSystem>())
     {
         particleSystem.Play();
     }
     GetComponent <Collider>().enabled = true;
     ItemUtils.FreezeRigidbodyWithoutPositionY(GetComponent <Rigidbody>());
     Picked = false;
 }
Ejemplo n.º 3
0
 public override void OnPickedUp(PlayerManager playerManager)
 {
     foreach (var particleSystem in GetComponentsInChildren <ParticleSystem>())
     {
         particleSystem.Stop();
     }
     GetComponent <Collider>().enabled = false;
     ItemUtils.FreezeRigidbody(GetComponent <Rigidbody>());
     Picked = true;
 }
Ejemplo n.º 4
0
        public override void CastCore()
        {
            playerManager = ItemUtils.ObtainPlayerManager(gameObject);
            if (playerManager == null)
            {
                Debug.Log("Skill is casted when not attached to any player.");
                return;
            }

            OpenNextDoor();
        }
Ejemplo n.º 5
0
        public override void OnThrown()
        {
            Collider collider = GetComponent <Collider>();

            if (collider != null)
            {
                collider.enabled = true;
            }
            ItemUtils.FreezeRigidbodyWithoutPositionY(GetComponent <Rigidbody>());
            Picked = false;
        }
Ejemplo n.º 6
0
 private void OnExplode()
 {
     Destroy(GetComponent <Rigidbody>());
     foreach (var renderer in GetComponentsInChildren <MeshRenderer>())
     {
         renderer.enabled = false;
     }
     GetComponent <Collider>().enabled = false;
     ItemUtils.Play(explodeSoundEffect);
     ItemUtils.Play(explodeViewEffect, true);
     ExplodeCore();
 }
Ejemplo n.º 7
0
        public override void OnThrown()
        {
            ownerPlayerManager = null;
            ownerCamera        = null;
            Collider collider = GetComponent <Collider>();

            if (collider != null)
            {
                collider.enabled = true;
            }
            ItemUtils.FreezeRigidbodyWithoutPositionY(GetComponent <Rigidbody>());
            Picked = false;
            ObjectPoolManager.INSTANCE.RecyclePool(bulletPool);
        }
Ejemplo n.º 8
0
        public override void ExplodeCore()
        {
            Vector3 explosionPos = transform.position;

            Collider[] victims = Physics.OverlapSphere(explosionPos, effectiveRadius, LayerMask.GetMask("Player"));
            foreach (var victim in victims)
            {
                if (ItemUtils.IsPlayer(victim.gameObject))
                {
                    PlayerManager playerManager = victim.GetComponent <PlayerManager>();
                    playerManager.OnHeal(centerHealing);
                }
            }
        }
Ejemplo n.º 9
0
        public override void OnPickedUp(PlayerManager playerManager)
        {
            Collider collider = GetComponent <Collider>();

            if (collider != null)
            {
                collider.enabled = false;
            }
            Rigidbody[] rigidbodys = GetComponents <Rigidbody>();
            foreach (var rigidbody in rigidbodys)
            {
                ItemUtils.FreezeRigidbody(rigidbody);
            }
            Picked = true;
        }
Ejemplo n.º 10
0
        public override void CastCore()
        {
            playerManager = ItemUtils.ObtainPlayerManager(gameObject);
            if (playerManager == null)
            {
                Debug.Log("Skill is casted when not attached to any player.");
                return;
            }

            GameObject           newBall = Instantiate(ball, playerManager.transform.position + playerManager.transform.forward * 2f, playerManager.camera.transform.rotation);
            SpaceExchangeBallObj ballObj = newBall.GetComponent <SpaceExchangeBallObj>();

            ballObj.owner = playerManager.gameObject;
            Destroy(newBall, lifetime);

            cooldownTimeLeft = CooldownTimeTotal;
        }
Ejemplo n.º 11
0
        public override void OnPickedUp(PlayerManager playerManager)
        {
            ownerPlayerManager = playerManager;
            ownerCamera        = playerManager.camera;
            Collider collider = GetComponent <Collider>();

            if (collider != null)
            {
                collider.enabled = false;
            }
            Rigidbody[] rigidbodys = GetComponents <Rigidbody>();
            foreach (var rigidbody in rigidbodys)
            {
                ItemUtils.FreezeRigidbody(rigidbody);
            }
            Picked = true;
            ObjectPoolManager.INSTANCE.FillPool(bulletPool);
        }
Ejemplo n.º 12
0
        public virtual void OnExplode()
        {
            Vector3 explosionPos = transform.position;

            Collider[] victims = Physics.OverlapSphere(explosionPos, effectiveRadius, LayerMask.GetMask("Default", "Player"));
            foreach (var victim in victims)
            {
                if (ItemUtils.IsPlayer(victim.gameObject))
                {
                    PlayerManager playerManager = victim.GetComponent <PlayerManager>();
                    playerManager.OnAttacked(Mathf.Lerp(centerDamage, 0, Vector3.Distance(victim.transform.position, explosionPos) / effectiveRadius));
                    playerManager.AddImpact(victim.transform.position - explosionPos, impactForce);
                }
                else
                {
                    victim.GetComponent <Rigidbody>()?.AddExplosionForce(impactForce, explosionPos, effectiveRadius, 2);
                }
            }
        }
Ejemplo n.º 13
0
        public override void CastCore()
        {
            playerManager = ItemUtils.ObtainPlayerManager(gameObject);
            if (playerManager == null)
            {
                Debug.Log("Skill is casted when not attached to any player.");
                return;
            }

            float angleBetweenTwoBall = 180f / ballNumOneShot;

            for (float curAngle = -90f; curAngle <= 90f; curAngle += angleBetweenTwoBall)
            {
                GameObject newBall = Instantiate(
                    ball,
                    playerManager.transform.position + playerManager.transform.forward * 5f,
                    playerManager.camera.transform.rotation * Quaternion.AngleAxis(curAngle, playerManager.camera.transform.up)
                    );
                LightningBallObj ballObj = newBall.GetComponent <LightningBallObj>();
                ballObj.owner = playerManager.gameObject;
                Destroy(newBall, lifetime);
            }
        }
Ejemplo n.º 14
0
        public void Reload(Action whenEmpty = null, Action whenReloadSucceed = null)
        {
            if (!Picked)
            {
                Debug.Log("Error: try to reload a gun that haven't been picked up.");
                return;
            }

            if (bulletStoreLeft <= 0)
            {
                whenEmpty?.Invoke();
                return;
            }

            if (bulletInMagazine < magazineCapacity)
            {
                int shortage     = magazineCapacity - bulletInMagazine;
                int toBeReloaded = bulletStoreLeft >= shortage ? shortage : bulletStoreLeft;
                bulletInMagazine += toBeReloaded;
                bulletStoreLeft  -= toBeReloaded;
                ItemUtils.Play(reloadSoundEffect);
                whenReloadSucceed?.Invoke();
            }
        }
Ejemplo n.º 15
0
        public virtual void ShootSingleBullet()
        {
            if (!IsWeaponValid())
            {
                return;
            }

            if (!UnlimitFire && IsMagazineEmpty())
            {
                return;
            }

            Ray raycastDir = ownerCamera.ScreenPointToRay(screenCenter);

            Debug.DrawRay(gunpoint.position, raycastDir.direction * 1000);
            Vector3 bulletDir = Vector3.zero;

            if (Physics.Raycast(raycastDir, out hitInfo, effectiveRange, raycastLayerMask))
            {
                bulletDir = (hitInfo.point - gunpoint.transform.position).normalized;
            }
            else
            {
                bulletDir = ownerCamera.transform.forward;
            }

            GameObject bullet = bulletPool.Next(false);

            bullet.transform.position = gunpoint.position;
            bullet.transform.rotation = Quaternion.LookRotation(bulletDir);
            SimpleBullet simpleBullet = bullet.GetComponent <SimpleBullet>();

            if (simpleBullet != null)
            {
                simpleBullet.damage = damage;
            }
            SimpleBall simpleBall = bullet.GetComponent <SimpleBall>();

            if (simpleBall != null)
            {
                simpleBall.damage = damage;
            }
            ExplosiveBall explosiveBall = bullet.GetComponent <ExplosiveBall>();

            if (explosiveBall != null)
            {
                explosiveBall.centerDamage = damage;
            }
            Rigidbody rigidbody = bullet.GetComponent <Rigidbody>();

            rigidbody.velocity        = Vector3.zero;
            rigidbody.angularVelocity = Vector3.zero;
            bullet.SetActive(true);
            rigidbody.AddForce(bullet.transform.forward * bulletSpeed, ForceMode.VelocityChange);
            bulletInMagazine--;

            ItemUtils.Play(shootSoundEffect);
            ItemUtils.Play(shootViewEffect, true);

            StartCoroutine(SendBackBullet(bullet));
        }