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); } } }
public void PreviousScreen() { if (m_prevScreen != null) { if (m_currentScreen != null) { m_currentScreen.SetActive(false); GameObject temp = m_currentScreen; m_currentScreen = m_prevScreen; m_prevScreen = temp; } else { m_currentScreen = m_prevScreen; m_prevScreen = null; } ApplyPersistentScreen(); m_currentScreen.SetActive(true); backButton.SetActive(true); M_GameHelper.SPauseLevel(); } else { HideScreen(); } }
public void HideScreen() { if (m_currentScreen != null) { m_currentScreen.SetActive(false); m_prevScreen = m_currentScreen; m_currentScreen = null; backButton.SetActive(false); M_GameHelper.SResumeLevel(); } }
public override GameObject InstantiateBuilding(Vector3 pos, M_GameHelper.Group group) { UnityEngine.Object prefab = Resources.Load(PATH_PREFAB + prefabName); GameObject obj = (GameObject)GameObject.Instantiate(prefab, pos, Quaternion.identity); BuildingProd building = obj.GetComponent <BuildingProd>(); building.SetData(this); M_GameHelper.AddToGroup(obj, group); return(obj); }
public void QuitBuilding() { if (m_tempBuildingObj != null) { m_tempBuildingComp = null; M_WorldUIManager.ShowSmallBuildButton(false); M_GameHelper.Destroy(m_tempBuildingObj); m_tempBuildingObj = null; M_MiscManager.ShowCancelButton(false); foreach (Tile tile in m_tilesHighlighted) { tile.Highlight(false); } } }
public void FixedUpdate() { if (m_tempBuildingObj == null) { return; } Vector3 pos = m_tempBuildingObj.transform.position; pos.y -= 0.1f; GameObject collider = M_GameHelper.SGetObjectAtWorldPoint(pos); if (collider != null) { if (m_currentMiddleTile != collider.transform.parent.gameObject || m_currentMiddleTile == null) { foreach (Tile obj in m_tilesHighlighted) { obj.HighlightOccupied(false); } m_tilesHighlighted.Clear(); m_currentMiddleTile = collider.transform.parent.gameObject; Tile tile = collider.transform.parent.gameObject.GetComponent <Tile>(); if (tile == null) { return; } BuildingPhysics physics = m_tempBuildingComp.GetPhysics(); bool[] area = physics.GetArea(); int middleI = physics.GetWidth() / 2; int middleJ = physics.GetHeight() / 2; for (int i = 0; i < physics.GetWidth(); i++) { for (int j = 0; j < physics.GetHeight(); j++) { int tempI = tile.i - (middleI - i); int tempJ = tile.j - (middleJ - j); Tile tempTile = M_MapManager.SGetTileObject(tempI, tempJ).GetComponent <Tile>(); tempTile.HighlightOccupied(true); m_tilesHighlighted.Add(tempTile); } } } } }
/// <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 ChangeScreen(GameObject screen) { if (m_currentScreen == screen) { HideScreen(); } else { if (m_currentScreen != null) { m_currentScreen.SetActive(false); } m_prevScreen = m_currentScreen; m_currentScreen = screen; ApplyPersistentScreen(); m_currentScreen.SetActive(true); backButton.SetActive(true); M_GameHelper.SPauseLevel(); } }
private void Generate() { GameObject groupLevel = M_GameHelper.SGetGroup(M_GameHelper.Group.LEVEL); if (groupLevel == null) { Debug.LogWarning("Level group does not exist! Make sure that a Level gameobject is in the Hierarchy."); return; } else { // Delete current terrain. GameObject groupTerrain = M_GameHelper.SGetGroup(M_GameHelper.Group.TERRAIN); if (groupTerrain == null) { Debug.LogWarning("Terrain group does not exist! Make sure that a Terrain gameobject is in the Hierarchy."); return; } int count = groupTerrain.transform.childCount; for (int i = 0; i < count; i++) { M_GameHelper.DestroyImmediate(groupTerrain.transform.GetChild(0).gameObject); } } m_tiles = new GameObject[m_mapW * m_mapH]; for (int i = 0; i < m_mapW; i++) { for (int j = 0; j < m_mapH; j++) { GameObject obj = null; // choose a sprite for a tile if (i % 2 == 1) { obj = (GameObject)PrefabUtility.InstantiatePrefab(s_tilePrefab); } else { obj = (GameObject)PrefabUtility.InstantiatePrefab(s_tilePrefab2); } // TileData setup obj.GetComponent <Tile>().i = i; obj.GetComponent <Tile>().j = j; obj.GetComponent <Tile>().data = new DAT_Tile(false); // Position and name setup Vector3 temp = new Vector3(i * m_tileW, 0, j * m_tileH); if (i % 2 == 1) { temp.z -= m_tileH / 2; } obj.transform.position = temp; obj.name = "obj" + i + "_" + j; // Apply to structures M_GameHelper.AddToGroup(obj, M_GameHelper.Group.TERRAIN); m_tiles[j * m_mapW + i] = obj; } } if (groupLevel != null) { groupLevel.GetComponent <Level>().tiledMap = new DAT_TiledMap(m_mapW, m_mapH, m_tiles); EditorUtility.SetDirty(groupLevel.GetComponent <Level>()); } }
void Start() { Debug.Log("GameHelper -> Start()"); s_instance = this; m_camController = Camera.main.GetComponent <CameraController>(); if (m_camController == null) { Debug.LogWarning("Couldn't get CameraController from Camera.main!"); } if (dayText == null || foodText == null || researchText == null) { Debug.LogWarning("One of the TMP_Text objects is not initialized."); } else { m_resourcesManager = M_InGameResourcesManager.GetInstance(foodText, dayText, researchText); } m_buildingManager = M_BuildingManager.Instance; m_mapManager = M_MapManager.Instance; m_settlersManager = M_SettlersManager.Instance; m_inputManager = M_InputManager.Instance; m_waresManager = M_WaresManager.Instance; m_saveManager = M_SaveManager.Instance; // Load level GameObject menuManager = GameObject.FindGameObjectWithTag("MenuManager"); if (menuManager != null) { SceneLoader sceneLoader = menuManager.GetComponent <SceneLoader>(); if (sceneLoader != null) { if (sceneLoader.gameData == null) { LoadLevel(defaultGameData); } else { LoadLevel(sceneLoader.gameData); } if (sceneLoader.saveId > 0) { LoadSave(sceneLoader.saveId); } } else { Debug.LogWarning("Cannot find " + typeof(SceneLoader).Name + " component!"); } } else { // Only if we started from Game scene, because MenuManager hasn't been initialized. if (defaultGameData != null) { Debug.LogWarning("Loading using default data ."); LoadLevel(defaultGameData); } else { Debug.LogWarning("Couldn't find either MenuManager or default DAT_Game!"); } } ResumeGame(); }
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; } } }