Giter Site home page Giter Site logo

albin-johansson / tactile Goto Github PK

View Code? Open in Web Editor NEW
97.0 5.0 6.0 118.32 MB

A tilemap editor that aims to be simple, fast and lightweight.

License: GNU General Public License v3.0

CMake 1.26% C++ 98.41% Python 0.33%
tilemap tilemap-editor editor game-development level-editor indie modern-cpp cpp cross-platform gamedev

tactile's Introduction

Tactile

License version CI: Windows CI: Ubuntu CI: macOS

A tilemap editor that aims to be simple, fast and lightweight.

Splash

Aim

  • Easy to learn and easy to use
  • Workflow optimized for common actions
  • Well documented and high-quality source code
  • Lightweight feel and scalable performance
  • Cross-platform: works on Windows, macOS, and Linux

Features

  • Extensive and intuitive undo/redo support
  • Various layer types
    • Tile layers
    • Object layers
    • Group layers
  • Supports an intuitive and human-readable YAML map format
  • Read and write support for the JSON and XML map formats used by Tiled
  • Export maps as Godot scenes (see godot.md)
  • Intuitive mouse tools
    • Tile stamp tool
    • Eraser tool
    • Bucket fill tool
    • Rectangle tool
    • Ellipse tool
    • Point tool
  • Components (attachable bundles of attributes, as commonly found in game engines)
  • Properties that can be attached to almost anything: maps, layers, objects, tiles, etc.
    • Vector properties, with support for 2D/3D/4D vectors of both integers and floats
  • Tile animations
  • Tile compression support, using Base64 encoding with either Zlib or Zstd
  • Helpful error messages when things go wrong, e.g. when parsing corrupted maps
  • Language support for American English, British English, and Swedish
  • Various editor themes, both dark and light
  • Easy to install (and uninstall) using the installers bundled along releases

Documentation

More documentation can be found in the docs directory.

tactile's People

Contributors

albin-johansson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tactile's Issues

Layer widget.

  • Add layer
  • Remove layer
  • Duplicate layer
  • Change layer visibility
  • Change layer order
  • Change layer opacity
  • Rename layer

Add projects

Add support for projects, i.e. a collection of maps, tilesets, component definitions, and miscellaneous templates to make it easier to keep track of maps developed for a game.

Requirements

  • A project file format needs to be designed, preferably using YAML (or possibly JSON)
  • A new dock widget that provides an overview of an active project would be nice
  • It should be possible to define templates for maps, e.g. to define default properties.
  • There should be support for project-level component definitions, common for all maps
  • There should be support for project-level tilesets, common for all maps
  • Allow for combining maps into a world

Provide option to manually locate tileset image if not found

When a map is opened that features tilesets which have images that cannot be resolved, provide feedback to the user and make it possible for the user to manually specify the location of the image. It should also be possible to ignore the unresolved tileset and ignore it.

  • Add "Resolve tileset image" dialog.

Let users resolve broken tileset image paths

When a path to a tileset image is detected to be broken when trying to open a map, the editor should ask the user to resolve the broken image path manually, instead of showing the import error dialog.

Add support for compressed tile layer data

Requirements

  • It should be possible to encode and compress data using at least Zlib and Base64 encoding
  • Update YAML format to support compression
  • Make sure Tiled compatibility is updated

Support for Exporting Godot Scenes

It would be nice to be able to export Tactile maps as Godot scenes.

Possible issues

  • A TileMap in Godot, which corresponds to a tile layer, only allows for a single associated TileSet. This will require some clever logic in the Godot emitter to split layers using multiple tilesets, or added support for tilesets with multiple textures in Tactile.
  • There is no collision shape for ellipses in Godot, which will require an approximation.
  • It's not obvious how components should be exported, probably as some form of metadata

Requirements

  • There should be a dialog for exporting maps as Godot scenes, e.g. Map -> Export -> Godot Scene
  • The user should be able to specify...
    • the node type used for entities such as rectangle, ellipse, and point objects
    • the Godot project structure, including paths to textures, tilesets, and maps
    • whether the TileSet data is embedded in the generated scene (should initially assume the same value as for tilesets in normal maps, but let the user override this)
    • possibly a strategy for dealing with ellipse objects (use greatest value, use width, use height, etc.)

Ignore layers that aren't tile layers

