// 리미트 거리가 없는 것. public bool canPlayerHeroTargetingType2WithOutDistCheck(Monster p, bool checkTargetOnly, TargetingDecal decal) { _target = TargetingData.getAutomaticTarget(p, targetType, targetAttr, canUseThisSkillOnThisType); if (_target == null) { return(false); } if (checkTargetOnly == false) { p.setSkillTarget(_target); p.targetHeight = _target.hitObject.height; p.targetPosition = _target.cTransformPosition; p.targetUniqueId = _target.stat.uniqueId; } //if(p.isPlayer) { _v = _target.cTransformPosition; _v.y = 1.0f; decal.setPosition(_v); } _target = null; return(true); }
// 리미트 거리가 있는 것. public bool canPlayerHeroTargetingType2(Monster p, bool checkTargetOnly, TargetingDecal decal) { //데미지 범위. exeData.attr[1]; _target = TargetingData.getAutomaticTarget(p, targetType, targetAttr, canUseThisSkillOnThisType); if (_target == null) { return(false); } //단순히 현재 상태에서 검사! if (VectorUtil.DistanceXZ(_target.cTransformPosition, p.cTransformPosition) < _targetDistanceLimit) { if (checkTargetOnly == false) { p.setSkillTarget(_target); p.targetHeight = _target.hitObject.height; p.targetPosition = _target.cTransformPosition; p.targetUniqueId = _target.stat.uniqueId; } _v = _target.cTransformPosition; _v.y = 1.0f; decal.setPosition(_v); _target = null; return(true); } _target = null; return(false); }
// 리미트 거리가 있는 것. public bool canMonsterHeroTargetingType2(Monster attacker, int targetIndex = -1) { //데미지 범위. exeData.attr[1]; _target = TargetingData.getAutomaticTarget(attacker, targetType, targetAttr, canUseThisSkillOnThisType); if (_target == null) { return(false); } // 타겟이 같은 편일때는 그냥 움직여서 쏘면 되니까 상관 없음. // 근데 타겟이 다른 편일때는 전방 거리까지 움직여서 쏠 수 있는지 확인을 해야할 것. if (_target.isPlayerSide) // 적히어로몬스터가 우리편에게 쏘는거면... { if (GameManager.me.characterManager.targetZonePlayerLine - _target.cTransformPosition.x > _targetDistanceLimit) { _target = null; return(false); } } attacker.setSkillTarget(_target); attacker.skillTargetChecker = ctAutoByTargetDistance; attacker.skillMove = ctMoveAuto; _target = null; return(true); }
// 리미트 거리가 없는 것. public bool canMonsterHeroTargetingType2WithOutDistCheck(Monster attacker, int targetIndex = -1) { _target = TargetingData.getAutomaticTarget(attacker, targetType, targetAttr, canUseThisSkillOnThisType); if (_target == null) { return(false); } attacker.setSkillTarget(_target); attacker.skillTargetChecker = ctReturnTrue; _target = null; return(true); }
// - '1' 세팅시, 히어로와 가장 가까운 적(아군) // - '2' 세팅시, HP가 가장 낮은 적(아군) // 리미트 거리가 있는 것. public bool canPlayerHeroTargetingType2PVP(Player checkTarget, Vector3 targetPosition) { //데미지 범위. exeData.attr[1]; // 타겟이 적이면 공격자를 나로 해야한다. // 대상이 우리편인데 적에게 쏘는거다. 그럼 시전자는 적이다. if (targetType == Skill.TargetType.ENEMY) { _attacker = (checkTarget.isPlayerSide)?enemyHero:GameManager.me.player; } else { _attacker = (checkTarget.isPlayerSide)?GameManager.me.player:enemyHero; } // 일단 현재 위치들을 기준으로 자동타겟을 가져옴. _target = TargetingData.getAutomaticTarget(_attacker, targetType, targetAttr, canUseThisSkillOnThisType); // 자동타겟을 가져왔는데 타겟이 아무도 없어 그럼 체크고 나발이고 그냥 아웃. if (_target == null) { _attacker = null; return(false); } // 가장 가까이에 위치한 적. if (targetAttr[0].Get() == TargetingData.AUTOMATIC_CLOSE_TARGET_1) { // 히어로 미포함시. if (targetAttr[1].Get() == 1) { _attacker = null; _target = null; return(false); } // 공격자에게 가까운 녀석을 가져왔는데 내가 선택한 녀석이 아니네? // 그럼 다시 체크해본다. // 자동선택해준녀석과 위험도에 있을 적의 위치 IFloat distBetweenTargetPositionAndAttacker = VectorUtil.DistanceXZ(targetPosition, _attacker.cTransformPosition); if (_target != checkTarget) { // 이동 위치(특정 위치라거나 혹은 이동할 위치)가 현재 타겟된 녀석보다 공격자보다 가까우면 위험도 위치에 타게팅이 됨. // 아니라면 끝. if (VectorUtil.DistanceXZ(_target.cTransformPosition, _attacker.cTransformPosition) < distBetweenTargetPositionAndAttacker) { _attacker = null; _target = null; return(false); } } _attacker = null; _target = null; // 타겟 포지션이 타게팅 위치가 된다는 것을 확인했다. 하지만 타게팅 제한거리보다 거리가 멀면 아웃. if (distBetweenTargetPositionAndAttacker < _targetDistanceLimit) { return(true); } else { return(false); } } // 에너지가 낮은 적이니까 이건 획득한 캐릭터가 내가 아니면 무조건 아니다. 거리랑은 상관이 없는 녀석이다. else if (_target != checkTarget) { _attacker = null; _target = null; return(false); } _attacker = null; _target = null; return(true); }
public bool canPlayerHeroTargetingType2PVP2(Player checkTarget, Vector3 targetPosition) { // 타겟이 적이면 공격자를 나로 해야한다. // 대상이 우리편인데 적에게 쏘는거다. 그럼 시전자는 적이다. if (targetType == Skill.TargetType.ENEMY) { _attacker = (checkTarget.isPlayerSide)?enemyHero:GameManager.me.player; } else { _attacker = (checkTarget.isPlayerSide)?GameManager.me.player:enemyHero; } // 가장 가까이에 위치한 적. if (targetAttr[0] == TargetingData.AUTOMATIC_CLOSE_TARGET_1) { // 히어로 미포함시. if (targetAttr[1] == 1) { _attacker = null; return(false); } if (targetType == Skill.TargetType.ENEMY) { // 적에게 쏘는 것은 타겟 포지션에 있는 녀석이 최전방에 있으면 됨. // 왜냐하면 가장 가까운 녀석에게 쏘는 거니까. 우리한테 가장 가까운 녀석은 최전방에 있는 녀석이라고 보면 됨. // 엄밀히 말하면 상하 위치도 봐야겠지만 전진까지 계산해서는 답이 안나온다. if (_attacker.isPlayerSide) { if (GameManager.me.characterManager.monsters[0] != checkTarget && targetPosition.x + checkTarget.hitObject.lineLeft > GameManager.me.characterManager.monsterLeftLine) { _attacker = null; return(false); } } else { if (GameManager.me.characterManager.playerMonster[0] != checkTarget && targetPosition.x + checkTarget.hitObject.lineRight < GameManager.me.characterManager.playerMonsterRightLine) { _attacker = null; return(false); } } } else { // 같은 편에게 쏠때는 전방 이동이 가능하므로. 주인공보다 전방에 있으면 무조건 사용 가능이다. if (_attacker.isPlayerSide) { if (_attacker.cTransformPosition.x > targetPosition.x) { _attacker = null; return(false); } } else { if (_attacker.cTransformPosition.x < targetPosition.x) { _attacker = null; return(false); } } } // 타겟 포지션이 타게팅 위치가 된다는 것을 확인했다. 하지만 타게팅 제한거리보다 거리가 멀면 아웃. if (VectorUtil.DistanceXZ(checkTarget.cTransformPosition, _attacker.cTransformPosition) < _targetDistanceLimit) { _attacker = null; return(true); } else { _attacker = null; return(false); } } // 에너지가 낮은 적이니까 이건 획득한 캐릭터가 내가 아니면 무조건 아니다. 거리랑은 상관이 없는 녀석이다. else { // 일단 현재 위치들을 기준으로 자동타겟을 가져옴. _target = TargetingData.getAutomaticTarget(_attacker, targetType, targetAttr, canUseThisSkillOnThisType); if (_target == null || _target != checkTarget) { _attacker = null; _target = null; return(false); } } _attacker = null; _target = null; return(true); }