Beispiel #1
0
    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);
    }
Beispiel #2
0
    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
    }
Beispiel #3
0
    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
    }