public int GetTouchObjID() { int object_id = -1; float skill_blear_radius = 0.5f; Vector3 touch_pos = new Vector3(position.x, position.y, 0); Ray ray = Camera.main.ScreenPointToRay(touch_pos); RaycastHit hitInfo; GameObject hitGameObj = null; int layermask = (1 << LayerMask.NameToLayer("Terrains")) | (1 << LayerMask.NameToLayer("Character")); SkillControllerInterface player_skill_ctrl = GetControl(); if (null != player_skill_ctrl) { SkillInputData skill_input_data = player_skill_ctrl.GetSkillInputData(SkillTags); if (null != skill_input_data) { skill_blear_radius = skill_input_data.targetChooseRange; } } if (Physics.Raycast(ray, out hitInfo, 200f, layermask)) { Collider[] hitObjs = Physics.OverlapSphere(hitInfo.point, skill_blear_radius, (1 << LayerMask.NameToLayer("Character"))); if (hitObjs.Length > 0) { hitGameObj = hitObjs[0].gameObject; if (null != hitGameObj) { SharedGameObjectInfo targetInfo = LogicSystem.GetSharedGameObjectInfo(hitGameObj); if (null != targetInfo && IsEnemy()) { // camp int camp_self = -1; GameObject goSelf = DashFire.LogicSystem.PlayerSelf; if (null != goSelf) { CharacterCamp camp_s = goSelf.GetComponent <CharacterCamp>(); if (null != camp_s) { camp_self = camp_s.m_CampId; } } CharacterCamp camp_t = hitGameObj.GetComponent <CharacterCamp>(); if (camp_t != null && camp_self != camp_t.m_CampId && targetInfo.Blood > 0) { object_id = targetInfo.m_LogicObjectId; } } } } } if (-1 != object_id && null != hitGameObj) { GfxSystem.PublishGfxEvent("Op_InputEffect", "Input", GestureEvent.OnSingleTap, hitGameObj.transform.position.x, hitGameObj.transform.position.y, hitGameObj.transform.position.z, true, false); } return(object_id); }
private void UpdateAfterSkillAutoAttack() { if (m_WaiteSkillBuffer.Count > 0) { return; } if (m_CurSkillNode != null) { if (Time.time > GetWaitInputTime(m_CurSkillNode)) { return; } IShooterSkill ss = m_SkillManager.GetSkillById(m_CurSkillNode.SkillId); SkillNode attackNode = m_SkillCategoryDict[SkillCategory.kAttack]; if (ss != null && ss.IsAttackAfterSkill() && attackNode != null && IsSkillCanBreak(m_CurSkillNode, attackNode.Category) && m_WaiteSkillBuffer.Count == 0) { Vector3 targetPos; if (TriggerImpl.GetCurTargetPos(m_SkillManager.GetOwner(), out targetPos)) { SkillInputData data = GetSkillInputData(SkillCategory.kAttack); if (data != null && Vector3.Magnitude(targetPos - m_SkillManager.GetOwner().transform.position) <= data.castRange) { StartAttack(targetPos); } } } } }
public static GestureArgs ToGestureArgs(Gesture args) { if (null == args) { return(null); } GestureArgs e = new GestureArgs(); e.startPositionX = args.StartPosition.x; e.startPositionY = args.StartPosition.y; e.positionX = args.Position.x; e.positionY = args.Position.y; e.startTime = args.StartTime; e.elapsedTime = args.ElapsedTime; Vector3 pos = args.GetTouchToWorldPoint(); e.gamePosX = pos.x; e.gamePosY = pos.y; e.gamePosZ = pos.z; e.name = args.Recognizer.EventMessageName; GameObject go = DashFire.LogicSystem.PlayerSelf; Vector3 srcPos = args.GetStartTouchToWorldPoint(); Vector3 destPos = pos; if (null != go) { destPos = go.transform.position; } e.towards = Geometry.GetYAngle(new ScriptRuntime.Vector2(destPos.x, destPos.z), new ScriptRuntime.Vector2(srcPos.x, srcPos.z)); e.moveType = curTouchState; e.selectedObjID = args.SelectedID; e.sectionNum = args.SectionNum; Vector3 airWellPos = args.GetTouchToAirWallWorldPoint(); e.airWelGamePosX = airWellPos.x; e.airWelGamePosY = airWellPos.y; e.airWelGamePosZ = airWellPos.z; e.startGamePosX = srcPos.x; e.startGamePosY = srcPos.y; e.startGamePosZ = srcPos.z; /// e.attackRange = 3f; SkillControllerInterface skill_contrl = GetControl(); if (null != skill_contrl) { SkillInputData skill_input_data = skill_contrl.GetSkillInputData(args.SkillTags); if (null != skill_input_data) { e.attackRange = skill_input_data.castRange; } } return(e); }
public override void StartAttack(Vector3 targetpos) { if (targetpos == Vector3.zero) { base.StartAttack(targetpos); return; } GameObject owner = m_SkillManager.GetOwner(); Vector3 xz_vector = targetpos - owner.transform.position; xz_vector.y = 0; float distance = xz_vector.magnitude; SkillInputData data = GetRealSkillInputData(SkillCategory.kAttack); SkillInputData flash_data = GetRealSkillInputData(SkillCategory.kFlashAttack); if (data != null && distance > data.castRange && flash_data != null && distance <= flash_data.castRange) { CancelBreakSkillTask(); SetFaceDir(targetpos); SkillNode node = AddCategorySkillNode(SkillCategory.kFlashAttack); if (node != null) { node.TargetPos = targetpos; } m_IsAttacking = true; } else { base.StartAttack(targetpos); } }
public Vector3 GetStartTouchToWorldPoint() { float skill_blear_radius = 0.5f; Vector3 start_touch_worldpos = Vector3.zero; Vector3 start_touch_pos = new Vector3(startPosition.x, startPosition.y, 0); Ray ray = Camera.main.ScreenPointToRay(start_touch_pos); RaycastHit hitInfo; //int layermask = (1 << LayerMask.NameToLayer("AirWall")); //layermask |= 1 << LayerMask.NameToLayer("Character"); //layermask |= 1 << LayerMask.NameToLayer("Player"); //layermask |= 1 << LayerMask.NameToLayer("SceneObjEffect"); //layermask |= 1 << LayerMask.NameToLayer("SceneObj"); //layermask = ~layermask; int layermask = (1 << LayerMask.NameToLayer("Terrains")) | (1 << LayerMask.NameToLayer("Character")); SkillControllerInterface player_skill_ctrl = GetControl(); if (null != player_skill_ctrl) { SkillInputData skill_input_data = player_skill_ctrl.GetSkillInputData(SkillTags); if (null != skill_input_data) { skill_blear_radius = skill_input_data.targetChooseRange; } } if (Physics.Raycast(ray, out hitInfo, 200f, layermask)) { start_touch_worldpos = hitInfo.point; GameObject go = DashFire.LogicSystem.PlayerSelf; if (null != go) { Vector3 srcPos = go.transform.position; Vector3 targetPos = start_touch_worldpos; float length = Vector3.Distance(srcPos, targetPos); RaycastHit airWallHitInfo = new RaycastHit(); int airWallLayermask = 1 << LayerMask.NameToLayer("AirWall"); Vector3 direction = (targetPos - srcPos).normalized; if (Physics.Raycast(go.transform.position, direction, out airWallHitInfo, length, airWallLayermask)) { BoxCollider bc = airWallHitInfo.collider.gameObject.GetComponent <BoxCollider>(); if (null != bc && !bc.isTrigger) { start_touch_worldpos = airWallHitInfo.point; } } } Collider[] hitObjs = Physics.OverlapSphere(start_touch_worldpos, skill_blear_radius, (1 << LayerMask.NameToLayer("Character"))); if (hitObjs.Length > 0) { start_touch_worldpos = hitObjs[0].gameObject.transform.position; } } return(start_touch_worldpos); }
public UnityEngine.Vector3 GetStartTouchToWorldPoint() { if (null == UnityEngine.Camera.main) { return(UnityEngine.Vector3.zero); } float skill_blear_radius = 0.5f; UnityEngine.Vector3 start_touch_worldpos = UnityEngine.Vector3.zero; UnityEngine.Vector3 start_touch_pos = new UnityEngine.Vector3(startPosition.x, startPosition.y, 0); UnityEngine.Ray ray = UnityEngine.Camera.main.ScreenPointToRay(start_touch_pos); UnityEngine.RaycastHit hitInfo; SkillController player_skill_ctrl = null; if (null != player_skill_ctrl) { SkillInputData skill_input_data = player_skill_ctrl.GetSkillInputData(SkillTags); if (null != skill_input_data) { skill_blear_radius = skill_input_data.targetChooseRange; } } if (UnityEngine.Physics.Raycast(ray, out hitInfo, 200f, m_TerrainAndCharacterLayer)) { start_touch_worldpos = hitInfo.point; UnityEngine.GameObject go = ArkCrossEngine.LogicSystem.PlayerSelf; if (null != go) { UnityEngine.Vector3 srcPos = go.transform.position; UnityEngine.Vector3 targetPos = start_touch_worldpos; float length = UnityEngine.Vector3.Distance(srcPos, targetPos); UnityEngine.RaycastHit airWallHitInfo = new UnityEngine.RaycastHit(); int airWallLayermask = 1 << UnityEngine.LayerMask.NameToLayer("AirWall"); UnityEngine.Vector3 direction = (targetPos - srcPos).normalized; if (UnityEngine.Physics.Raycast(go.transform.position, direction, out airWallHitInfo, length, airWallLayermask)) { UnityEngine.BoxCollider bc = airWallHitInfo.collider.gameObject.GetComponent <UnityEngine.BoxCollider>(); if (null != bc && !bc.isTrigger) { start_touch_worldpos = airWallHitInfo.point; } } } UnityEngine.Collider[] hitObjs = UnityEngine.Physics.OverlapSphere(start_touch_worldpos, skill_blear_radius, m_CharacterLayer); if (hitObjs.Length > 0) { start_touch_worldpos = hitObjs[0].gameObject.transform.position; } } return(start_touch_worldpos); }
public override SkillInputData GetSkillInputData(SkillCategory category) { SkillNode head = null; if (m_SkillCategoryDict.TryGetValue(category, out head)) { IShooterSkill ss = m_SkillManager.GetSkillById(head.SkillId); if (ss != null) { SkillInputData data = new SkillInputData(); data.castRange = ss.GetSkillCastRange(); data.targetChooseRange = ss.GetTargetChooseRange(); return(data); } } return(null); }
private SkillInputData GetRealSkillInputData(SkillCategory category) { SkillNode head = null; if (m_SkillCategoryDict.TryGetValue(category, out head)) { SkillScript ss = m_SkillManager.GetSkillById(head.SkillId); if (ss != null) { SkillInputData data = new SkillInputData(); data.castRange = ss.m_SkillCastRange; data.targetChooseRange = ss.m_TargetChooseRange; return(data); } } return(null); }
public int GetTouchObjID() { if (null == UnityEngine.Camera.main) { return(-1); } int object_id = -1; float skill_blear_radius = 2.5f; UnityEngine.Vector3 touch_pos = new UnityEngine.Vector3(position.x, position.y, 0); UnityEngine.Ray ray = UnityEngine.Camera.main.ScreenPointToRay(touch_pos); UnityEngine.RaycastHit hitInfo; UnityEngine.GameObject hitGameObj = null; SkillController player_skill_ctrl = null; if (null != player_skill_ctrl) { SkillInputData skill_input_data = player_skill_ctrl.GetSkillInputData(SkillTags); if (null != skill_input_data) { skill_blear_radius = skill_input_data.targetChooseRange; } } if (UnityEngine.Physics.Raycast(ray, out hitInfo, 200f, m_TerrainAndCharacterLayer)) { UnityEngine.Collider[] hitObjs = UnityEngine.Physics.OverlapSphere(hitInfo.point, skill_blear_radius, m_CharacterLayer); if (hitObjs.Length > 0) { hitGameObj = hitObjs[0].gameObject; if (null != hitGameObj) { if (WorldSystem.Instance.IsPureClientScene()) { SignNpcType signNpcTypeScript = hitGameObj.GetComponent <SignNpcType>(); if (signNpcTypeScript != null) { LogicSystem.EventChannelForGfx.Publish("ge_npc_click", "ui", signNpcTypeScript.GetNpcType()); } /// SharedGameObjectInfo assit_target = LogicSystem.GetSharedGameObjectInfo(hitGameObj); if (null != assit_target) { ClickNpcManager.Instance.Execute(assit_target.m_ActorId); } } SharedGameObjectInfo selfInfo = LogicSystem.PlayerSelfInfo; SharedGameObjectInfo targetInfo = LogicSystem.GetSharedGameObjectInfo(hitGameObj); if (null != targetInfo && null != selfInfo) { // camp if (ArkCrossEngine.CharacterInfo.GetRelation(selfInfo.CampId, targetInfo.CampId) == ArkCrossEngine.CharacterRelation.RELATION_ENEMY && targetInfo.Blood > 0) { object_id = targetInfo.m_LogicObjectId; } if (WorldSystem.Instance.IsPureClientScene()) { if (targetInfo.IsPlayer && targetInfo.m_ActorId != LogicSystem.PlayerSelfInfo.m_ActorId) { LogicSystem.EventChannelForGfx.Publish("check_player_info", "ui", targetInfo.m_ActorId); } } } } } } if (-1 != object_id && null != hitGameObj) { GfxSystem.PublishGfxEvent("Op_InputEffect", "Input", GestureEvent.OnSingleTap, hitGameObj.transform.position.x, hitGameObj.transform.position.y, hitGameObj.transform.position.z, true, false); } return(object_id); }