Beispiel #1
0
    def start_drawing(
        self,
        editor: map_editor.MapEditor,
        sector: map_objects.EditorSector,
        hit_point: core.Point3,
        insert: bool,
    ):
        self._editor = editor
        self._sector = sector

        if insert and self._sector is not None:
            for editor_wall in self._sector.walls:
                distance_to_wall = editor_wall.line_segment.get_point_distance(
                    hit_point.xy)
                if (distance_to_wall is not None
                        and distance_to_wall < self._editor.snapper.grid_size):
                    insert = False
                    projected_point = editor_wall.line_segment.project_point(
                        hit_point.xy)
                    hit_point.x = projected_point.x
                    hit_point.y = projected_point.y
                    break

        self._insert = insert

        position_2d = self._editor.snapper.snap_to_grid_2d(hit_point.xy)
        if not self._insert:
            point_neat_wall = self._point_near_wall(hit_point.xy)
            if point_neat_wall is not None:
                position_2d = point_neat_wall

        self._current_point = position_2d
        self._points[:] = [self._current_point]

        grid_position = core.Point3(position_2d.x, position_2d.y,
                                    self._floor_z_at_point(position_2d))
        self._display.start_drawing(self._sector, grid_position,
                                    self._editor.snapper)
        self._update_debug_display()