예제 #1
0
 public override void OnSkillByteHit(BattleNPC collisionNPC, float damageMultiplier = 1.0f)
 {
     base.OnSkillByteHit(collisionNPC, damageMultiplier);
     ParentSkill.SkillOwner.FlipBattleNPCSpriteX();
     ParentSkill.SkillSpriteRenderer.enabled = false;
     ParentSkill.AdvanceToNextByte();
 }
    public override void DoByte()
    {
        ApplyOnCastBuffs();

        // Check if byte should end
        bool interrupted = CheckInterruptedByDamage();
        bool channelOver = CheckChannelTime();

        if (interrupted || !channelOver)
        {
            ParentSkill.SkillSpriteRenderer.enabled = false;
            ParentSkill.AdvanceToNextByte();
            return;
        }

        bool intervalTime = _channelInterval(m_GlobalPreviousHit);

        if (intervalTime)
        {
            foreach (Target tempSignature in NPCTargets)
            {
                OnSkillByteHit(tempSignature.Focus, tempSignature.Multiplier);
            }
            m_GlobalPreviousHit = Time.fixedTime;
        }
    }
예제 #3
0
    public override void DoByte()
    {
        Hero owner = (Hero)ParentSkill.SkillOwner;

        owner.NPCCaretaker.IncrementMana(owner.HeroPiety);

        ParentSkill.AdvanceToNextByte();
    }
예제 #4
0
    public override void DoByte()
    {
        AnimateOwner(BattleGlobals.ANIMATE_NPC_ATTACK);

        ApplyOnCastBuffs();

        foreach (Target tempSignature in NPCTargets)
        {
            OnSkillByteHit(tempSignature.Focus, tempSignature.Multiplier);
        }

        ParentSkill.AdvanceToNextByte();
    }
예제 #5
0
 /*
  * Often called as SetSkillHitStatus(BattleNPC.TakeDamage(),BattleNPC.IsAlive())
  * will determine how this Skill affected the target
  * @param: dmg     -- amount of damage skill did
  * @param: isAlive -- whether or not effected target is alive
  */
 protected override void SetSkillHitStatus(int damage, bool aliveStatus)
 {
     if (!aliveStatus && (damage > 0))
     {
         ParentSkill.UpdateHitState(Skill.HitState.Kill);
         return;
     }
     if (damage != 0)
     {
         ParentSkill.UpdateHitState(Skill.HitState.Hit);
         return;
     }
     ParentSkill.UpdateHitState(Skill.HitState.Miss);
 }
예제 #6
0
    protected override void OnDisable()
    {
        base.OnDisable();
        ParentSkill.SkillSpriteRenderer.flipX = m_DefaultSpriteFlipX;

        if (ParentSkill.SkillOwner.CompareTag(BattleGlobals.TAG_FOR_ENEMIES))
        {
            ParentSkill.ToggleSpriteFlipX();
        }

        ParentSkill.SkillOwner.NPCRigidBody2D.velocity = Vector2.zero;
        ParentSkill.SkillOwner.ResetRigidBody2DRotation();

        MeleeCollider2D.enabled = false;
    }
예제 #7
0
 public virtual void OnSkillByteHit(BattleNPC collisionNPC, float damageMultiplier = 1.0f)
 {
     // Hit *a* target
     if (collisionNPC != null)
     {
         int damage = (m_Damage != null) ? _applyDamageToBattleNPC(collisionNPC, damageMultiplier) : 0;
         SetSkillHitStatus(damage, collisionNPC.Alive);
         ApplyOnHitBuffs(collisionNPC, damage);
         ParentSkill.RegisterCumulative(damage);
     }
     else // Missed Target
     {
         SetSkillHitStatus(0, true);
     }
 }
