void OnShoot() { m_ShootTime = Time.time; m_LastRootPosition = root.position; m_Velocity = transform.forward * speed; m_IgnoredColliders = new List <Collider>(); transform.position += m_ProjectileBase.inheritedMuzzleVelocity * Time.deltaTime; // Ignore colliders of owner Collider[] ownerColliders = m_ProjectileBase.owner.GetComponentsInChildren <Collider>(); m_IgnoredColliders.AddRange(ownerColliders); // Handle case of player shooting (make projectiles not go through walls, and remember center-of-screen trajectory) Transform spellCameraPosition; Transform SpellParentSocket; m_IsPlayerSpell = (m_ProjectileBase.owner.GetComponent <PlayerStatsController>() != null); if (m_IsPlayerSpell) { PlayerSpellsManager playerSpellsManager = m_ProjectileBase.owner.GetComponent <PlayerSpellsManager>(); SpellParentSocket = playerSpellsManager.SpellParentSocket.transform; spellCameraPosition = playerSpellsManager.spellCamera.transform; } else { EnemySpellsManager enemySpellsManager = m_ProjectileBase.owner.GetComponent <EnemySpellsManager>(); SpellParentSocket = enemySpellsManager.SpellParentSocket.transform; spellCameraPosition = enemySpellsManager.spellCamera.transform; } m_HasTrajectoryOverride = true; Vector3 cameraToMuzzle = m_ProjectileBase.initialPosition; m_TrajectoryCorrectionVector = Vector3.ProjectOnPlane(-cameraToMuzzle, SpellParentSocket.forward); if (trajectoryCorrectionDistance == 0) { transform.position += m_TrajectoryCorrectionVector; m_ConsumedTrajectoryCorrectionVector = m_TrajectoryCorrectionVector; } else if (trajectoryCorrectionDistance < 0) { m_HasTrajectoryOverride = false; } if (Physics.Raycast(spellCameraPosition.position, cameraToMuzzle.normalized, out RaycastHit hit, cameraToMuzzle.magnitude, hittableLayers, k_TriggerInteraction)) { if (IsHitValid(hit.collider)) { OnHit(hit.collider); } } }
void OnShoot() { Collider[] ownerColliders = m_ProjectileBase.owner.GetComponentsInChildren <Collider>(); m_IgnoredColliders = new List <Collider>(); m_IgnoredColliders.AddRange(ownerColliders); m_ObjectHeight = tip.position.y - root.position.y; m_InitialPosition = root.position + Vector3.down * (m_ObjectHeight + startingDepth); m_Velocity = Vector3.up * speed; Transform spellCameraPosition; Transform SpellParentSocket; m_IsPlayerSpell = (m_ProjectileBase.owner.GetComponent <PlayerStatsController>() != null); if (m_IsPlayerSpell) { ObjectLayers.instance.SetLayerRecursively(gameObject, ObjectLayers.instance.playerProjectile); PlayerSpellsManager playerSpellsManager = m_ProjectileBase.owner.GetComponent <PlayerSpellsManager>(); SpellParentSocket = playerSpellsManager.SpellParentSocket.transform; spellCameraPosition = playerSpellsManager.spellCamera.transform; } else { ObjectLayers.instance.SetLayerRecursively(gameObject, ObjectLayers.instance.enemyProjectile); EnemySpellsManager enemySpellsManager = m_ProjectileBase.owner.GetComponent <EnemySpellsManager>(); SpellParentSocket = enemySpellsManager.SpellParentSocket.transform; spellCameraPosition = enemySpellsManager.spellCamera.transform; } if (Physics.Raycast(spellCameraPosition.position, m_ProjectileBase.initialDirection.normalized, out RaycastHit hit, 100f, hittableLayers)) { if (IsHitValid(hit.collider)) { m_InitialPosition = hit.point + Vector3.down * (m_ObjectHeight + startingDepth); } } transform.position = m_InitialPosition; transform.rotation = Quaternion.Euler(0, 30, 0); }
public override void Init() { m_SpellManager = selfGameObject.GetComponent <EnemySpellsManager>(); m_SelfController = selfGameObject.GetComponent <EnemyCharacterController>(); m_Params = selfGameObject.GetComponent <StrategyParams>(); m_SelfStats = selfGameObject.GetComponent <CharacterStatsController>(); m_PlayerController = playerGameObject.GetComponent <PlayerCharacterController>(); m_PlayerStats = playerGameObject.GetComponent <PlayerStatsController>(); m_SelfStats.onHealthChanged += UpdateDamageTime; m_DelayBetweenAttacks = m_SelfController.delayBetweenAttacks; m_cdr = m_SelfStats.cdr.GetValue(); m_GFX = selfGameObject.transform.Find("GFX").gameObject; m_MobileHealthBar = m_GFX.transform.Find("MobileHealthBar").gameObject; m_EnemyGraphic = m_GFX.transform.Find("EnemyGraphic").gameObject; m_TheHangingGraphic = m_EnemyGraphic.transform.Find("Rope").gameObject; m_Level = LevelsManager.instance.level; m_Animator = selfGameObject.GetComponent <EnemyAnimator>(); m_PlayerInteractable = playerGameObject.GetComponent <InteractableBase>(); PlayerManager.instance.playerDamageTaken += (dmg) => { m_DamageBalanced += dmg; }; EnemyManager.instance.enemyDamageTaken += (dmg) => { m_DamageBalanced -= dmg; }; }