public void shake(Vector3 pos) { Vector3 localpos = BattleEnvironmentM.World2LocalPos(pos); int item = Mathf.FloorToInt(localpos.x / MapGrid.m_width) - StartUnit; if (item >= 0 && item < MapGrid.m_UnitRoomGridNum ) { } for (int i = 1; i <= 3; i ++) { GameObject go = null; int left = item - i; if (left >= 0) { go = itemfloor[left]; } else if (m_Left != null) { go = m_Left.itemfloor[MapGrid.m_UnitRoomGridNum + left]; } if (go != null ) { } int right = item + i; if (right < MapGrid.m_UnitRoomGridNum) { go = itemfloor[right]; } else if (m_Right != null) { go = m_Right.itemfloor[right - MapGrid.m_UnitRoomGridNum]; } if (go != null ) { } } }
public Vector3 GetMouseGridPos() { Vector3 v3TouchScreenPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, -Camera.main.transform.position.z); Vector3 v3TouchWorldPos = Camera.main.ScreenToWorldPoint(v3TouchScreenPos); Vector3 gridPos = BattleEnvironmentM.World2LocalPos(v3TouchWorldPos); return(gridPos); }
public Int2 GetMousePosGrid() { Vector3 v3TouchScreenPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, -Camera.main.transform.position.z); Vector3 v3TouchWorldPos = Camera.main.ScreenToWorldPoint(v3TouchScreenPos); Vector3 v3Local = BattleEnvironmentM.World2LocalPos(v3TouchWorldPos); RoomGrid roomGrid = RoomMap.FindRoomGrid(v3Local); if (roomGrid == null) { return(new Int2(-1, -1)); } return(roomGrid.mPosRoomGrid); }
/// <summary> /// 向点燃位置移动 /// </summary> void ToFirePos() { //NGUIUtil.DebugLog("向点燃位置移动", "red"); m_bGotoFirePos = true; m_Owner.m_Skin.tRoot.transform.parent = BattleEnvironmentM.GetLifeMBornNode(true); Vector3 start = m_Owner.m_Parent.GetSkin().tRoot.localPosition; GameObject posgo = m_Owner.m_Parent.GetSkin().ProPerty.HelpPoint.GetVauleByKey(HelpPointName.PetPos); Vector3 end = posgo.transform.position; end = BattleEnvironmentM.World2LocalPos(end); m_CurrentAction = new GridActionCmdWalk(start, end, 0.5f, m_Owner.m_Parent.WalkDir, 0); m_CurrentAction.SetTarget(m_Owner); }
/// <summary> /// 检测格子是否是房间或者甲板 /// </summary> public static bool CheckBuildOrDeckRoom(Vector3 MousePos) { Vector3 pos = U3DUtil.SetZ(MousePos, -Camera.main.transform.position.z); Vector3 m_v3TouchWorldPos = Camera.main.ScreenToWorldPoint(pos); Vector3 gridPos = BattleEnvironmentM.World2LocalPos(m_v3TouchWorldPos); RoomGrid roomGrid = RoomMap.FindRoomGrid(gridPos); if (roomGrid == null) { return(false); } Int2 grid = roomGrid.mPosRoomGrid; return(CheckBuildOrDeckRoom(grid)); }
void OnMouseDown() { if (PutCanvasM.CanOperate == false) { return; } RaycastHit hit; if (WndManager.IsHitNGUI(out hit))//当点击到UI时不做处理 { return; } if (Input.touchCount >= 2) { return; } m_bMouseDown = true; m_bLongTouch = false; m_bTouchMoveChange = true; m_fMouseDownTime = Time.time; m_vtotalmouseDelta = Vector2.zero; m_vlastFirstTouch = GetTouchPos(0); m_isDrag = false; if (SystemInfo.deviceType == DeviceType.Desktop) { m_v3MouseTouchDown = Input.mousePosition; } else { m_v3MouseTouchDown = Input.GetTouch(0).position; } //获取按下时画布格子 Vector3 m_v3TouchScreenPos = new Vector3(m_v3MouseTouchDown.x, m_v3MouseTouchDown.y, -Camera.main.transform.position.z); Vector3 m_v3TouchWorldPos = Camera.main.ScreenToWorldPoint(m_v3TouchScreenPos); Vector3 v3dLocalPos = BattleEnvironmentM.World2LocalPos(m_v3TouchWorldPos); m_roomGridTouchDown = RoomMap.FindRoomGrid(v3dLocalPos); if (m_roomGridTouchDown == null) { return; } m_curClickType = RoomMap.PickupShipBuildType(m_roomGridTouchDown, v3dLocalPos, m_roomGridTouchDown.mPosRoomGrid.Layer); CanvasCore buildRoomCoreTouchDown = m_roomGridTouchDown.GetBuildRoom(); if (TouchMove.g_bSetParaing == true) { return; } TouchMove curTouchMove = TouchMoveManager.GetCurTouchMove(); if (null != curTouchMove) { //如果当前选中的是房间,新选中的不管是什么都不做变更 //如果当前选中的不是房间,但是新选中的对象和当前选中的一样则也不变量。 if (curTouchMove.IsContainsRoomGrid(m_roomGridTouchDown)) { TouchMove selNewTouchMov = PutCanvasM.GetTouchMoveByRoomGrid(m_roomGridTouchDown, m_curClickType); if (curTouchMove.MyCore().m_type == ShipBuildType.BuildRoom || selNewTouchMov != null && selNewTouchMov == curTouchMove) { curTouchMove.PlayEditSelectAnimationEnd(); //恢复上个房间内陷阱/角色 动画 curTouchMove.OnMouseDown(); m_bTouchMoveChange = false; } } PutCanvasM.ClearNoLinkList(); } else { //判断选中物件是否在上次保存失败的物件上,如果是则直接选择 bool bInNoLinkList = false; if (buildRoomCoreTouchDown != null) { TouchMove selNewTouchMov = PutCanvasM.GetTouchMoveByCore(buildRoomCoreTouchDown); if (null == selNewTouchMov) { List <CanvasCore> childCores = m_roomGridTouchDown.GetOtherBuild(); for (int i = 0; i < childCores.Count; i++) { selNewTouchMov = PutCanvasM.GetTouchMoveByCore(childCores[i]); break; } } if (null != selNewTouchMov && PutCanvasM.NoLinkListContain(selNewTouchMov.MyCore())) { PutCanvasM.ClearNoLinkList(); TouchMoveManager.SetCurTouchMove(selNewTouchMov); selNewTouchMov.PlayEditSelectAnimationEnd(); //恢复上个房间内陷阱/角色 动画 selNewTouchMov.OnMouseDown(); m_bTouchMoveChange = false; bInNoLinkList = true; } } if (bInNoLinkList == false) { PutCanvasM.ClearNoLinkList(); } } }
/// <summary> /// 飞行角色的碰撞处理 /// </summary> public override void ColliderProc(Collision collision) { //NGUIUtil.DebugLog("flyCollisionAction=" + m_FlyInfo.flyCollisionAction, "red"); if (m_FlyInfo != null) //当掉落船外后不再处理碰撞 { if (m_FlyInfo.flyCollisionAction == FlyCollisionAction.DropOutBoat) { return; } } FlyDir dir = FlyDir.none; if (CurrentAction is GridActionCmdFly) { dir = (CurrentAction as GridActionCmdFly).GetDir(); } else if (CurrentAction is GridActionDophineFly) { dir = (CurrentAction as GridActionDophineFly).GetDir(); } else if (CurrentAction is FireActionCmd) { dir = (CurrentAction as FireActionCmd).GetDir(); } if (m_bDolphineFly && (dir == FlyDir.Top || dir == FlyDir.LeftTop || dir == FlyDir.RightTop)) { return; } Life lifeM = GetCollisionGo(collision); if (lifeM == null || lifeM.m_Core.m_Camp == LifeMCamp.ATTACK) { return; } #if UNITY_EDITOR_LOG FileLog.write(m_Owner.SceneID, "ColliderProc " + collision.gameObject + lifeM.SceneID + ", " + collision.contacts[0].point + "," + dir); #endif //计算撞击方向 Vector3 target = collision.contacts[0].point; Vector3 start = m_Owner.m_thisT.position; Vector2 HitDir = new Vector2(target.x - start.x, target.y - start.y); bool bReleaseSkill = true; bReleaseSkill = !m_bDolphineFly; //海豚顶飞,炮战技能不释放 bool bApplyDamage = bReleaseSkill; if (m_Owner.m_Skill != null) { if (m_bDolphineFly == false) { bApplyDamage = m_FlyInfo.bApplyDamage; } (m_Owner.m_Skill as FireSkill).FlyInfo = m_FlyInfo; } Vector3 vHitWorldPos = new Vector3(target.x, target.y, target.z); HitSound(lifeM, m_Owner); HitShakeBoat(); #if UNITY_EDITOR_LOG FileLog.write(m_Owner.SceneID, "ColliderProc " + dir + "," + CurrentAction); #endif FlyCollisionInfo Info = m_Owner.FireTrigger(collision, lifeM, m_Owner, bReleaseSkill, bApplyDamage, m_listCollisionGoID.Count, dir); if (Info != null && Info.lifemCollision != null) { Info.HitDir = HitDir.x > 0 ? WalkDir.WALKRIGHT : WalkDir.WALKLEFT; Info.vhitPos = BattleEnvironmentM.World2LocalPos(target); FireCombatOver(Info); } }