예제 #8
0
    public override void DoByte()
    {
        AnimateOwner(BattleGlobals.ANIMATE_NPC_ATTACK);

        ApplyOnCastBuffs();

        // Check if byte should end
        bool interrupted = CheckInterruptedByDamage();
        bool channelOver = CheckChannelTime();

        if (interrupted || !channelOver)
        {
            ParentSkill.SkillSpriteRenderer.enabled = false;
            ParentSkill.AdvanceToNextByte();
            return;
        }

        if (Homing)
        {
            m_TargetPosition = NPCTargets[BEAM_PRIMARY_TARGET].Focus.transform.position;
        }

        RaycastHit2D[] hit         = Physics2D.LinecastAll(m_BeamStart.transform.position, m_TargetPosition, m_TargetMask);
        Vector3        endPosition = m_TargetPosition;

        foreach (RaycastHit2D r in hit)
        {
            if (r.collider != null)
            {
                BattleNPC b = GameGlobals.AttachCheckComponentChildren <BattleNPC>(r.collider.gameObject);
                if ((b != null) && b.Alive)
                {
                    endPosition = r.point;
                    _checkConditionsOnSkillHit(b);
                    break;
                }
            }
        }
        GameGlobals.Stretch(m_BeamMiddle.gameObject, m_BeamStart.transform.position,
                            endPosition, m_PositiveDirection);
        m_BeamEnd.transform.position = endPosition;

        if (Homing)
        {
            _updateRotation();
        }
    }
    protected override void OnEnable()
    {
        base.OnEnable();

        m_WavesInFlight = 0;
        InFlightCount   = 0;
        m_SpawnOffset   = PROJ_SPAWN_OFFSET;
        m_WavesStarted  = false;

        bool ownerIsMonster = ParentSkill.SkillOwner.CompareTag(BattleGlobals.TAG_FOR_ENEMIES);

        if (ownerIsMonster)
        {
            ParentSkill.ToggleSpriteFlipX();
            m_SpawnOffset = -1 * m_SpawnOffset;
        }
    }
예제 #10
0
    protected override void OnEnable()
    {
        base.OnEnable();

        m_PreviousTarget     = new List <BattleNPC>();
        m_PreviousTargetTime = new List <float>();
        m_BeamStart.flipX    = m_DefaultStartFlipX;
        m_BeamEnd.flipX      = m_DefaultEndFlipX;

        Vector3 beamStartPos = BEAM_START_OFFSET;

        if (ParentSkill.SkillOwner.CompareTag(BattleGlobals.TAG_FOR_ENEMIES))
        {
            ParentSkill.ToggleSpriteFlipX();
            beamStartPos = -1 * beamStartPos;
        }
        beamStartPos += this.gameObject.transform.position;

        beamStart.tag                  = BattleGlobals.TAG_FOR_ENEMY_PROJ;
        m_PositiveDirection            = true;
        m_BeamStart.transform.position = beamStartPos;

        if ((NPCTargets != null))
        {
            BattleNPC primary = NPCTargets[BEAM_PRIMARY_TARGET].Focus;
            if (beamStartPos.x > primary.transform.position.x)
            {
                m_BeamStart.flipX   = !m_DefaultStartFlipX;
                m_BeamEnd.flipX     = !m_DefaultEndFlipX;
                m_PositiveDirection = false;
                m_BeamStart.tag     = BattleGlobals.TAG_FOR_HERO_PROJ;
            }
            m_TargetPosition = primary.StartPuck.transform.position;
        }

        _updateRotation();

        m_BeamStart.enabled  = true;
        m_BeamMiddle.enabled = true;
        m_BeamEnd.enabled    = true;
    }
    public override void DoByte()
    {
        Rigidbody2D parentRigid = ParentSkill.SkillOwner.NPCRigidBody2D;

        ApplyOnCastBuffs();

        // Whenever we're roughly where we started
        float absoluteDistance = Mathf.Abs(parentRigid.transform.position.sqrMagnitude -
                                           m_TargetPosition.sqrMagnitude);

        if (absoluteDistance < V3_EQUALS_THRESHOLD)
        {
            ParentSkill.SkillOwner.FlipBattleNPCSpriteX();
            ParentSkill.AdvanceToNextByte();
        }
        else
        {
            BattleGlobals.HomingMovement(parentRigid, m_TargetPosition,
                                         (ParentSkill.SkillOwner.NPCMoveSpeedMultiplier.GetBuffAffectedValue() * ByteSpeed));
        }
    }
예제 #12
0
 /*
  * Used to report HitStatus to Skill which is reported to VotingManager
  * Default is HitStatus doesn't apply (for non-damaging skills)
  */
 protected virtual void SetSkillHitStatus(int damage, bool aliveStatus)
 {
     ParentSkill.UpdateHitState(Skill.HitState.NotApplicable);
 }
 protected virtual void EndProjectileByte()
 {
     ParentSkill.SkillSpriteRenderer.enabled = false;
     ParentSkill.AdvanceToNextByte();
 }
예제 #14
0
    private IEnumerator _activateWait(float time)
    {
        yield return(new WaitForSeconds(time));

        ParentSkill.AdvanceToNextByte();
    }