public override void Process() { switch (m_currentState) { case EAbilityState.MovingCharacter: if (TryToCastAbility(m_targetPos)) { } else { m_attacker.ServerCalculatePath(m_targetPos); } 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: m_animationTime -= Time.fixedDeltaTime; ProcessLaunchingTime(ELaunchingState.AnimationState); if (m_animationTime <= 0) { ChangeState(EAbilityState.AbilityEnds); } break; case EAbilityState.LaunchProjectileDelayed: break; default: break; } }
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; } }
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(); } }