public void Move() { if (!m_Player.m_bMoved) { // Get the neighbours out player can move on List <Node> tiles = GetMovementTiles(Map.Instance.GetNodeFromPosition(m_v3PlayerTilePos), m_Player.m_nHowManyTiles); // Spawn a moveable tile on each node foreach (Node n in tiles) { Vector3 tempPos = n.m_v3WorldPosition; tempPos.y = 0.1f; Transform tempWalkableTile = Instantiate( m_walkableprefab, tempPos, Quaternion.Euler(Vector3.zero)); tempWalkableTile.parent = GameManager.Instance.MoveableTileHolder.transform; } // Set mode to move and turn of the UI and m_nLeftCLick to 1 m_bMoveTransparent = true; m_playerMode = PLAYERMODE.MOVE; m_bshowUI = false; m_nLeftClick++; } GameManager.Instance.m_actions.SetActive(false); m_bshowUI = false; }
Vector2 m_v2UiPosition; // Position Ui will spawn at private void Start() { m_playerMode = PLAYERMODE.IDLE; // Assign tiles actors and obstacles are on Map.Instance.UpdateUnitOnTop(); m_Player = UnitManager.Instance.m_Parent[0].GetChild(0).GetComponent <Actor>(); m_objectsTransparent = new List <ObjectsTransparent>(); m_showHealth = true; }
public void Attack() { if (!m_Player.m_bAttack) { m_Player.SpawnAttackTiles(m_attackprefab, GameManager.Instance.AttackTileHolder); // Set mode to attack and turn of the UI and m_nLeftCLick to 1 // Also calls the players attack m_playerMode = PLAYERMODE.ATTACK; m_bshowUI = false; m_nLeftClick++; } GameManager.Instance.m_actions.SetActive(false); m_bshowUI = false; }
public override void myUpdate() { base.myUpdate(); Map.Instance.UpdateUnitOnTop(); if (EventSystem.current.IsPointerOverGameObject()) { return; } for (int j = 0; j < UnitManager.Instance.m_Parent[0].childCount; j++) { UnitManager.Instance.m_Parent[0].GetChild(j).GetComponent <Collider>().enabled = true; } // Cast a ray and assign a hit variable RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (m_Player != null) { m_ring = GameManager.Instance.GetChildObject(m_Player.transform, "Ring").GetChild(0); m_ring.gameObject.SetActive(true); if (m_Player.m_bMoved && m_Player.m_bAttack) { m_ring.GetComponent <MeshRenderer>().sharedMaterial = GameManager.Instance.m_redRing; //.material.SetTexture("RedRing", GameManager.Instance.m_redRing); } else { m_ring.GetComponent <MeshRenderer>().sharedMaterial = GameManager.Instance.m_whiteRing; } } // If ray hits something if (Physics.Raycast(ray, out hit)) { // If its a player and leftclick is performed while m_nleftclick is 0 if (hit.transform.CompareTag("Player") && Input.GetMouseButtonDown(0) && m_nLeftClick == 0 && !GameManager.Instance.m_isMoving) { if (m_Player != null) { GameObject temp = m_Player.gameObject.transform.GetChild(2).gameObject; if (temp.activeSelf == true) { temp.SetActive(false); } } for (int i = 0; i < GameManager.Instance.m_actions.transform.childCount; i++) { GameManager.Instance.m_actions.transform.GetChild(i).gameObject.SetActive(true); } // Get its actor component, initialise its actorpos m_Player = hit.transform.GetComponent <Actor>(); GameManager.Instance.m_currentActor = m_Player; m_v3PlayerTilePos = m_Player.m_ActorPos; m_v3PlayerTilePos.y = 0.1f; // Get the Player Pos m_v2UiPosition = Vector2.zero; m_v2UiPosition.x = Input.mousePosition.x; m_v2UiPosition.y = Screen.height - Input.mousePosition.y; // Show UI(attack/move buttons) if (m_Player != null) { m_bshowUI = true; } m_playerMode = PLAYERMODE.MENU; m_SelectedPrefab = m_Player.gameObject.transform.GetChild(2).gameObject; m_showHealth = true; } if (!hit.transform.CompareTag("Player") && m_playerMode == PLAYERMODE.MENU && Input.GetMouseButtonDown(0) && m_nLeftClick == 0 && m_bshowUI == true) { m_bshowUI = false; m_playerMode = PLAYERMODE.IDLE; GameManager.Instance.m_actions.SetActive(false); m_SelectedPrefab.SetActive(false); m_showHealth = false; m_Player = null; } // If the hit is MoveableTile and leftclick is performed and m_nleftclick is 1 if (hit.transform.CompareTag("MovableTile") && Input.GetMouseButtonDown(0) && m_nLeftClick == 1) { // We calculate the angle between mouse position and player position float angle = -Mathf.Atan2(m_v3PlayerTilePos.z - hit.transform.position.z, m_v3PlayerTilePos.x - hit.transform.position.x) * Mathf.Rad2Deg; if (angle < 0) { angle += 360; } //Debug.Log(angle); if (angle >= 180 && angle <= 350) { m_Player.m_playAnimUP = true; } else { m_Player.m_playAnimUP = false; } // Find the path from player to the tile that is clicked Pathfinding.Instance.FindPath(m_v3PlayerTilePos, hit.transform.position); m_Player.Move(Pathfinding.Instance.path); // After we have reached the endTile destroy all moveable tiles for (int i = 0; i < GameManager.Instance.MoveableTileHolder.transform.childCount; i++) { Destroy(GameManager.Instance.MoveableTileHolder.transform.GetChild(i).gameObject); } // If we wanna debug the path taken we draw it again after destroying every moveable tile if (Pathfinding.Instance.m_DebugPath) { foreach (Node n in Pathfinding.Instance.path) { Vector3 tempPos = n.m_v3WorldPosition; tempPos.y = 0.1f; Transform tempWalkableTile = Instantiate( m_walkableprefab, tempPos, Quaternion.Euler(Vector3.zero)); tempWalkableTile.parent = GameManager.Instance.MoveableTileHolder.transform; } } if (!m_debug) { m_Player.m_bMoved = true; } if (m_Player != null && m_Player.m_bMoved && m_Player.m_bAttack) { GameManager.Instance.m_nPlayerMoves++; } // Assign tiles actors and obstacles are on Map.Instance.UpdateUnitOnTop(); // Set player mode to idle and m_nLeftClick back to 0 m_playerMode = PLAYERMODE.IDLE; m_nLeftClick--; m_showHealth = false; GameManager.Instance.m_HealthBar.SetActive(false); } if (!hit.transform.CompareTag("MovableTile") && m_playerMode == PLAYERMODE.MOVE && Input.GetMouseButtonDown(0) && m_nLeftClick == 1) { // After we have reached the endTile destroy all moveable tiles for (int i = 0; i < GameManager.Instance.MoveableTileHolder.transform.childCount; i++) { Destroy(GameManager.Instance.MoveableTileHolder.transform.GetChild(i).gameObject); } // Assign tiles actors and obstacles are on Map.Instance.UpdateUnitOnTop(); // Set player mode to idle and m_nLeftClick back to 0 m_playerMode = PLAYERMODE.IDLE; m_nLeftClick--; m_showHealth = false; GameManager.Instance.m_HealthBar.SetActive(false); m_bMoveTransparent = false; } // If player is in attack mode and we left click while m_nLeftClick is 1 if (m_playerMode == PLAYERMODE.ATTACK && Input.GetMouseButtonDown(0) && m_nLeftClick == 1) { if (m_Player.m_whoWasAttacked != null) { m_Player.Attack(); } m_Player.m_attackAnimPlayed = false; GameObject[] temp = GameObject.FindGameObjectsWithTag("AttackTile"); // we want to destroy previous spawned attack tiles for (int i = 0; i < temp.Length; i++) { Destroy(temp[i]); } if (!m_debug) { m_Player.m_bAttack = true; } if (m_Player.m_bMoved && m_Player.m_bAttack) { GameManager.Instance.m_nPlayerMoves++; } // Assign tiles actors and obstacles are on Map.Instance.UpdateUnitOnTop(); // Set player mode to idle and m_nLeftClick back to 0 m_playerMode = PLAYERMODE.IDLE; m_nLeftClick--; m_showHealth = false; GameManager.Instance.m_HealthBar.SetActive(false); } // If hold down the right click and m_player is not null if (m_Player != null) { if (m_SelectedPrefab != null) { if (!m_SelectedPrefab.activeSelf) { m_SelectedPrefab.SetActive(true); } } // Get the player position from screen Vector2 positionOnScreen = Camera.main.WorldToViewportPoint(GameManager.Instance.GetChildObject(m_Player.transform, "Ring").transform.position); // and the mose position on the screen Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint(Input.mousePosition); // We calculate the angle between mouse position and player position float angle = Mathf.Atan2(positionOnScreen.y - mouseOnScreen.y, positionOnScreen.x - mouseOnScreen.x) * Mathf.Rad2Deg; // Set players rotation to that angle GameManager.Instance.GetChildObject(m_Player.transform, "Ring").rotation = Quaternion.Euler(new Vector3(0f, -angle, 0f)); // Draw a line to debug player front Debug.DrawRay(GameManager.Instance.GetChildObject(m_Player.transform, "Ring").transform.position, GameManager.Instance.GetChildObject(m_Player.transform, "Ring").transform.forward * 5, Color.red); Vector3 tempPos = GameManager.Instance.GetChildObject(m_Player.transform, "Ring").position + GameManager.Instance.GetChildObject(m_Player.transform, "Ring").forward; m_Player.GetAttackTiles( Map.Instance.GetNodeFromPosition(tempPos), Map.Instance.GetNodeFromPosition(m_Player.m_ActorPos), true); float angleA = -Mathf.Atan2(m_Player.m_ActorPos.z - tempPos.z, m_Player.m_ActorPos.x - tempPos.x) * Mathf.Rad2Deg; if (angleA < 0) { angleA += 360; } //Debug.Log(angleA); if (angleA >= 180 && angleA <= 350) { m_Player.m_playAnimUP = true; } else { m_Player.m_playAnimUP = false; } // If player is in attack mode if (m_playerMode == PLAYERMODE.ATTACK && m_Player.m_prevDirec != m_Player.m_lookingDirec) { m_Player.m_whoWasAttacked.Clear(); m_Player.SpawnAttackTiles(m_attackprefab, GameManager.Instance.AttackTileHolder); } } } if (m_bMoveTransparent) { GameObject parentObject = GameObject.Find("ObstacleModels"); List <MeshRenderer> rend = new List <MeshRenderer>(); for (int i = 0; i < parentObject.transform.childCount; i++) { MeshRenderer r; if (parentObject.transform.GetChild(i).GetComponent <MeshRenderer>() != null) { r = parentObject.transform.GetChild(i).GetComponent <MeshRenderer>(); } else { r = parentObject.transform.GetChild(i).GetComponentInChildren <MeshRenderer>(); } if (r.gameObject.name != "polySurface1" && r.gameObject.name != "polySurface2") { rend.Add(r); r.material.shader = GameManager.Instance.transparent; Color tmp = r.material.color; tmp.a = 0.3f; Collider tempCol; if (r.gameObject.GetComponent <Collider>() != null) { tempCol = r.gameObject.GetComponent <Collider>(); tempCol.enabled = false; } else { tempCol = null; } m_objectsTransparent.Add(new ObjectsTransparent(parentObject.transform.GetChild(i).transform, r, tempCol, r.material.color)); r.material.color = tmp; } } for (int j = 0; j < UnitManager.Instance.m_Parent[0].childCount; j++) { UnitManager.Instance.m_Parent[0].GetChild(j).GetComponent <Collider>().enabled = false; } for (int j = 0; j < UnitManager.Instance.m_Parent[1].childCount; j++) { UnitManager.Instance.m_Parent[1].GetChild(j).GetComponent <Collider>().enabled = false; } //RaycastHit temphit; //Ray tempRay = Camera.main.ScreenPointToRay(Input.mousePosition); //if (Physics.Raycast(tempRay, out temphit)) //{ // if (m_objectsTransparent.Count > 0 && !hit.transform.CompareTag("MovableTile")) // { // for (int i = 0; i < m_objectsTransparent.Count; i++) // { // m_objectsTransparent[i].m_rend.material.shader = Shader.Find("Standard"); // m_objectsTransparent[i].m_rend.material.color = m_objectsTransparent[i].m_color; // m_objectsTransparent[i].m_col.enabled = true; // m_objectsTransparent.RemoveAt(i); // } // } //} ////int layerMask = 1 << LayerMask.NameToLayer("Walkable"); //int layerMask = ~LayerMask.GetMask("Walkable");// & ~LayerMask.GetMask("Walkable"); //if (Physics.Raycast(tempRay, out temphit, 1000.0f, layerMask)) //{ // Debug.Log(hit.collider.gameObject); // if (temphit.transform != m_Player.transform && !hit.transform.CompareTag("MovableTile")) // { // MeshRenderer rend; // if (temphit.transform.GetComponent<MeshRenderer>() != null) // rend = temphit.transform.GetComponent<MeshRenderer>(); // else // rend = temphit.transform.GetComponentInChildren<MeshRenderer>(); // rend.material.shader = Shader.Find("Transparent/Diffuse"); // Color tmp = rend.material.color; // tmp.a = 0.3f; // m_objectsTransparent.Add(new ObjectsTransparent(temphit.transform, rend, temphit.transform.GetComponent<Collider>(), rend.material.color)); // rend.material.color = tmp; // temphit.transform.GetComponent<Collider>().enabled = false; // } //} } else { if (m_objectsTransparent.Count > 0) { for (int i = 0; i < m_objectsTransparent.Count; i++) { m_objectsTransparent[i].m_rend.material.shader = GameManager.Instance.standard; m_objectsTransparent[i].m_rend.material.color = m_objectsTransparent[i].m_color; if (m_objectsTransparent[i].m_col != null) { m_objectsTransparent[i].m_col.enabled = true; } m_objectsTransparent.RemoveAt(i); } for (int j = 0; j < UnitManager.Instance.m_Parent[0].childCount; j++) { UnitManager.Instance.m_Parent[0].GetChild(j).GetComponent <Collider>().enabled = true; } for (int j = 0; j < UnitManager.Instance.m_Parent[1].childCount; j++) { UnitManager.Instance.m_Parent[1].GetChild(j).GetComponent <Collider>().enabled = true; } } } }