public List <int[]> filter_available_boxcar(List <int[]> possible_boxcar_location, Person person) { int available_boxcar = 0; List <Offset_Tile> offset_tile_list = new List <Offset_Tile>(); List <int[]> available_boxcar_list = new List <int[]>(); GameObject[,] city_board = CityManager.Activated_City_Component.city_board; foreach (int[] boxcar_loc in possible_boxcar_location) { try { GameObject boxcar_go = city_board[boxcar_loc[0] + 1, boxcar_loc[1] + 1]; // offset if (boxcar_go != null && boxcar_go.tag == "boxcar") { Boxcar boxcar = boxcar_go.GetComponent <Boxcar>(); if (!boxcar.is_occupied && boxcar.is_wait_for_turntable) // boxcar is ready to be loaded { bool is_boxcar_match = person.is_boxcar_match_desired_activity(boxcar.boxcar_type); if (is_boxcar_match) { Tilemap boxcar_tilemap = CityDetector.boxcar_orientation_to_offset_tilemap(boxcar.orientation); offset_tile_list.Add(new Offset_Tile(boxcar_go)); boxcar_tile_tracker[new Vector2Int(boxcar_loc[0], boxcar_loc[1])] = boxcar_tilemap; available_boxcar_list.Add(new int[] { boxcar_loc[0], boxcar_loc[1] }); available_boxcar++; } } } } catch (IndexOutOfRangeException) { print("eligible boxcar location (" + boxcar_loc[0] + "," + boxcar_loc[1] + ") is not suitable for boxcar placement"); }; } all_eligible_boxcar.AddRange(offset_tile_list); //print("available boxcar tally is " + available_boxcar + " size of available boxcar list is " + available_boxcar_list.Count); return(available_boxcar_list); }
public void stop_single_boxcar_at_turntable(GameObject boxcar_go) { Boxcar boxcar = boxcar_go.GetComponent <Boxcar>(); BoxCollider2D bc2d = boxcar_go.GetComponent <BoxCollider2D>(); bc2d.size = new Vector2(1f, .73f); // fatten the boxcar Tilemap boxcar_tilemap = CityDetector.boxcar_orientation_to_offset_tilemap(boxcar.orientation); Vector3Int boxcar_cell_pos = boxcar_tilemap.WorldToCell(boxcar_go.transform.position); boxcar.prev_tile_position = boxcar.tile_position; // move up one boxcar.tile_position = boxcar_cell_pos; VehicleManager.instance.update_vehicle_board(city.city_board, boxcar_go, boxcar_cell_pos, boxcar.prev_tile_position); // nullify prev tile boxcar.speed = stopping_speed; boxcar.is_halt = true; // only call ONCE when first called }
public IEnumerator show_hint(List <List <int[]> > tilemap_pos_list) { //clean_up_hint(tilemap_pos_list); ??? List <Tilemap> tilemap_list = new List <Tilemap>(); foreach (List <int[]> tilemap_pos_arr_list in tilemap_pos_list) { foreach (int[] tilemap_pos_arr in tilemap_pos_arr_list) { Vector2Int tilemap_pos = new Vector2Int(tilemap_pos_arr[0], tilemap_pos_arr[1]); if (hint_context_list.Contains("board")) { CityDetector cd = GameObject.Find("City Tilemap").GetComponent <CityDetector>();// if hint is board use a different hint tilemap offset_boxcar_tilemap = cd.boxcar_tile_tracker[tilemap_pos]; if (!tilemap_list.Contains(offset_boxcar_tilemap)) { tilemap_list.Add(offset_boxcar_tilemap); } if (offset_boxcar_tilemap == null) { throw new Exception("boxcar location to tilemap dictionary should not be null at position " + tilemap_pos_arr); } offset_boxcar_tilemap.SetTile((Vector3Int)tilemap_pos, hint_tile); } else { tilemap_list.Add(hint_tilemap); hint_tilemap.SetTile((Vector3Int)tilemap_pos, hint_tile); } } } yield return(new WaitForSeconds(1)); clean_up_hint(tilemap_pos_list, tilemap_list); // after 1 second, unhighlight the tiles }