Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TileSet/TileMap rework #45278

Closed
wants to merge 54 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
d2327e5
Remove the use_parent mode in tilemaps
groud Nov 27, 2020
575e97b
Remove centered texture and compatibility mode
groud Nov 27, 2020
4fbf72b
Update the tilemap format, removing flip and transpose
groud Nov 27, 2020
7d59109
First rework of the tilemap/tileset workflow
groud Nov 27, 2020
733131a
Add support for TileMap line drawing
groud Jan 18, 2021
f964891
Draw tiles shapes around the preview
groud Jan 19, 2021
8444483
Handle zooming in TileAtlasView
groud Jan 21, 2021
df94f38
Make CanvasItemEditor use the EditorZoomWidget
groud Jan 21, 2021
0e0d15c
Implement TileMapPattern
groud Jan 23, 2021
a1ec00d
Implement TileMap picker
groud Jan 25, 2021
e44de0d
Optimize Bresenham's line algorithm to use integers instead
groud Jan 25, 2021
40e3a52
Make TileMap line drawing work with half-offset shapes
groud Jan 27, 2021
e310abd
Add support for painting random tiles
groud Jan 27, 2021
9de08a6
Support scattering in random tile painting
groud Jan 29, 2021
52abb9b
Draw only the outline in the tilemap selection
groud Jan 29, 2021
19b571c
keep editing tilemap when editing the tilset
groud Jan 29, 2021
4362d19
Better handling of TileAtlasView transform synchronization
groud Feb 3, 2021
028a2bc
Fix small typo
groud Feb 4, 2021
e47ec2f
Support for cutting tiles in TileMaps
groud Feb 4, 2021
5585be9
Update viewport on pressing E in the tilemap editor
groud Feb 4, 2021
5dec493
Add shortucts to TileMap tools
groud Feb 4, 2021
033dcee
Only handle events for the TileMap editor is the Selection tool is ac…
groud Feb 4, 2021
f62fa03
TileMap/TileSet editors, bug fixes and small UX improvements
groud Feb 10, 2021
ffa69bc
Disable transforms for base tiles
groud Feb 15, 2021
928e381
TileSet/TileMap bug fixing
groud Feb 15, 2021
ac39ce7
Draw tiles in the TileAtlasView correctly, with their rendering modif…
groud Feb 16, 2021
dd9b782
TileMap/TileSet editors bugfixing
groud Feb 18, 2021
c317bc5
Bugfixing, improvements, and implement occluders in TileSet
groud Feb 24, 2021
3141f11
First support TileMap/TileSet collision bodies
groud Mar 2, 2021
b6a6fa6
Display shapes in the TileSet editor.
groud Mar 2, 2021
9f2f65f
Fex renames in TileSet
groud Mar 2, 2021
8a136d4
Add support for custom data to tilesets TileData
groud Mar 4, 2021
8eb4f8d
Fixes get_tile_data bindings
groud Mar 4, 2021
7a1aff4
Add missing override and fix some issues
groud Mar 4, 2021
e1c02d2
Implement Navigation to TileSet/TileMap
groud Mar 18, 2021
0ff5ca4
Add support for TileSet terrain properties
groud Mar 25, 2021
fbd8712
Get terrain neighbors per direction
groud Mar 29, 2021
4200f04
Reorganize TileMap editor code
groud Mar 30, 2021
f39941b
Fixes mouse buttons identifiers
groud Mar 30, 2021
51a48a0
Move TileMap tabs to the toolbar
groud Mar 31, 2021
eabe7ee
Fix issues with TileSet custom data
groud Apr 9, 2021
ff8959a
Implement TileMap terrain painting
groud Apr 23, 2021
4e1cfa8
Reorder tile_set.cpp as tile_set.h
groud Apr 23, 2021
9f80094
Improve retro-compatibility of TileSet
groud Apr 26, 2021
787a315
Fix TileSet terrain possible crash
groud Apr 26, 2021
5fe6ffc
Fix uninitialized variable in TileMapEditor
groud Apr 26, 2021
7f56c11
Don't store TileSet properties that have default values
groud Apr 27, 2021
f55a75d
Implement TileSet better UndoRedo by saving some properties that might
groud Apr 29, 2021
a0fbeb5
Multiple tiles selection in TileSet editor
groud May 3, 2021
fcafe5b
Run doctool
groud May 6, 2021
fd3183e
Remove base_texture_offset as it became useless with multiple tiles s…
groud May 6, 2021
fa44161
Fix some initializations and code style issues
groud May 6, 2021
7bd4bbb
Some visual changes to the TileMap editor
groud May 7, 2021
e3f0e54
Merge TileSet plugins into tile_set.cpp
groud May 7, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions core/math/geometry_2d.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,45 @@ class Geometry2D {
H.resize(k);
return H;
}

static Vector<Point2i> bresenham_line(const Point2i &p_start, const Point2i &p_end) {
Copy link
Contributor

@Xrayez Xrayez Jan 18, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should #43916 be closed or merged then?

Vector<Point2i> points;

Vector2i delta = (p_end - p_start).abs() * 2;
Vector2i step = (p_end - p_start).sign();
Vector2i current = p_start;

if (delta.x > delta.y) {
int err = delta.x / 2;

for (; current.x != p_end.x; current.x += step.x) {
points.push_back(current);

err -= delta.y;
if (err < 0) {
current.y += step.y;
err += delta.x;
}
}
} else {
int err = delta.y / 2;

for (; current.y != p_end.y; current.y += step.y) {
points.push_back(current);

err -= delta.x;
if (err < 0) {
current.x += step.x;
err += delta.y;
}
}
}

points.push_back(current);

return points;
}

