Ejemplo n.º 1
0
    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);
            }
        }
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
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; };
    }