public override void OnInspectorGUI() { EnvironmentElement element = (EnvironmentElement)target; if (GUILayout.Button("ApplyToTilemap", GUILayout.Width(200))) { if (element.tile != null) { element.tile.SetOccupied(false); EditorUtility.SetDirty(element.tile); } Vector3 pos = element.transform.position; pos.y -= 0.1f; GameObject collider = M_GameHelper.SGetObjectAtWorldPoint(pos); Tile tile = collider.transform.parent.gameObject.GetComponent <Tile>(); if (tile != null) { pos = tile.gameObject.transform.position; pos.y = M_MapManager.SGetYDepthValue(pos.z); element.transform.position = pos; element.tile = tile; tile.SetOccupied(true); EditorUtility.SetDirty(element); EditorUtility.SetDirty(element.tile); } } }
/// <summary> Function called when Building is supposed to be placed. </summary> private void OnBuildingBuildIconClick() { // check whether the place is not occupied. foreach (Tile tile in m_tilesHighlighted) { if (tile.IsOccupied()) { return; } } UT_Pair <int, int> cost = M_BuildingManager.SGetBuildingCost(m_tempBuildingComp.GetData().id); // Apply cost to the resources M_InGameResourcesManager.SAddFood(-cost.first); M_InGameResourcesManager.SAddResearch(-cost.second); // Mark highlighted tiles as occupied foreach (Tile tile in m_tilesHighlighted) { tile.SetOccupied(true); tile.Highlight(false); } // set final building position Vector3 pos = m_currentMiddleTile.transform.position; pos.y = M_MapManager.SGetYDepthValue(pos.z); m_tempBuildingObj.transform.position = pos; // Move to the BUILDINGS group M_GameHelper.AddToGroup(m_tempBuildingObj, M_GameHelper.Group.BUILDINGS); m_tempBuildingComp.SetActionOnBuildingFinished(ActionOnBuildingFinished); // Start in-game building process m_tempBuildingComp.StartBuilding(); m_onBuildingPlacedAction(m_tempBuildingComp); // reset values m_tempBuildingObj.GetComponent <IBuilding>().GetBuildButton().SetActive(false); m_tempBuildingObj = null; m_tempBuildingComp = null; m_currentMiddleTile = null; m_tilesHighlighted.Clear(); M_MiscManager.ShowCancelButton(false); }
public void Update() { switch (SystemInfo.deviceType) { case DeviceType.Desktop: m_currentTrackedModel = M_GameHelper.SGetObjectAtScreenPoint(Input.mousePosition); break; case DeviceType.Handheld: if (Input.touchCount > 0) { m_currentTrackedModel = M_GameHelper.SGetObjectAtScreenPoint(Input.GetTouch(0).position); } break; } if (m_processing) { m_freezeTimeElapsed += Time.deltaTime; } if (m_freezeTimeElapsed > CLICK_TIME) { switch (SystemInfo.deviceType) { case DeviceType.Desktop: if (m_leftButtonDown) { m_leftButtDownTimeElapsed += Time.deltaTime; } if (Input.GetMouseButtonDown(0)) // On Start { m_leftButtDownTimeElapsed = 0f; m_leftButtonDown = true; m_draggingCandidate = m_currentTrackedModel; // Examine if object should be clicked. if not then skip to dragging examination. if (m_currentTrackedModel != null) { ClickableObject clickable = m_currentTrackedModel.GetComponent <ClickableObject>(); DraggableObject draggable = m_currentTrackedModel.GetComponent <DraggableObject>(); if (clickable != null && clickable.disabled && draggable != null && draggable.draggingEnabled) { m_leftButtDownTimeElapsed = CLICK_TIME * 2; CameraController.SSetOverallMovement(false); m_currentDraggedObject = m_currentTrackedModel.gameObject.transform.parent.gameObject; } } // } else if (Input.GetMouseButtonUp(0) && m_leftButtDownTimeElapsed < CLICK_TIME) // OnClick { if (m_currentTrackedModel != null) { ClickableObject comp = m_currentTrackedModel.transform.parent.gameObject.GetComponent <ClickableObject>(); if (comp != null) { comp.OnClick(); } } m_leftButtonDown = false; m_leftButtDownTimeElapsed = 0f; m_currentTrackedModel = null; m_draggingCandidate = null; } else if (Input.GetMouseButtonUp(0) && m_leftButtDownTimeElapsed > CLICK_TIME) // End of dragging { m_leftButtonDown = false; m_leftButtDownTimeElapsed = 0f; m_currentDraggedObject = null; } // Examine for dragging if (m_currentDraggedObject == null && m_leftButtDownTimeElapsed > CLICK_TIME) { // get a parent object if (m_draggingCandidate != null) { m_currentDraggedObject = m_draggingCandidate.transform.parent.gameObject; m_currentDraggedObjectComp = m_currentDraggedObject.GetComponent <DraggableObject>(); if (!(m_currentDraggedObjectComp != null && m_currentDraggedObjectComp.draggingEnabled)) { m_currentDraggedObject = null; } m_draggingCandidate = null; } } else if (m_currentDraggedObject != null) // Dragging { Vector3 temp = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (m_currentDraggedObjectComp.keepHighYDepthValue) { temp.y = M_MapManager.SGetHighYDepthValue(temp.z); } else { temp.y = M_MapManager.SGetYDepthValue(temp.z); } m_currentDraggedObject.transform.position = temp; } break; // ------- Handheld -------- case DeviceType.Handheld: StringBuilder stringBuilder = new StringBuilder(); if (m_leftButtonDown) { m_leftButtDownTimeElapsed += Time.deltaTime; } // Examine for dragging if (m_currentDraggedObject == null && m_leftButtDownTimeElapsed > CLICK_TIME) { // get a parent object if (m_draggingCandidate != null) { m_currentDraggedObject = m_draggingCandidate.transform.parent.gameObject; m_currentDraggedObjectComp = m_currentDraggedObject.GetComponent <DraggableObject>(); if (!(m_currentDraggedObjectComp != null && m_currentDraggedObjectComp.draggingEnabled)) { m_currentDraggedObject = null; } else { CameraController.SSetOverallMovement(false); } m_draggingCandidate = null; } } if (m_processing) { m_freezeTimeElapsed += Time.deltaTime; } if (m_freezeTimeElapsed > CLICK_TIME) { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); switch (touch.phase) { case TouchPhase.Began: stringBuilder.AppendLine("Began: " + touch.position); m_leftButtDownTimeElapsed = 0f; m_leftButtonDown = true; m_draggingCandidate = m_currentTrackedModel; // Examine if object should be clicked. if not then skip to dragging examination. if (m_currentTrackedModel != null) { ClickableObject clickable = m_currentTrackedModel.GetComponent <ClickableObject>(); DraggableObject draggable = m_currentTrackedModel.GetComponent <DraggableObject>(); if (clickable != null && clickable.disabled && draggable != null && draggable.draggingEnabled) { m_leftButtDownTimeElapsed = CLICK_TIME * 2; CameraController.SSetOverallMovement(false); m_currentDraggedObject = m_currentTrackedModel.gameObject.transform.parent.gameObject; } } // break; case TouchPhase.Moved: stringBuilder.AppendLine("Moved: " + touch.position); if (m_currentDraggedObject != null) // Dragging { Vector3 temp = Camera.main.ScreenToWorldPoint(touch.position); if (m_currentDraggedObjectComp.keepHighYDepthValue) { temp.y = M_MapManager.SGetHighYDepthValue(temp.z); } else { temp.y = M_MapManager.SGetYDepthValue(temp.z); } m_currentDraggedObject.transform.position = temp; } break; case TouchPhase.Ended: stringBuilder.AppendLine("Ended: " + touch.position); if (m_leftButtDownTimeElapsed < CLICK_TIME) // OnClick { if (m_currentTrackedModel != null) { ClickableObject comp = m_currentTrackedModel.transform.parent.gameObject.GetComponent <ClickableObject>(); if (comp != null) { comp.OnClick(); } } m_leftButtonDown = false; m_leftButtDownTimeElapsed = 0f; m_currentTrackedModel = null; m_draggingCandidate = null; } else // End of dragging { m_leftButtonDown = false; m_leftButtDownTimeElapsed = 0f; m_currentDraggedObject = null; CameraController.SSetOverallMovement(true); } break; } } else { stringBuilder.AppendLine("No touch"); } } stringBuilder.AppendLine("CurrentDraggedObject: " + (m_currentDraggedObject == null ? "NULL" : m_currentDraggedObject.name)); stringBuilder.AppendLine("CurrentTrackedModel: " + (m_currentTrackedModel == null ? "NULL" : m_currentTrackedModel.name)); stringBuilder.AppendLine("DraggingCandidate " + (m_draggingCandidate == null ? "NULL" : m_draggingCandidate.name)); M_GameHelper.debugText = stringBuilder.ToString(); break; } } }