Ejemplo n.º 1
0
 public AbilitySimpleTarget(MobaEntity attacker, MobaEntity target, Ability ability)
 {
     m_ability  = ability;
     m_attacker = attacker;
     m_attacker.StopAgent(false);
     m_attackerAbilities = m_attacker.GetComponent <EntityAbilities>();
     m_attackerAnimator  = m_attacker.GetComponent <EntityAnimator>();
     Target = target;
 }
Ejemplo n.º 2
0
 public AbilitySimpleTarget(MobaEntity attacker, MobaEntity[] targets, Ability ability)
 {
     m_targets  = targets;
     m_ability  = ability;
     m_attacker = attacker;
     m_attacker.StopAgent(false);
     m_attackerAbilities = m_attacker.GetComponent <EntityAbilities>();
     m_attackerAnimator  = m_attacker.GetComponent <EntityAnimator>();
     //m_attacker.EntityAbilities.IsCasting = true;
 }
Ejemplo n.º 3
0
 public AbilitySimplePosition(MobaEntity attacker, Vector2 targetPos, Ability ability)
 {
     m_targetPos = targetPos;
     m_ability   = ability;
     m_attacker  = attacker;
     m_attacker.StopAgent(false);
     m_attackerAbilities = m_attacker.GetComponent <EntityAbilities>();
     m_attackerAnimator  = m_attacker.GetComponent <EntityAnimator>();
     m_attacker.EntityAbilities.IsCasting = true;
 }
Ejemplo n.º 4
0
 public bool TryToCastAbility(Vector2 targetPos)
 {
     //Target Caculation
     if (m_ability.IsOnRange(m_attacker, targetPos))
     {
         Debug.Log("<color=blue>Moba Storm : </color> Casting Ability :" + m_ability.AbilityBase.Identifier);
         m_attacker.StopAgent(false);
         StartAbility();
         return(true);
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 5
0
    public override void Process()
    {
        switch (m_currentState)
        {
        case EAbilityState.MovingCharacter:
            m_updatePathRate -= Time.fixedDeltaTime;
            if (!Target.Dead)
            {
                Node node = Pathfinding.instance.GetNode(m_attacker.Position);
                if (TryToCastAbility(m_targets, m_ability) && (node.walkable || !node.walkable && node.Resident == m_attacker))
                {
                    ;
                }
                else
                {
                    if ((node.walkable || !node.walkable && node.Resident != m_attacker) && !m_ability.IsOnRange(m_attacker, Target.Position))
                    {
                        if (m_updatePathRate <= 0)
                        {
                            if (!node.walkable && node.Resident != m_attacker)
                            {
                                m_attacker.ServerCalculatePath(new Vector2(0, 0));
                                m_updatePathRate = GameDataManager.instance.GlobalConfig.m_targetPathUpdateRate;
                            }
                            else
                            {
                                m_attacker.ServerCalculatePath(Target.Position);
                                m_updatePathRate = GameDataManager.instance.GlobalConfig.m_targetPathUpdateRate;
                            }
                        }
                    }
                    else
                    {
                        if (node.walkable && m_attacker.FollowingPath)
                        {
                            m_attacker.StopAgent(true);
                        }
                    }
                }
            }
            else
            {
                m_attacker.EntityBehaviour.StopAllBehaviours();
            }
            break;

        case EAbilityState.CastingState:
            ProcessLaunchingTime(ELaunchingState.CastingState);

            m_castingTime -= Time.fixedDeltaTime;
            if (m_castingTime <= 0)
            {
                if (m_ability.AbilityBase.PlayAbilityAnimation)
                {
                    ChangeState(EAbilityState.PlayingAnimation);
                }
                else
                {
                    ChangeState(EAbilityState.AbilityEnds);
                }
            }
            break;

        case EAbilityState.PlayingAnimation:
            ProcessLaunchingTime(ELaunchingState.AnimationState);
            if (m_launchParticle == false && m_ability.AbilityBase.LaunchParticleIdentifier != "")
            {
                if (m_launchParticleTime <= 0)
                {
                    m_launchParticle = true;
                    m_attacker.EntityAbilities.RpcSpawnImpactParticle(m_ability.AbilityBase.LaunchParticleIdentifier, (int)m_ability.AbilityBase.LaunchPos);
                }
            }
            m_launchTime         -= Time.fixedDeltaTime;
            m_animationTime      -= Time.fixedDeltaTime;
            m_launchParticleTime -= Time.fixedDeltaTime;
            if (m_launchTime <= 0)
            {
                LaunchAbility();
            }
            if (m_animationTime <= 0)
            {
                ChangeState(EAbilityState.AbilityEnds);
            }
            break;

        case EAbilityState.LaunchProjectileDelayed:
            break;

        default:
            break;
        }
    }
Ejemplo n.º 6
0
 public override void Run()
 {
     m_attacker.StopAgent(m_goToIdle);
 }
Ejemplo n.º 7
0
    public override void Process()
    {
        m_updatePathRate -= Time.fixedDeltaTime;
        m_forcePathRate  -= Time.fixedDeltaTime;
        if (!Target.Dead)
        {
            if (!m_ability.IsOnRange(m_attacker, Target.Position))
            {
                if (m_updatePathRate <= 0)
                {
                    if (m_attacker.LockedNode != null)
                    {
                        m_attacker.LockedNode.Resident = null;
                        m_attacker.LockedNode          = null;
                    }
                    m_attacker.LockedNode = Pathfinding.instance.GeNearestNeighboursInRange(m_attacker, Target.Position, m_ability.Range);
                    m_attacker.ServerCalculatePath(m_attacker.LockedNode.m_position);
                    m_updatePathRate = GameDataManager.instance.GlobalConfig.m_pathUpdateRate;
                }
            }
            else
            {
                if (m_attacker.LockedNode == null)
                {
                    m_attacker.LockedNode = Pathfinding.instance.GeNearestNeighboursInRange(m_attacker, Target.Position, m_ability.Range);
                    m_attacker.ServerCalculatePath(m_attacker.LockedNode.m_position);
                    m_updatePathRate = GameDataManager.instance.GlobalConfig.m_pathUpdateRate;
                }
                if (m_forcePathRate <= 0) //&& Vector2.Distance(m_attacker.Position, Target.Position) < 0.5)
                {
                    if (m_forcePathRate <= 0)
                    {
                        if (m_attacker.LockedNode != null)
                        {
                            m_attacker.LockedNode.Resident = null;
                            m_attacker.LockedNode          = null;
                        }
                        Node currentNode = Pathfinding.instance.GetNode(m_attacker.Position);
                        if (currentNode.Resident == null)
                        {
                            currentNode.Resident  = m_attacker;
                            m_attacker.LockedNode = currentNode;
                            m_attacker.StopAgent(true);
                            m_forcePathRate = GameDataManager.instance.GlobalConfig.m_pathUpdateRate;
                        }
                        else
                        {
                            m_attacker.LockedNode = Pathfinding.instance.GeNearestNeighboursInRange(m_attacker, m_attacker.Position, m_ability.Range);
                            m_attacker.ServerCalculatePath(m_attacker.LockedNode.m_position);
                            m_forcePathRate = GameDataManager.instance.GlobalConfig.m_pathUpdateRate;
                        }
                    }
                }
            }

            if (!m_attacker.FollowingPath)
            {
                if (TryToCastAbility(m_targets, m_ability))
                {
                }
            }
        }
        else
        {
            m_attacker.EntityBehaviour.StopAllBehaviours();
        }
    }