aboutsummaryrefslogtreecommitdiff
path: root/src/addons/rmsmartshape/documentation
diff options
context:
space:
mode:
Diffstat (limited to 'src/addons/rmsmartshape/documentation')
-rw-r--r--src/addons/rmsmartshape/documentation/Controls.md43
-rw-r--r--src/addons/rmsmartshape/documentation/FAQ.md43
-rw-r--r--src/addons/rmsmartshape/documentation/Install.md19
-rw-r--r--src/addons/rmsmartshape/documentation/Migration.md14
-rw-r--r--src/addons/rmsmartshape/documentation/Quickstart.md117
-rw-r--r--src/addons/rmsmartshape/documentation/Resources.md87
-rw-r--r--src/addons/rmsmartshape/documentation/Shapes.md60
-rw-r--r--src/addons/rmsmartshape/documentation/Toolbar.md39
-rw-r--r--src/addons/rmsmartshape/documentation/VersionHistory.md119
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.pngbin0 -> 64461 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.pngbin0 -> 75128 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.pngbin0 -> 73644 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.pngbin0 -> 58366 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.pngbin0 -> 62906 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.pngbin0 -> 66824 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.pngbin0 -> 39645 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/PluginActivate.pngbin0 -> 22016 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/PluginActivate.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.pngbin0 -> 53291 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.pngbin0 -> 22659 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.pngbin0 -> 1490 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.pngbin0 -> 41847 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.pngbin0 -> 5640 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.pngbin0 -> 379 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.pngbin0 -> 350 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-taper-left.pngbin0 -> 338 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-taper-right.pngbin0 -> 338 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass.pngbin0 -> 338 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/grass.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/icon_edge.pngbin0 -> 326 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/icon_edge.png.import34
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/sample.gifbin0 -> 7354906 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/sample.pngbin0 -> 88298 bytes
-rw-r--r--src/addons/rmsmartshape/documentation/imgs/sample.png.import34
50 files changed, 1221 insertions, 0 deletions
diff --git a/src/addons/rmsmartshape/documentation/Controls.md b/src/addons/rmsmartshape/documentation/Controls.md
new file mode 100644
index 0000000..d8d6f13
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Controls.md
@@ -0,0 +1,43 @@
+SmartShape2D - Controls and Hotkeys
+---
+
+# Controls - Point Create
+- Add Point
+ - Left Click Anywhere in the viewport
+
+- Leave Point Create Mode
+ - ESCAPE
+
+# Controls - Point Edit
+- Add Point
+ - Either:
+ - Hold ALT and Left Click Anywhere in the viewport
+ - Click on an edge between two points
+
+- Grab closest point
+ - Hold CTRL
+
+- Cycle through texture indices of a point
+ - Mouseover a point and MOUSEWHEEL up or down to increment / decrement the texture index
+
+- Flip texture
+ - Mouseover a point and press SPACE
+
+- Change texture width property
+ - Mouseover a point, hold SHIFT, then MOUSEWHEEL up or down to increment / decrement the texture width
+
+- Add Bezier curve
+ - Mouseover a point, hold SHIFT, then click and drag to create control points on the point
+
+- Create New Shape
+ - Hold SHFT + ALT and click
+ - The location of the click will be the the first point of a newly created Shape Node
+
+## Overlap
+When multiple points and edges overlap, it can be ambiguous what clicking will do.
+SmartShape adheres the following rules:
+- If a control point overlaps a vertex, the control point takes priority
+- If a control point or vertex overlaps an edge:
+ - Clicking will move the control point or vert
+ - Clicking while holding ALT will create new point on the edge
+
diff --git a/src/addons/rmsmartshape/documentation/FAQ.md b/src/addons/rmsmartshape/documentation/FAQ.md
new file mode 100644
index 0000000..1db737b
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/FAQ.md
@@ -0,0 +1,43 @@
+SmartShape2D - FAQ
+---
+
+# Why aren't my textures repeating?
+If your textures aren't repeating and look something like this:
+
+![Non-Repeating-Texture-IMG]( ./imgs/faq-texture-repeat.png )
+
+The issue is most likely that you need to set the texture's import options in Godot:
+
+![Import-Texture-Settings]( ./imgs/faq-texture-repeat-import.png )
+
+# Why isn't my shape updaing when I change the Light Mask?
+Each shape is currently rendered by multiple-subnodes (Children Node2Ds).
+Their owner isn't set, making them invisible in the editor (unless you have debug mode on).
+
+Unfortunately, there is no accessible signal when changing the Light Mask setting in editor.
+That means changing the Light Mask setting in editor won't trigger the children nodes to change THIER Light Mask
+
+The Shape nodes CAN update their children's light mask, they just need to be triggered to do it manually.
+If you update the shape in any way, the shape will update its children's light mask.
+
+When playing the game, the render Node children are regenerated, ensuring that the light mask will be set
+correctly.
+
+The actual shape has set\_light\_mask overloaded, so changing the light\_mask in code should work without issue
+
+If you need to manually tell the shape to update its rendering, call the set\_as\_dirty() method
+
+If anyone has any insights on this issue, please feel free to open an issue on this subject
+and let us know how we might be able to fix it
+
+# Why does changing the width look so ugly?
+Changing the width of the quads generally looks best with welding turned off.
+
+If welding is on, you can still change the width of the quads, but you may need to play with it a bit.
+It's best that you change the width gradually in small increments instead of sharply.
+Sharply changing the width will result in odd looking shapes.
+
+[Non-perspective rendering to a non-parallelogram is kinda tough](http://reedbeta.com/blog/quadrilateral-interpolation-part-1/)
+
+If anyone has any insights on this issue, please feel free to open an issue on this subject
+and let us know how we might be able to fix it
diff --git a/src/addons/rmsmartshape/documentation/Install.md b/src/addons/rmsmartshape/documentation/Install.md
new file mode 100644
index 0000000..ee79664
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Install.md
@@ -0,0 +1,19 @@
+SmartShape2D - Install
+---
+
+
+# Asset Library
+- After installing the plugin, you may encounter an error, this is normal.
+- You need to restart Godot before using the plugin
+
+# Manual Install
+- Clone the repository at https://github.com/SirRamEsq/SmartShape2D/tree/godot-release
+- Move the "addons/rmsmartshape" folder to your project's "addons" folder
+- Open your project in Godot to have the addon install
+- After installing the plugin, you may encounter an error, this is normal.
+- Restart Godot
+
+# Activate Plugin
+- After Installing the plugin, activate the plugin by navigating to Project -> Plugins
+
+![Activate Plugin]( ./imgs/PluginActivate.png )
diff --git a/src/addons/rmsmartshape/documentation/Migration.md b/src/addons/rmsmartshape/documentation/Migration.md
new file mode 100644
index 0000000..9836536
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Migration.md
@@ -0,0 +1,14 @@
+SmartShape2D - Migration
+---
+
+You can continue to use the Deprecated 1.x RMSmartShape2D nodes in your projects, but you cannot edit them with
+the 2.x version of the plugin.
+
+If you want to migrate them to a 2.x SmartShape2D node then you can:
+- Select a 1.x RMSmartShape2D node in the Scene tree
+- This will add a a single icon in the toolbar
+- Pressing this icon will recreate the node as a new 2.x SmartShape2D node.
+- All the points, control points, and properties will be intact
+
+Note, Materials from 1.x cannot be automatically updated. You'll need to create new
+2.x Shape Materials. After updating a RMSmartShape2D node, the new shape's material will be set to NULL.
diff --git a/src/addons/rmsmartshape/documentation/Quickstart.md b/src/addons/rmsmartshape/documentation/Quickstart.md
new file mode 100644
index 0000000..bd1523a
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Quickstart.md
@@ -0,0 +1,117 @@
+SmartShape2D - QuickStart
+---
+![Finished Image]( ./imgs/Inpsector-EdgeMaterialsNormalRange.png )
+
+If you feel like your workflow with SmartShape2D is a little bit slow, try reading [Controls and Hotkeys](./Controls.md). The hotkeys may help you work with the tool more effectively.
+
+# Creating a Shape
+- First, instance a node of either:
+ - SS2D_Shape_Open
+ - **SS2D_Shape_Closed**
+ - **We'll use a closed shape for this Quickstart demo**
+- SS2D_Shape_Base cannot be instanced directly
+- SS2D_Shape_Anchor is a node that attaches to a shape
+- The following Nodes are legacy nodes and are deprecated:
+ - RMSmartShape2D
+ - RMSmartShape2DAnchor
+
+![Nodes]( ./imgs/NewNode-SS2D_Nodes.png )
+
+# Editing the Shape
+- After creating the shape node, make sure it's selected and the toolbar appears and is in Point Edit mode
+ - ![Toolbar Default State](./imgs/Toolbar-PointEdit.png)
+- Hold ALT and Left Click on the viewport to add points
+ - If this is a closed shape, the polygon will close after adding the 3rd point
+- You should now have a shape consisting of a few points and lines:
+
+![Toolbar Default State](./imgs/ShapeClosed-Untextured.png)
+
+# Setting the Fill Texture of the Shape (Closed Shape only)
+- To give it some life, we'll want to edit the "Shape Material" in the Inspector
+- Under "Shape Material" Expand "Fill Textures" and you'll see an empty array
+- Set the Array's size to '1'
+- Assign a texture to the newly created slot in the array
+- After assigning the shape should now have a valid texture
+ - If nothing happens after setting the texture, try to force the shape to update by adjusting one of the points
+- **Note that "Fill Textures" does not affect SS2D_Shape_Open Nodes at all**
+- If you want to add a normal_texture, you would add it using the "Fill Texture Normals" property
+
+![Fill Texture Set](./imgs/ShapeClosed-FillTextured.png)
+
+# Texturing the Edges
+- This where the rubber hits the road, the real meat of the tool
+- Under "Shape Material" add an element to the "Edge Meta Materials" property
+ - Shape Material -> Edge Meta Materials
+- Set the resource of the newly created element to "SS2D_Material_Edge_Metadata"
+ - Unfortunately, due to Godot limitations, every avaiable resource will offered to you instead of the one you want
+ - The options are alphabetized though, which helps in finding the resource you want
+- Expand the first element of the "Edge Meta Materials" that you just set
+ - Shape Material -> Edge Meta Materials -> element 1
+- Set the value of the "Edge Material" property to a new resource of type "SS2D_Material_Edge"
+ - Shape Material -> Edge Meta Materials -> element 1 -> Edge Material
+- Expand "Edge Material" that you just set
+- Add an element to "Textures" and assign the texture to one that you want to use as an edge
+- The shape's edges should now update using the texture you set
+ - If nothing happens after setting the texture, try to force the shape to update by adjusting one of the points
+- If you want to add a normal_texture, you would add it using the "Texture Normals" property
+- Godot should now look something like this:
+
+![Inspector](./imgs/Inpsector-EdgeMaterial.png)
+
+## Corners
+- If your shape has sharp 90-degree corners, the texture can look a bit warped in those places
+- You can specify a unique texture to use for inner and outer corners for each Edge Material
+- The following Edge Material properties are used for corners
+ - Textures Corner Inner
+ - Texture Normals Corner Inner
+ - Textures Corner Outer
+ - Texture Normals Corner Outer
+- See how the addition of outer corner textures improves the square created earlier
+
+![Inspector](./imgs/Inpsector-EdgeMaterialCornerOuter.png)
+
+## Multiple Edge Materials in One Edge
+- You can add as many Edge Meta Materials as you want to a Shape Material, each with their own Edge Material
+- For instance, you can add an additional egde with a rock texture (and its own set of corner textures) and have it render behind the grass
+ - To have it render behind the grass, Set the Z index of the meta material
+
+![Inspector](./imgs/Inpsector-EdgeMaterials2.png)
+
+## Normal Range
+- Each Meta material has a Normal Range
+- The Normal Range indicates when a texture should be rendered
+ - If the normal range is 0 - 360 or 0 - 0, then any angle is considered in range and the edge will always render
+ - Angle "0" is Facing directly Right
+ - Angle "90" is Facing directly Up
+ - Angle "180" is Facing directly Left
+ - Angle "270" is Facing directly Down
+
+- If you wanted to, for example:
+ - Have rocks display on the bottom part of the shape only
+ - Have grass display on the sides and top of the shape only
+- You could:
+ - Set the grass Normal Range to 0 - 180
+ - Set the rock Normal Range to 181 - 359
+
+![Inspector](./imgs/Inpsector-EdgeMaterialsNormalRange.png)
+
+## Material Overrides
+- Using Material Overrides will allow you to change how specific edges are rendered
+- For Example, to prevent the left edge from rendering, we'll do the following:
+ - Select the edge edit button from the toolbar ![]( ./imgs/icon_edge.png )
+ - Right Click the left edge of the shape
+ - Press the "Material Override" Button
+ - Uncheck the "Render" Checkbox
+
+![Edge NoRender]( ./imgs/EdgeEdit-NoRender.png )
+
+- You can use material overrrides to also specify a specific material for a single edge
+- For example, Checking Render and choosing the "Rock" Edge Material will cause the edge to render as rocks, even though the NormalRange configuration would otherwise have it render as grass
+
+## Multiple Textures
+- If more than one texture is specified for an Edge Material, you can specify which texture should be used
+- Enter Point Edit mode, mouseover a point, and scroll up or down to change the texture index
+
+# Anchoring Nodes to the Shape
+- To anchor nodes directly to the SmartShape2D node, use SmartSahpeAnchor2D
+- You can then make nodes children to the anchor
diff --git a/src/addons/rmsmartshape/documentation/Resources.md b/src/addons/rmsmartshape/documentation/Resources.md
new file mode 100644
index 0000000..89c9be6
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Resources.md
@@ -0,0 +1,87 @@
+SmartShape2D - Resources
+---
+
+# Shape Materials
+Shape materials provide all the texture and collision information needed by the SmartShape nodes.
+Once a shape material is defined, it can be easily reused by any number of SmartShape2D nodes.
+
+- Edge Meta Materials
+ - An array of resources of type SS2D_Material_Edge_Metadata
+- Fill Textures / Fill Texture Normals
+ - Used as the texture for the inside of the polygon for Closed Shapes
+ - Currently, only the first texture can be used, multiple textures may be supported at a later date
+- Fill Texture Z Index
+ - Each Edge Meta Material has a ZIndex indicating which edges are drawn first
+ - This sets the ZIndex for the fill texture
+ - This allows the user to draw the fill texture in front of some edges or behind others
+- Fill Mesh Offset
+ - The Offset of the Fill Mesh
+ - Can be used to grow / shrink the fill mesh
+- Render Offset
+ - Every edge in the shape will be offset by this amount
+- Weld
+ - Whether or not to weld the last quad of an edge with the first quad of the next edge
+
+# Edge Meta Material
+An Edge Meta Material doesn't contain the actual textures used to render an edge like **Edge Material** does.
+Instead, this resource contains a single **Edge Material** and describes how and when to render the edge.
+
+- Normal Range
+ - The angles at which an edge is allowed to be rendered
+- Weld
+ - Whether or not to weld the quads in this edge
+- Render
+ - Whether or not this edge is visible
+- Z Index
+ - Dictates the order in which edges are drawn
+- Offset
+ - Offset of the edge
+ - Can use a positive or negative value to draw the edges closer or further from the shape
+
+# Normal Range
+The Normal Range indicates when a texture should be rendered.
+Each shape will compare the Surface Normal of an edge to the Normal Range in each Edge Meta Material.
+If the edge's Normal is inside a Meta Material's Normal Range, the Meta Material's Edge Material is rendered.
+
+- A Normal Range is specified in Degrees
+ - If the normal range is 0 - 360 or 0 - 0, any angle is considered in range and the edge will always render
+ - Angle "0" is Facing directly Right
+ - Angle "90" is Facing directly Up
+ - Angle "180" is Facing directly Left
+ - Angle "270" is Facing directly Down
+
+# Edge Material
+The actual textures used to define an edge
+
+For all cases, using texture normals is completely optional
+## Textures / Normals
+- The primary textures used for the edge
+- At least one texture must be defined
+- Example: ![Grass]( ./imgs/grass.png )
+## Taper Textures / Normals
+These textures will be used as the first or last quad in an edge.
+They're named "Taper Textures" because the purpose is to show the edge "tapering off"
+- Textures_Taper_Left is the first quad in an edge
+ - Example: ![Grass Taper Left]( ./imgs/grass-taper-left.png )
+- Textures_Taper_Right is the final quad in an edge
+ - Example: ![Grass Taper Right]( ./imgs/grass-taper-right.png )
+## Corner Textures / Normals
+These textures will be used when the edge forms a sharp corner (80 degrees - 100 degrees)
+These are used because corners can look warped when using only regular textures
+- Texture_Corner_Inner is used when the corner forms an inner corner
+ - Example: ![Grass Corner Inner]( ./imgs/grass-corner-inner.png )
+- Texture_Corner_Outer is used when the corner forms an outer angle
+ - Example: ![Grass Corner Outer]( ./imgs/grass-corner-outer.png )
+## Fit Mode
+Most likely, the textures you use will not *perfectly* fit the polygon.
+This setting allows you to determine how SmartShape will rectify this.
+
+Differt options may look better or worse depending on the art-style.
+
+- Sqush and Stretch
+ - Texture will be mutated
+ - Either slightly squished or stretched to fit the polygon
+- Crop
+ - Texture will not be mutated
+ - Texture will simply be cropped when changing from one texture to the next
+
diff --git a/src/addons/rmsmartshape/documentation/Shapes.md b/src/addons/rmsmartshape/documentation/Shapes.md
new file mode 100644
index 0000000..d618d44
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Shapes.md
@@ -0,0 +1,60 @@
+SmartShape2D - Shapes
+---
+
+Each shape consists of a set of points. You can directly edit either the points or the edges between the points in the viewport.
+
+Shapes are configured to use a [Shape Material]( ./Resources.md#ShapeMaterial ) which determines how the shape is rendered.
+
+There are three kinds of shapes:
+- ![OpenShapeImg]( ./../assets/open_shape.png ) **Open Shape**
+ - This shape's final point **doesn't** connect to its first point.
+ - This shape **doesn't** make use of the "Fill Textures" parameter in the ShapeMaterial.
+- ![ClosedShapeImg]( ./../assets/closed_shape.png ) **Closed Shape**
+ - This shape's final point **does** connect to its first point.
+ - This shape **does** make use of the "Fill Textures" parameter in the ShapeMaterial.
+- ![MetaShapeImg]( ./../assets/meta_shape.png ) **Meta Shape**
+ - This shape sets the points of all children shapes.
+ - Changing the points of any children shapes will also change the meta shape along with all the meta shapes children.
+ - Can be edited directly if contains only Open shapes.
+ - If children include Closed shapes, should only edit the closed shapes.
+
+# Properties
+## Editor Debug
+- Will show the bounding box for each quad in the mesh of edges.
+- Can be helpful to illustrate why a shape doesn't look the way you expect.
+## Flip Edges
+- Will flip the edges of the shape (invert y).
+## Render Edges
+- Whether or not the edges of the shape should be rendered.
+## Collision Size
+- Size of the collision shape.
+## Collision Offset
+- Offset of where the collision shape starts and ends.
+- A **positive** value offsets the collision shape **outwards**.
+- A **negative** value offsets the collision shape **inwards**.
+## Tessellation Stages
+- Number of stages in the curve tessellation process (Uses Curve2D Internally).
+- First Param in Curve2D.tessellate.
+- See [Curve2D Documentation](https://docs.godotengine.org/en/3.2/classes/class_curve2d.html#class-curve2d-method-tessellate).
+## Tessellation Tolerence
+- Tolerence Degrees in the curve tessellation process (Uses Curve2D Internally).
+- Second Param in Curve2D.tessellate.
+- See [Curve2D Documentation](https://docs.godotengine.org/en/3.2/classes/class_curve2d.html#class-curve2d-method-tessellate).
+## Curve Bake Interval
+- Bake interval value for Curve2D.
+- See [Curve2D Documentation](https://docs.godotengine.org/en/3.2/classes/class_curve2d.html#class-curve2d-property-bake-interval).
+## Collision Polygon Node Path
+- The path to the CollisionShape that the SmartShape will use for collision.
+- Is Autoset when pressing the generate collision button.
+## Shape Material
+- The material that this shape will use to render itself.
+## Points
+- **There is no need to edit this property by hand, but you can if you'd like.**
+- Contains all of the points and meta-data for the points contained in this shape.
+- This data structure is updated as you manipulate the shape.
+## Material Overrides
+- **There is no need to edit this property by hand, but you can if you'd like.**
+- When an edge is given a "Material Override" the data for that edge is stored here.
+- This data structure is updated as you manipulate the shape.
+![EdgeData Popup]( ./imgs/EdgeEdit-MaterialOverride.png )
+
diff --git a/src/addons/rmsmartshape/documentation/Toolbar.md b/src/addons/rmsmartshape/documentation/Toolbar.md
new file mode 100644
index 0000000..2a494a5
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/Toolbar.md
@@ -0,0 +1,39 @@
+SmartShape2D - Toolbar
+---
+![Toolbar Default State](./imgs/Toolbar-PointEdit.png)
+# Create Mode
+- In this mode you can start creating a new shape.
+- Left-Click anywhere to add a new point.
+- Press ESCAPE to exit create mode.
+- Hold down ALT and Left-Click to create a point between the two points closest to your mouse.
+# Point Mode
+- In this mode you can add, delete, and move all of the points that make up a shape
+- To **Add** a new point to the shape:
+ - Hold down ALT and Left-Click anywhere on the viewport to add a point between the two points closest to your mouse.
+ - Left-Click on an edge between two points.
+- To **Move** a point, Left-Click on any point and drag
+- To **Delete** a point, Right-Click on any point
+- To set the **Control Points** of a point (for curves), hold **Shift**, Left Click on any point and drag
+ - After the Control Points have been set, you can edit them individually by Left-Clicking and dragging
+ - You can delete control points by right clicking them
+ - To make an empty clone SmartShape2D, hold down ALT + SHIFT and Left-Click anywhere in the viewport.
+# Edge Mode
+- In this mode you can Move Eges and choose how specific edges are rendered
+- To **Move** an Edge, Left Click and Drag the Edge
+- To **Change an Edges Rendering**, right click the edge and press "**Material Override**"
+![EdgeData Popup]( ./imgs/EdgeEdit-MaterialOverride.png )
+
+- This popup allows you to **change how edges are rendered**
+ - **Render** will toggle whether or not this edge will be drawn with Edge Materials
+ - **Set Material** allows you to choose a specific Edge Material to use to render this edge
+# Origin Set
+- This tool allows you to set the origin of any SmartShape
+- To **Set the Origin** Left Click anywhere on the viewport
+# Generate Collision
+- If you want your shape to have collision, press this button to autogenerate the collision nodes
+- The shape will be made a child of a newly created **StaticBody2D**
+- A sibling node, **CollisionPolygon2D** will also be created and added to the SceneTree
+ - The "Collision Polygon" parameter of the Shape will be set to this sibling **CollisionPolygon2D**
+# Snapping
+When Moving / Adding points, snapping will cause the positions of the points to snap to the grid. This works the same as Godot's built-in snapping.
+You can have snapping either use Global Space, or space relative to the shape's origin.
diff --git a/src/addons/rmsmartshape/documentation/VersionHistory.md b/src/addons/rmsmartshape/documentation/VersionHistory.md
new file mode 100644
index 0000000..a217bee
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/VersionHistory.md
@@ -0,0 +1,119 @@
+Version History
+---
+
+# 2.x
+## 2.2
+January 4th 2021
+## Fix
+- Fix for crash that would occur when points were aligned *just* right
+- See issue 66
+ + https://github.com/SirRamEsq/SmartShape2D/issues/66
+## Features
+- Each Edge Material can now have a Material (Shader)
+- Each Edge Material Meta can have a z-index and z-as-relative set
+- See issue 64
+ + https://github.com/SirRamEsq/SmartShape2D/issues/64
+
+## 2.1
+December 14th 2020
+### Significant Changes from 2.0
+- Improved Width handling
+- Improved Welding
+- Rendering is now achieved by having multiple child-nodes each render a piece of the shape
+ + Previously, all the rendering was done by the shape node
+ + Improves performance
+ + Fixes lighting bugs
+- Point Creation mode reimplemented
+ + Mode active by default
+ + Can be exited by pressing ESC
+- Several usability additions
+ + Hotkey for grabbing closest point
+ + Hotkey for creating new shape at point
+ + Width Grabber for closest point
+ + Preview for adding points
+- Several Bug fixes and issues closed
+### New Features
+- Meta Shapes Introduced
+- "Fit mode" added to edge material
+ + Can either squash and stretch the texture or crop it
+### Minor Changes
+- Changes to GUI Theme
+ + More in line with standard Godot
+- Add windows scripts for running unit tests
+- Changed default snap settings to 8x8 pixels
+
+
+## 2.0
+September 7th 2020
+### Significant Changes from 1.0
+- Edge Textures are no longer determined by a cardinal direction (UP, DOWN, LEFT, RIGHT)
+ - Instead, a starting and ending normal angle is specified for each edge
+- Textures are now defined per-edge instead of per-shape
+### New Features
+- Taper textures
+ - Instead of simply ending, the user can have an edge "taper-off"
+- Editing by Edges
+- Material Overrides
+### Internal Changes
+- Completely overhauled everything
+- A rudimentary constraint system is in place
+ - Closed shapes will add a point when closing, then constrain the added point's position to the first point
+- Points are no longer refered to by index, they are refered to by keys
+ - This enables points to have relationships that aren't affected when:
+ - Adding/Removing a point
+ - Changing orientation of the poly
+- Many Unit and Integration tests
+ - Refactored original working code to better support testing
+- Kept original scripts and classes from version 1.0 to ease importing
+
+# 1.x
+## Changes in 1.3
+This update primarily fixes bugs and improves existing features to be more usable.
+### Changes
+- Merged top/left/right/bottom offset into one variable. render offset
+### Fixes
+- Input bugs
+- Edge Flipping
+- Polygon orientation bugs
+- Quad Welding
+- Corer quad generation and welding
+- Collision variables in the RMSmartShapeMaterial working as intended
+
+## Changes in 1.2
+### Tweaks
+- Refactoring
+- Toolbar takes less space
+- Minor bug fixes
+
+### New Features
+- Bezier Curves!
+ - Hold shift on a control point to create a curve
+- Corner Quads!
+ - Both inner and outer corner quads are now generated
+ - Textures can be speciied for each direction of both inner and outer quads
+- Edge Moving!
+ - Can move an edge (two points) by pressing SHIFT in move mode and dragging the edge
+
+## Changes in 1.1
+- Refactoring
+- Fixed Errors Occuring when Texture Arrays are size '0' but not null
+- Fixed sync between texture, flip, and width indicies
+ - Would sometimes share a single array between the 3 vars
+ - Are all unique now
+
+- Snapping
+- More informative toolbar
+
+## Changes in 1.0
+- Fixed many debug errors reported related to indexing beyond array sizes
+- Fixed control point wrapping of RMSmartShapeAnchor2D nodes anchored to RMSmartShape2D nodes.
+- Tested on newly released 3.2 Godot.
+
+## Changes in 0.91
+- Edges are calculated in relationship to object space instead of screen space
+- Added option to allow user to let the object recalculate edges based on screen space.
+- Fixed uv calculations for flipped textures.
+- Fixed uv bug for edge sections less than half the size of texture width
+- Added option to allow for a RMSmartShapeAnchor to mimic scale of monitored node
+- Removed sections of code related to clockwise versus clockwise checks, very specifically regarding the direction of texture edges.
+- Corrected normal texture bug for fill and edge rendering
diff --git a/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png
new file mode 100644
index 0000000..56c0070
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png.import b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png.import
new file mode 100644
index 0000000..c53ac4a
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/EdgeEdit-MaterialOverride.png-c7a5aea83c0bc6ee259d6cef1594c77f.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/EdgeEdit-MaterialOverride.png"
+dest_files=[ "res://.import/EdgeEdit-MaterialOverride.png-c7a5aea83c0bc6ee259d6cef1594c77f.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png
new file mode 100644
index 0000000..789ac59
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png.import b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png.import
new file mode 100644
index 0000000..f6309b3
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/EdgeEdit-NoRender.png-1d97b26c3d0eee9eb76fb4a79bd6dfec.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/EdgeEdit-NoRender.png"
+dest_files=[ "res://.import/EdgeEdit-NoRender.png-1d97b26c3d0eee9eb76fb4a79bd6dfec.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png
new file mode 100644
index 0000000..e031a52
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png.import b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png.import
new file mode 100644
index 0000000..b7c8d92
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Inpsector-EdgeMaterial.png-2dd9d7fff3a72fa97b1cf38de6ec9479.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterial.png"
+dest_files=[ "res://.import/Inpsector-EdgeMaterial.png-2dd9d7fff3a72fa97b1cf38de6ec9479.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png
new file mode 100644
index 0000000..42bb12b
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png.import b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png.import
new file mode 100644
index 0000000..ab3d3a7
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Inpsector-EdgeMaterialCornerOuter.png-870b54a58f770af314a5de1f57a490a4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialCornerOuter.png"
+dest_files=[ "res://.import/Inpsector-EdgeMaterialCornerOuter.png-870b54a58f770af314a5de1f57a490a4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png
new file mode 100644
index 0000000..f03a474
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png.import b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png.import
new file mode 100644
index 0000000..752c22b
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Inpsector-EdgeMaterials2.png-2a3fe3208119be44d124878d1e4fe776.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterials2.png"
+dest_files=[ "res://.import/Inpsector-EdgeMaterials2.png-2a3fe3208119be44d124878d1e4fe776.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png
new file mode 100644
index 0000000..cfc3a68
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png.import b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png.import
new file mode 100644
index 0000000..4eb7434
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Inpsector-EdgeMaterialsNormalRange.png-04db8b8e19f05b4c1f11ce3a77ced886.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/Inpsector-EdgeMaterialsNormalRange.png"
+dest_files=[ "res://.import/Inpsector-EdgeMaterialsNormalRange.png-04db8b8e19f05b4c1f11ce3a77ced886.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png b/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png
new file mode 100644
index 0000000..df063e4
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png.import b/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png.import
new file mode 100644
index 0000000..a517fd5
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/NewNode-SS2D_Nodes.png-bd4dff6d5b47fff801093faee40697ce.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/NewNode-SS2D_Nodes.png"
+dest_files=[ "res://.import/NewNode-SS2D_Nodes.png-bd4dff6d5b47fff801093faee40697ce.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png b/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png
new file mode 100644
index 0000000..1a96705
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png.import b/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png.import
new file mode 100644
index 0000000..fbd8953
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/PluginActivate.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/PluginActivate.png-68eb5795e1fa24e74eda48dc64268c0d.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/PluginActivate.png"
+dest_files=[ "res://.import/PluginActivate.png-68eb5795e1fa24e74eda48dc64268c0d.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png
new file mode 100644
index 0000000..d768f8e
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png.import b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png.import
new file mode 100644
index 0000000..75b0095
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ShapeClosed-FillTextured.png-1a87a66b3a2f9d438257692a884deb5c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/ShapeClosed-FillTextured.png"
+dest_files=[ "res://.import/ShapeClosed-FillTextured.png-1a87a66b3a2f9d438257692a884deb5c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png
new file mode 100644
index 0000000..275b25c
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png.import b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png.import
new file mode 100644
index 0000000..f38ea99
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ShapeClosed-Untextured.png-0fcc7cbe4caa639af92127ec127f0bac.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/ShapeClosed-Untextured.png"
+dest_files=[ "res://.import/ShapeClosed-Untextured.png-0fcc7cbe4caa639af92127ec127f0bac.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png b/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png
new file mode 100644
index 0000000..8bc8b56
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png.import b/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png.import
new file mode 100644
index 0000000..dc3ffa9
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/Toolbar-PointEdit.png-7efb32b5804974be369a10fa715f1af6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/Toolbar-PointEdit.png"
+dest_files=[ "res://.import/Toolbar-PointEdit.png-7efb32b5804974be369a10fa715f1af6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png
new file mode 100644
index 0000000..f5963d7
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png.import b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png.import
new file mode 100644
index 0000000..fd19d40
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/faq-texture-repeat-import.png-19fb6163a4afaadefe60167f919fcb9c.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/faq-texture-repeat-import.png"
+dest_files=[ "res://.import/faq-texture-repeat-import.png-19fb6163a4afaadefe60167f919fcb9c.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png
new file mode 100644
index 0000000..1ceedbf
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png.import b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png.import
new file mode 100644
index 0000000..68d83aa
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/faq-texture-repeat.png-c4a425b8db8cf215ef1a1480682cabc9.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/faq-texture-repeat.png"
+dest_files=[ "res://.import/faq-texture-repeat.png-c4a425b8db8cf215ef1a1480682cabc9.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png b/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png
new file mode 100644
index 0000000..59c4705
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png.import b/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png.import
new file mode 100644
index 0000000..619f172
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-corner-inner.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass-corner-inner.png-b9a5de2b6bdd38ff73b2b583c9b15dea.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/grass-corner-inner.png"
+dest_files=[ "res://.import/grass-corner-inner.png-b9a5de2b6bdd38ff73b2b583c9b15dea.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png b/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png
new file mode 100644
index 0000000..5aa5b59
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png.import b/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png.import
new file mode 100644
index 0000000..8a52f25
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-corner-outer.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass-corner-outer.png-21f27b1017c17ab14dae6a21669e58cb.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/grass-corner-outer.png"
+dest_files=[ "res://.import/grass-corner-outer.png-21f27b1017c17ab14dae6a21669e58cb.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png b/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png
new file mode 100644
index 0000000..c28f026
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png.import b/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png.import
new file mode 100644
index 0000000..184951b
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-taper-left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass-taper-left.png-64af7681eb7bf74724d6cf15d35f0acc.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/grass-taper-left.png"
+dest_files=[ "res://.import/grass-taper-left.png-64af7681eb7bf74724d6cf15d35f0acc.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png b/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png
new file mode 100644
index 0000000..c3803fc
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png.import b/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png.import
new file mode 100644
index 0000000..b33aab2
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass-taper-right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass-taper-right.png-cf9d8506b4383200c1b2f73bbee890ca.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/grass-taper-right.png"
+dest_files=[ "res://.import/grass-taper-right.png-cf9d8506b4383200c1b2f73bbee890ca.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass.png b/src/addons/rmsmartshape/documentation/imgs/grass.png
new file mode 100644
index 0000000..caa0420
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/grass.png.import b/src/addons/rmsmartshape/documentation/imgs/grass.png.import
new file mode 100644
index 0000000..f048d8a
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/grass.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass.png-fa15bea5df6ff44d00ce33d862b13772.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/grass.png"
+dest_files=[ "res://.import/grass.png-fa15bea5df6ff44d00ce33d862b13772.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/icon_edge.png b/src/addons/rmsmartshape/documentation/imgs/icon_edge.png
new file mode 100644
index 0000000..e2e08d6
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/icon_edge.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/icon_edge.png.import b/src/addons/rmsmartshape/documentation/imgs/icon_edge.png.import
new file mode 100644
index 0000000..689cddb
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/icon_edge.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/icon_edge.png-023aa31bbe8d12b90535eac629c65c24.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/icon_edge.png"
+dest_files=[ "res://.import/icon_edge.png-023aa31bbe8d12b90535eac629c65c24.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0
diff --git a/src/addons/rmsmartshape/documentation/imgs/sample.gif b/src/addons/rmsmartshape/documentation/imgs/sample.gif
new file mode 100644
index 0000000..0e9064e
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/sample.gif
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/sample.png b/src/addons/rmsmartshape/documentation/imgs/sample.png
new file mode 100644
index 0000000..bf47a3e
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/sample.png
Binary files differ
diff --git a/src/addons/rmsmartshape/documentation/imgs/sample.png.import b/src/addons/rmsmartshape/documentation/imgs/sample.png.import
new file mode 100644
index 0000000..6182bea
--- /dev/null
+++ b/src/addons/rmsmartshape/documentation/imgs/sample.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/sample.png-563be6bc44385bf1bd8ae20683490cac.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rmsmartshape/documentation/imgs/sample.png"
+dest_files=[ "res://.import/sample.png-563be6bc44385bf1bd8ae20683490cac.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+stream=false
+size_limit=0
+detect_3d=true
+svg/scale=1.0