Example #1
0
	public static void sTargeting_AsSlot(AsPlayerFsm _playerFsm, Tbl_Skill_Record _skillRecord)// use targetting slot only 
	{
		if(_playerFsm.CheckMap_Village() == true)
			return;
		
		if( null == _playerFsm.Target) // no entity is targeted
		{
			if(_skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
			{
				AsBaseEntity target = _playerFsm.HostileEntityExistInRange( AsTableManager.Instance.GetTbl_GlobalWeight_Record( 30).Value * 0.01f);
				_playerFsm.Target = target;
			}
		}
		else // taget is exist
		{
			if( _playerFsm.Target.FsmType == eFsmType.NPC || _playerFsm.Target.FsmType == eFsmType.COLLECTION)
			{
				if(_skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
				{
					AsBaseEntity target = _playerFsm.MonsterExistInRange( AsTableManager.Instance.GetTbl_GlobalWeight_Record( 30).Value * 0.01f);
					if( target != null && target.CheckObjectMonster() == false)
						_playerFsm.Target = target;
				}
			}
			else if(_playerFsm.Target.FsmType == eFsmType.OTHER_USER)
			{
				if(CheckOtherUserIsEnemy(_playerFsm.Target) == false)
				{
					if( ( null != _skillRecord) && ( eSkillAutoTarget.Disable != _skillRecord.SkillAutoTarget))
					{
						if(_skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true &&
							_skillRecord.CheckPotencyTypeIncludeHeal() == false)
						{
							AsUserEntity targetUser = _playerFsm.Target as AsUserEntity;
							AsBaseEntity targetUserTarget = targetUser.GetGetterTarget();
							if( targetUserTarget != null && targetUserTarget.FsmType == eFsmType.MONSTER)
								_playerFsm.Target = targetUserTarget;
							else
								_playerFsm.Target = _playerFsm.MonsterExistInRange( AsTableManager.Instance.GetTbl_GlobalWeight_Record( 30).Value * 0.01f);
						}
					}
				}
			}
			else if( _playerFsm.Target.FsmType == eFsmType.MONSTER)
			{
				if( _skillRecord.Skill_Type == eSKILL_TYPE.SlotBase && AsGameMain.GetOptionState(OptionBtnType.OptionBtnType_TargetChange) == true) // target already chose & slot base touched
				{
					float maxDist = AsTableManager.Instance.GetTbl_GlobalWeight_Record( 138).Value * 0.01f;
					float angle = AsTableManager.Instance.GetTbl_GlobalWeight_Record( 139).Value;
					List<AsBaseEntity> listEntities = AsEntityManager.Instance.GetHostileEntityInRange( _playerFsm.transform.position, 0.01f, maxDist);
					Debug.Log("TargetDecider::sTargeting_AsSlot: listEntities.Count = " + listEntities.Count);
					SortedDictionary<float, AsBaseEntity> angledEntities = GetEntityDicInAngleRanged( _playerFsm.transform.forward, _playerFsm.transform.position, angle, listEntities);
					Debug.Log("TargetDecider::sTargeting_AsSlot: angledEntities.Count = " + angledEntities.Count);
					
					foreach(KeyValuePair<float, AsBaseEntity> pair in angledEntities)
					{
						Debug.Log("TargetDecider::sTargeting_AsSlot: angledEntities angle = " + pair.Key);
					}
					
					int count = 0;
					AsBaseEntity selectedEntity = null;
					foreach(KeyValuePair<float, AsBaseEntity> pair in angledEntities)
					{
						if( _playerFsm.Target == pair.Value)
							continue;
						
						if( (count == 0 && pair.Key > 0) ||
							count > 0)
						{
							selectedEntity = pair.Value;
							break;
						}
						
						count++;
					}
					
					if( selectedEntity != null)
					{
						_playerFsm.Target = selectedEntity;
						AsMyProperty.Instance.AlertTargetChanged();
					}
				}
			}
		}
	}
Example #2
0
	public static bool sSkillUsable_TargetCharge(AsPlayerFsm _playerFsm, Msg_Player_Skill_Ready _ready)// use targetting slot only 
	{
		float _range = _ready.skillLvRecord.Usable_Distance * 0.01f;// * _playerFsm.Character_Size;
		
		if( null == _playerFsm.Target) // no entity is targeted
		{
			if( _ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
			{
				AsBaseEntity target = _playerFsm.HostileEntityExistInRange( _range);
				_playerFsm.Target = target;
			}
		}
		else // taget is exist
		{
			if( _playerFsm.Target.FsmType == eFsmType.NPC || _playerFsm.Target.FsmType == eFsmType.COLLECTION)
			{
				if(_ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
				{
					AsBaseEntity target = _playerFsm.MonsterExistInRange( _range);
					if( target != null && target.CheckObjectMonster() == false)
						_playerFsm.Target = target;
				}
			}
			else if(_playerFsm.Target.FsmType == eFsmType.OTHER_USER)
			{
				if(CheckOtherUserIsEnemy(_playerFsm.Target) == false)
				{
					if( ( null != _ready.skillRecord) && ( eSkillAutoTarget.Disable != _ready.skillRecord.SkillAutoTarget))
					{
						if(_ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true &&
							_ready.skillRecord.CheckPotencyTypeIncludeHeal() == false)
						{
							AsUserEntity targetUser = _playerFsm.Target as AsUserEntity;
							AsBaseEntity targetUserTarget = targetUser.GetGetterTarget();
							if( targetUserTarget != null &&
								targetUserTarget.FsmType == eFsmType.MONSTER &&
								Vector3.Distance(_playerFsm.transform.position, targetUser.transform.position) < _range)
								_playerFsm.Target = targetUserTarget;
							else
								_playerFsm.Target = _playerFsm.MonsterExistInRange( _range);
						}
					}
				}
			}
		}
		
		if( null == _playerFsm.Target)
		{
			AsMyProperty.Instance.AlertInvalidTarget();
			return false;
		}
		else
			return TargetSkillCheck( _ready.skillRecord.Index, _playerFsm);
	}