static Vector<Vector<Vector2>> decompose_polygon_in_convex(Vector<Point2> polygon);

static void make_atlas(const Vector<Size2i> &p_rects, Vector<Point2i> &r_result, Size2i &r_size);
Expand Down
8 changes: 8 additions & 0 deletions core/math/vector2.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@ struct Vector2i {
return p_idx ? y : x;
}

Vector2i min(const Vector2i &p_vector2i) const {
return Vector2(MIN(x, p_vector2i.x), MIN(y, p_vector2i.y));
}

Vector2i max(const Vector2i &p_vector2i) const {
return Vector2(MAX(x, p_vector2i.x), MAX(y, p_vector2i.y));
}

Vector2i operator+(const Vector2i &p_v) const;
void operator+=(const Vector2i &p_v);
Vector2i operator-(const Vector2i &p_v) const;
Expand Down
245 changes: 245 additions & 0 deletions doc/classes/TileData.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="TileData" inherits="Object" version="4.0">
<brief_description>
</brief_description>
<description>
</description>
<tutorials>
</tutorials>
<methods>
<method name="add_collision_shape">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<description>
</description>
</method>
<method name="get_collision_shape_one_way_margin" qualifiers="const">
<return type="float">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<description>
</description>
</method>
<method name="get_collision_shape_shape" qualifiers="const">
<return type="Shape2D">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<description>
</description>
</method>
<method name="get_collision_shapes_count" qualifiers="const">
<return type="int">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<description>
</description>
</method>
<method name="get_custom_data" qualifiers="const">
<return type="Variant">
</return>
<argument index="0" name="layer_name" type="String">
</argument>
<description>
</description>
</method>
<method name="get_custom_data_by_layer_id" qualifiers="const">
<return type="Variant">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<description>
</description>
</method>
<method name="get_navigation_polygon" qualifiers="const">
<return type="NavigationPolygon">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<description>
</description>
</method>
<method name="get_occluder" qualifiers="const">
<return type="OccluderPolygon2D">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<description>
</description>
</method>
<method name="get_peering_bit_terrain" qualifiers="const">
<return type="int">
</return>
<argument index="0" name="peering_bit" type="int" enum="TileSet.CellNeighbor">
</argument>
<description>
</description>
</method>
<method name="is_collision_shape_one_way" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<description>
</description>
</method>
<method name="remove_collision_shape">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<description>
</description>
</method>
<method name="set_collision_shape_one_way">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<argument index="2" name="one_way" type="bool">
</argument>
<description>
</description>
</method>
<method name="set_collision_shape_one_way_margin">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<argument index="2" name="one_way_margin" type="float">
</argument>
<description>
</description>
</method>
<method name="set_collision_shape_shape">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shape_index" type="int">
</argument>
<argument index="2" name="shape" type="Shape2D">
</argument>
<description>
</description>
</method>
<method name="set_collision_shapes_count">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="shapes_count" type="int">
</argument>
<description>
</description>
</method>
<method name="set_custom_data">
<return type="void">
</return>
<argument index="0" name="layer_name" type="String">
</argument>
<argument index="1" name="value" type="Variant">
</argument>
<description>
</description>
</method>
<method name="set_custom_data_by_layer_id">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="value" type="Variant">
</argument>
<description>
</description>
</method>
<method name="set_navigation_polygon">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="navigation_polygon" type="NavigationPolygon">
</argument>
<description>
</description>
</method>
<method name="set_occluder">
<return type="void">
</return>
<argument index="0" name="layer_id" type="int">
</argument>
<argument index="1" name="occluder_polygon" type="OccluderPolygon2D">
</argument>
<description>
</description>
</method>
<method name="set_peering_bit_terrain">
<return type="void">
</return>
<argument index="0" name="peering_bit" type="int" enum="TileSet.CellNeighbor">
</argument>
<argument index="1" name="terrain" type="int">
</argument>
<description>
</description>
</method>
<method name="tile_get_material" qualifiers="const">
<return type="ShaderMaterial">
</return>
<description>
</description>
</method>
<method name="tile_set_material">
<return type="void">
</return>
<argument index="0" name="material" type="ShaderMaterial">
</argument>
<description>
</description>
</method>
</methods>
<members>
<member name="flip_h" type="bool" setter="set_flip_h" getter="get_flip_h" default="false">
</member>
<member name="flip_v" type="bool" setter="set_flip_v" getter="get_flip_v" default="false">
</member>
<member name="modulate" type="Color" setter="set_modulate" getter="get_modulate" default="Color( 1, 1, 1, 1 )">
</member>
<member name="probability" type="float" setter="set_probability" getter="get_probability" default="1.0">
</member>
<member name="terrain_set" type="int" setter="set_terrain_set" getter="get_terrain_set" default="-1">
</member>
<member name="texture_offset" type="Vector2i" setter="set_texture_offset" getter="get_texture_offset" default="Vector2i( 0, 0 )">
</member>
<member name="transpose" type="bool" setter="set_transpose" getter="get_transpose" default="false">
</member>
<member name="y_sort_origin" type="Vector2i" setter="set_y_sort_origin" getter="get_y_sort_origin" default="Vector2i( 0, 0 )">
</member>
<member name="z_index" type="int" setter="set_z_index" getter="get_z_index" default="0">
</member>
</members>
<signals>
<signal name="changed">
<description>
</description>
</signal>
</signals>
<constants>
</constants>
</class>
Loading