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); }
public override void OnThrown() { foreach (var particleSystem in GetComponentsInChildren <ParticleSystem>()) { particleSystem.Play(); } GetComponent <Collider>().enabled = true; ItemUtils.FreezeRigidbodyWithoutPositionY(GetComponent <Rigidbody>()); Picked = false; }
public override void OnPickedUp(PlayerManager playerManager) { foreach (var particleSystem in GetComponentsInChildren <ParticleSystem>()) { particleSystem.Stop(); } GetComponent <Collider>().enabled = false; ItemUtils.FreezeRigidbody(GetComponent <Rigidbody>()); Picked = true; }
public override void CastCore() { playerManager = ItemUtils.ObtainPlayerManager(gameObject); if (playerManager == null) { Debug.Log("Skill is casted when not attached to any player."); return; } OpenNextDoor(); }
public override void OnThrown() { Collider collider = GetComponent <Collider>(); if (collider != null) { collider.enabled = true; } ItemUtils.FreezeRigidbodyWithoutPositionY(GetComponent <Rigidbody>()); Picked = false; }
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(); }
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); }
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); } } }
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; }
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; }
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); }
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); } } }
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); } }
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(); } }
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)); }