Current map import implementations do not check the type of layers which can lead to crashes.

  • Make JSON and TMX import check types of layers.
  • Ideally, provide some feedback (dialog) to user that the map that was imported uses unsupported features.
  • In general, avoid throwing exceptions when importing a map goes wrong. Change behaviour to return a null map_document pointer.

Add support for object reference properties

Object reference properties have been in Tactile for quite a while, but they cannot be modified, only read.

Requirements

  • Let users reset object properties
  • Let users set object properties by selecting one of the objects in any of the object layers
  • Render an arrow from objects that feature set object references to the referenced object

Support opening and editing tilesets

Just like multiple maps can be opened in the central document tab widget, tilesets should be editable in the same way.

Some of the codebase has already been written with this feature in mind, but there will be a lot more checks to differentiate map registries and tileset registries, etc.

Requirements

  • The layer dock should be hidden when tilesets are opened and active
  • There should be a tile animation dock widget
  • There should be a tile collision dock widget

Improve viewport behaviour

Improve gui::map_view viewport handling, especially related to centering of maps. This might include using custom scrollbars (see tiled::FlexibleScrollbar for example).

Improve laptop UX

  • Zoom using touchpad
  • Move viewport using touchpad
  • Move tileset viewport using touchpad

Add main editor widget

  • Widget that supports multiple maps.
  • Model support for multiple maps.
  • Support for adding new maps.
  • Support for removing maps.

Support custom themes.

  • Implement support for importing custom theme JSON files.
  • Add tab in settings dedicated to creating a custom theme.

Support arbitrary tile selections in tilesets

Allow for selecting multiple tiles in tilesets by clicking on the desired tiles, not only by using a rubber band selection.

This will require a slight redesign of tile selection events, which currently use Region structs to represent the selection.

Requirements

  • The existing rubber band behavior should be preserved
  • Allow cherry-picking tiles as a part of the tileset tile selection
  • Make sure that the stamp tool preview handles this correctly

Add object layers.

  • Add object layers to model
  • Parse object layers
  • Write object layers
  • Add point objects
  • Add rectangle objects

Add randomizer mode for stamp tool

Add a "randomizer" mode for the stamp tool which randomly selects one of the selected tiles for each tile the tool is applied to during a stroke.

Determine behavior when tilesets are removed

Currently, when a tileset is removed, the tile layers remain untouched. This means that they may contain invalid tile identifiers.

There are several ways to deal with this. We could add an action for fixing invalid tile identifiers, going through the tiles and setting invalid ones to be empty. Alternatively, the command responsible for removing tilesets could cache all tiles from the tileset, and subsequently set them to be empty. This approach would always keep the map in a "good" state, and allow for better state restoration upon undoing the tileset removal.

Since it's possible to import maps with invalid tiles, we should probably pursue both strategies.

Requirements

  • Add "Fix Invalid Tiles" action
  • Make tileset removal command cache the affected tiles, and restore them as needed

Black screen when pressing SUPER+T

Just like the tittle says, I get black screen when I'm trying to use this extension, making this extension unusable.

Ubuntu 22.04.1 LTS
Gnome: 42.4
Windowing system: X11

Implement "Save" action

Make it possible to save changes to documents without having to use "Save As...".

  • Disable "Save" action when document is "up-to-date".
  • Update document name (path) after "Save As...".

Add support for properties.

Add support for adding custom properties to layers (and later to objects).

  • Properties widget
  • Undo/Redo support
  • Parse properties from file
  • Write properties to file
  • Ability to view map properties
  • Ability to view tileset properties
  • Ability to view object properties

Add minimap widget

Add a minimap dock widget, which renders a miniature version of the opened map along with the currently visible region.

Create tileset widget

  • Special empty page layout with helpful message.
  • Widget that supports multiple tilesets.
  • Model support for multiple tilesets.
  • Support for adding tilesets from images.
  • Support for removing tilesets.

Add preview for bucket tool

A preview, similarly to the preview for the stamp tool, should be shown for the bucket tool.

It will be important to make sure that the preview doesn't update unnecessarily, as running the flood fill algorithm necessary to show a preview may be quite expensive. For this reason, it be a good idea to let users opt-out of this feature.

Fix tileset tab white line bug

With multiple tilesets, there is a white line underneath the tileset tabs. This is likely caused by the custom tabs used to enable the double-click to edit behaviour. Look into the code for styling the tabs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.