private void ProcessPlayerInput(GameController p_Context, Unit p_Unit) { if (Input.GetKeyDown(KeyCode.Alpha1)) { p_Unit.SetStat("Health", p_Unit.GetStat("Health").MaxValue); p_Unit.SetStat("Mana", p_Unit.GetStat("Mana").MaxValue); } if (Input.GetKeyDown(KeyCode.Alpha2)) { p_Context.DestroyAllEnemies(); } Ray ray = p_Context.MainCamera.ScreenPointToRay(Input.mousePosition); Plane plane = new Plane(Vector3.forward, Vector3.zero); float d; if (plane.Raycast(ray, out d)) { Vector3 worldPos = ray.GetPoint(d); Vector3 localPos = worldPos - p_Context.CurRoom.transform.position; Vector2Int roomPos = new Vector2Int((int)localPos.x, (int)localPos.y); Tile tile = p_Context.CurRoom.GetTileAt(roomPos); p_Context.Highlight(tile); if (tile && Input.GetMouseButtonDown(0) && (tile.Marked || tile.IsDoorTile)) { if (Movable) { if (CanThrow) { Vector2Int direction = tile.RoomPosition - p_Unit.CurTile.RoomPosition; if (direction.x > 0) { Tile right = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(1, 0)); if (right && right.CurUnit) { right.CurUnit.OnAttack(); } } else if (direction.x < 0) { Tile left = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(-1, 0)); if (left && left.CurUnit) { left.CurUnit.OnAttack(); } } else if (direction.y > 0) { Tile up = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(0, 1)); if (up && up.CurUnit) { up.CurUnit.OnAttack(); } } else { Tile down = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(0, -1)); if (down && down.CurUnit) { down.CurUnit.OnAttack(); } } } if (tile.HasSword) { CanThrow = true; tile.HasSword = false; if (tile.PickUp) { Destroy(tile.PickUp); } tile.PickUp = null; } p_Context.MoveUnitToTile(p_Unit, tile); } else if (ActiveAction.Name == "ThrowSpear" && CanThrow) { GameObject cur_sword = Instantiate(Sword); cur_sword.transform.position = p_Unit.transform.position; Vector3 to_position = tile.transform.position; StartCoroutine(MoveSword(cur_sword.transform, to_position, 0.2f)); tile.CurUnit.OnAttack(); tile.HasSword = true; tile.PickUp = cur_sword; CanThrow = false; Movable = true; } else { Unit enemy_unit = tile.CurUnit; Vector2Int direction = tile.RoomPosition - p_Unit.CurTile.RoomPosition; if (direction.x > 0) { Tile right = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(1, 0)); p_Context.MoveUnitToTile(enemy_unit, right); } else if (direction.x < 0) { Tile left = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(-1, 0)); p_Context.MoveUnitToTile(enemy_unit, left); } else if (direction.y > 0) { Tile up = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(0, 1)); p_Context.MoveUnitToTile(enemy_unit, up); } else { Tile down = tile.ParentRoom.GetTileAt(tile.RoomPosition + new Vector2Int(0, -1)); p_Context.MoveUnitToTile(enemy_unit, down); } Movable = true; } p_Context.PlayerTurn = false; p_Context.UnMark(); p_Unit.SetStat("Mana", p_Unit.GetStat("Mana").CurrentValue - ActiveAction.Cost); ButnController.ActivateActions(); SetActiveAction("Walk"); } } }