Reads files from the Tiled editor into Rust

Overview

rs-tiled

Rust Crates.io

Read maps from the Tiled Map Editor into rust for use in video games. It is game engine agnostic and pretty barebones at the moment. Documentation is available on docs.rs.

Code contributions are welcome as are bug reports, documentation, suggestions and criticism.

There is a package on crates.io, to use simply add:

tiled = "0.9.5"

to the dependencies section of your Cargo.toml.

Example

use tiled::map::Map;

fn main() {
    let map = Map::parse_file("assets/tiled_base64_zlib.tmx").unwrap();
    println!("{:?}", map);
    println!("{:?}", map.tileset_by_gid(22));
}

Licences

assets/tilesheet.png by Buch (https://opengameart.org/content/sci-fi-interior-tiles)

Licenced under MIT

Comments
  • Add template support

    Add template support

    Whew, this was a bigger change than I thought it would be. I've made a few assumptions about the best way to design and implement things, so feel free to let me know if it should be restructured any.

    Relates to #145

    ======

    This patch adds support for templates. Templates are a property on Objects that specify an external file to load object properties by default. In this implementation, templates are not visible to the end user, their behaviour happens "automatically".

    As it parses, the Map will generate a list of templates, with each being identified by their ID.

    Templates introduce the concept of a tile that is bound to a tileset that is not part of the main map's list of tilesets. For this reason, the tileset_index() function now returns Option. Internally, an enum is used to signify whether the tileset is map or template bound.

    I had to change the signature of the Resource cache, because the generator function now needs access to the cache.

    breaking feature 
    opened by RossBrunton 39
  • Add SFML example

    Add SFML example

    Adds a rough demo using SFML for rendering. Closes #35.

    Extremely WIP. Right now the example is really long because a lot of boilerplate is required. If you realize any way to reduce this boilerplate without making the example more specific, let me know.

    help wanted 
    opened by aleokdev 25
  • Add ggez example

    Add ggez example

    Adds a rendering demo for ggez. Supports multiple layers, multiple tilesets, and parallax. Also draws basic shape objects.

    You can middle mouse + drag to pan around and scroll to zoom. Right click also toggles a demo animation that makes the tiles move around.

    It has pretty good performance because it uses ggez's SpriteBatches for tile rendering. It could be better by caching and reusing the batches but I figured I'd leave that out to simplify a bit.

    I made a nicer example map for testing locally but I'll make a separate PR for that I think. Since the current example map is large and mostly empty, and this centers it in the window at the start, you need to zoom out or pan in order to see it (the other nicer map has a more reasonable size).

    (this does not properly hook into ggez's filesystem for loading external tilesets/images as that would still require something like #100 I believe)

    This could probably still use a bit more clean up and commenting

    related: #134

    tests 
    opened by PieKing1215 18
  • Tileset::tiles does not contain all tiles

    Tileset::tiles does not contain all tiles

    Tileset::tiles only contains tiles that have some kind of custom attribute. This makes it confusing to use since it's not mentioned in the field docs.

    unsound 
    opened by aleokdev 18
  • Support Tiled 1.9 `class` property

    Support Tiled 1.9 `class` property

    Why

    Closes #234

    In Tiled 1.9 the "type" property was renamed to "class". My PR addresses this.

    How

    In addition to "type", the "class" property is parsed. If the former is not present, the latter takes its place. This way, the solution is compatible with both 1.9+ and older maps.

    After the below conversation, this is what I did:

    • Deprecated obj_type for Objects and tile_type for Tiles in favor of user_type. Added deprecation notices
    • Added user_type to Maps, Tilesets and Layers.
    • Both class and type XML params now resolve to user_type everywhere.

    Support for type/class is now implemented for the following entities:

    • Tiles in tileset (Tile)
    • Objects
    • Maps
    • Tilesets
    • Layers

    These are all places that I'm aware of.

    Test plan

    Tested locally on both old and new maps. I didn't add tests as I haven't found any existing ones (nor test fixtures) which have the "type" or "class" property set. Eventually, I can create/modify one if requested.

    opened by barthap 15
  • Expose constructors with a defaulted cache

    Expose constructors with a defaulted cache

    Right now all of our examples and test code uses a default &mut FilesystemResourceCache for loading, as it only handles a single map. It would be wise to expose a loading method that doesn't take in a cache and another one that does (with a _cached postfix) as it would confuse new users less and would result in less boilerplate for small applications and whatnot.

    enhancement 
    opened by aleokdev 14
  • Adopting this crate and moving it to mapeditor organization

    Adopting this crate and moving it to mapeditor organization

    Looking at the open pull requests, there are evidently quite a few people who would like to contribute improvements to this crate, but are unable to do so because unfortunately @mattyhall had not much time for reviews in the past months, as mentioned in https://github.com/mattyhall/rs-tiled/issues/103#issuecomment-940909303.

    I would like to propose we move this create into the mapeditor organization, and to gather a few co-maintainers that can help with pull requests. We can set up a review policy that every change needs at least one reviewer, to help ensure the quality of the crate.

    Personally I've only done a minimum amount of Rust coding, but I would be interested in helping to keep this crate up to date. I also think it would be nice if we could achieve to have "json" and "tmx" supported as features of the same crate, rather than having separate crates.

    Who would be interested in helping to maintain this crate? And what do you think about this, @mattyhall?

    opened by bjorn 14
  • Amethyst Integration

    Amethyst Integration

    Hi, I'm working on a game using the amethyst game engine and I'm planning on using this lib to do the map. It seems like it might be something useful to push back up stream so I wanted to create an issue to see if you wanted such a feature to get merged into this or a companion crate, and if so if you have any input on how you think it should be designed.

    I'm not exactly an expert with this library or amethyst or game development in general but my initial idea is to have a function that takes a tiled::Map and either returns an amethyst::renderer::SpriteSheet or output serialized data (possibly writing it to a file) that matches https://www.amethyst.rs/doc/latest/doc/amethyst_renderer/struct.SpriteSheetFormat.html.

    The first option seems more straightforward and efficient but it doesn't match the examples which are always loading sprite-sheets from files and it creates a common dependency between rs-tiled and part of amethyst, though it can be conditionally compiled with a feature. I'm not really sure which one is best.

    The function would also need to return something like a Vec<(Transform, SpriteRender)> which can be easily iterated over and added to the world as entities.

    If I'm way off base on this just let me know :)

    opened by yaahc 12
  • Implement Deref for wrapper types

    Implement Deref for wrapper types

    An experiment. Exposes data types but implements Deref<Target=TData> for wrapper types, leaving practically the same interface but also allowing the user to also use data types in more performance-critical parts.

    Closes #168.

    enhancement breaking 
    opened by aleokdev 9
  • Erase GIDs from the public interface

    Erase GIDs from the public interface

    Global tile IDs appear frequently in the codebase but I feel like they are not explained throughout, and they lack their own type so they can be confused with local (tileset) IDs.

    enhancement 
    opened by aleokdev 8
  • Add parallax support

    Add parallax support

    A minor update to support Tiled parallax information.

    The asset/tiled_parallax.tmx provides a map with three layers (Background, Middle, and Foreground), each with different parallax information (Middle being the default Tiled (1.0, 1.0)).

    The tests/test contains an example:

    fn test_parallax_layers() {
        let r = read_from_file_with_path(&Path::new("assets/tiled_parallax.tmx")).unwrap();
        for (i, layer) in r.layers.iter().enumerate() {
            match i {
                0 => {
                    assert_eq!(layer.name, "Background");
                    assert_eq!(layer.parallax_x, 0.5);
                    assert_eq!(layer.parallax_y, 0.75);
                }
                1 => {
                    assert_eq!(layer.name, "Middle");
                    assert_eq!(layer.parallax_x, 1.0);
                    assert_eq!(layer.parallax_y, 1.0);
                }
                2 => {
                    assert_eq!(layer.name, "Foreground");
                    assert_eq!(layer.parallax_x, 2.0);
                    assert_eq!(layer.parallax_y, 2.0);
                }
                _ => panic!("unexpected layer"),
            }
        }
    }
    

    The version is bumped to 0.9.6 to indicate the extended information.

    Thanks for a great crate by the way!

    enhancement 
    opened by perlindgren 8
  • Default zstd feature is unhelpful for wasm builds

    Default zstd feature is unhelpful for wasm builds

    Out of the box, adding tiled as a dependency of my project broke my WASM builds because zstd's default build does not support it. While I eventually learned that zstd is an optional feature in tiled, this does not appear to be documented anywhere, and there aren't good interfaces for discovering crate features.

    I've seen #228, and I have a couple possibilities to make the default experience better:

    • keep zstd as an optional feature but default disabled
    • replace zstd with another implementation that supports WASM (branch that implements this)
    • expose zstd's wasm crate feature somehow and document how to build for WASM? This is the least thought through of the alternatives because I haven't looked into it at all; I just saw that it exists.
    • clearly document how to get a wasm-capable build (and the limitations around embedded tilesets), but otherwise make no changes to the status quo
    opened by jdm 0
  • Optional GIDs feature

    Optional GIDs feature

    Probably the biggest reason people from <=0.9.5 aren't switching over to newer versions is that they rely on GIDs. Even if they are an internal detail of the TMX format, I'm beginning to believe removing them was a mistake. Even though they aren't reliable and may change when editing the map, they do function well by assigning unique numbers to tiles used within a map, which may be helpful when rendering or working on small projects.

    Maybe we should introduce them again as an optional feature?

    question feature 
    opened by aleokdev 1
  • tiled::FiniteTileLayer::get_tile returns empty tiles

    tiled::FiniteTileLayer::get_tile returns empty tiles

    https://docs.rs/tiled/latest/tiled/struct.FiniteTileLayer.html#method.get_tile

    Resulting in a single layer with just a couple of tiles overrides all layers under with tile id 0 when rendered.

    bug 
    opened by jruiss 1
  • Add `as_x` fns for layer types

    Add `as_x` fns for layer types

    Improves crate ergonomics. Most of the time when parsing you are only interested in one layer type at a time so it's much nicer to use layer.layer_type().as_tiles() than the whole match block. Specially nice for closures in filters:

    // Old
    let tile_layers = self
        .map
        .layers()
        .filter_map(|l|
            match l.layer_type() {
                tiled::LayerType::Tiles(tl) => Some((l, tl)),
                _ => None,
            }
        );
    
    // New
    let tile_layers = self
        .map
        .layers()
        .filter_map(|l| Some((l, l.layer_type().as_tiles()?)));
    

    Crates like serde_json do this with some of their enums.

    indecisive 
    opened by aleokdev 3
  • Move parsing functions to parse module

    Move parsing functions to parse module

    WIP. This PR moves all internal functions to the parse module. This has the advantage of providing a clear interface to the user & developers, as the structure of Tiled objects are now defined completely separate from how they are parsed. However, this PR still doesn't answer questions like "Should we make the parse functions public?" "How should we present the parse functions internally?" etc. For now the definitions have been moved literally to the XML/"common" module.

    Stopped mid-way since I realized a huge mistake with wangsets (The WangSetType type isn't accessible from outside and the compiler didn't complain somehow, even with the wang_set_type public WangSet member). Fixing this now in current. I wish we'd have implemented wangsets in next instead. Oh well.

    opened by aleokdev 0
  • Support for Web Assembly

    Support for Web Assembly

    The crate won't work on Web Assembly even with zstd disabled, because the load_tmx_map_from function internally calls File::open, which returns an error on wasm targets.

    enhancement help wanted feature 
    opened by Pietrek14 6
Releases(v0.10.2)
  • v0.10.2(Apr 26, 2022)

    This update fixes some small issues and also adds basic chunk utilities as described in #210, improving infinite tile layer usage.

    What's Changed

    • Fix deprecation references by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/196
    • Fix iterator lifetimes by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/201
    • Common layer interface by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/197
    • Remove .travis.yml by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/204
    • Remove outdated comment from example by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/205
    • Improve CI; Add rustfmt & clippy jobs by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/202
    • Update Zstd & add deps.rs badge by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/213
    • Fix some clippy warnings by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/214
    • Add basic chunk utilities to infinite layers by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/210
    • Update version to 0.10.2 by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/217

    Full Changelog: https://github.com/mapeditor/rs-tiled/compare/v0.10.1...v0.10.2

    Source code(tar.gz)
    Source code(zip)
  • v0.10.1(Mar 14, 2022)

    This update fixes a small documentation issue and adds a more streamlined way of loading assets. The old methods for loading maps and tilesets have been deprecated.

    Before:

    use tiled::{FilesystemResourceCache, Map};
    
    fn main() {
        let map = Map::parse_file(
            "assets/tiled_base64_zlib.tmx",
            &mut FilesystemResourceCache::new(),
        )
        .unwrap();
        println!("{:?}", map);
        println!("{:?}", map.tilesets()[0].get_tile(0).unwrap().probability);
    }
    

    Now:

    use tiled::Loader;
    
    fn main() {
        let mut loader = Loader::new();
        let map = loader.load_tmx_map("assets/tiled_base64_zlib.tmx").unwrap();
        println!("{:?}", map);
        println!("{:?}", map.tilesets()[0].get_tile(0).unwrap().probability);
        
        let tileset = loader.load_tsx_tileset("assets/tilesheet.tsx").unwrap();
        assert_eq!(*map.tilesets()[0], tileset);
    }
    

    See the docs for more detail.

    What's Changed

    • Make malformed tileset attributes error more accurate by @mswiger in https://github.com/mapeditor/rs-tiled/pull/194
    • Add loader type by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/193

    New Contributors

    • @mswiger made their first contribution in https://github.com/mapeditor/rs-tiled/pull/194

    Full Changelog: https://github.com/mapeditor/rs-tiled/compare/v0.10.0...v0.10.1

    Source code(tar.gz)
    Source code(zip)
  • v0.10.0(Mar 10, 2022)

    A big update!

    This new release changes the entire interface, focusing on making everything more streamlined. The four most important changes are:

    • Introduction of the ResourceCache trait, used to speed up loading for maps that share external assets (for now, only tilesets).
    • Hiding global IDs from the interface, translating to tileset index + local tile ID on load.
    • Introducing wrappers over data types (e.g. Layer, Tile, Object, etc) which Defer to the regular data types, but conveniently also contain a reference to the parent structure (Tileset in the case of tiles, Map for everything else) for easy access to functions that require both the data type and its container.
    • Adding documentation to the entire crate!

    Of course, there have been a lot of more additions and changes, including new features, bugfixes and everything in between.

    For 0.9.5 users it is very recommended that you check out the new examples for porting old code over.

    Another important update is that the repository has been moved to the official mapeditor organization and there are now three more maintainers: @aleokdev (me), @bjorn (creator of Tiled) and @PieKing1215.

    I'd like to thank @mattyhall for having maintained this crate for the last 7 years and for letting us continue the work of maintaining it, @bjorn for all the code reviews and feedback provided, and of course all the contributors that have joined us and users who have provided feedback and bug reports!

    Here's the full changelog:

    What's Changed

    • Reorganize crate by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/104
    • update Zstd to 0.9 by @nicoxxl in https://github.com/mapeditor/rs-tiled/pull/102
    • Fix markdown formatting in CONTRIBUTORS file by @rsaarelm in https://github.com/mapeditor/rs-tiled/pull/12
    • Add support for multiline string properties by @PieKing1215 in https://github.com/mapeditor/rs-tiled/pull/110
    • Add layer id parsing by @PieKing1215 in https://github.com/mapeditor/rs-tiled/pull/111
    • Added MIT license file by @bjorn in https://github.com/mapeditor/rs-tiled/pull/115
    • Support object properties. by @SiegeLord in https://github.com/mapeditor/rs-tiled/pull/114
    • Add Github Actions by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/117
    • Make layer ids optional and make tile layer name optional (like object layers) by @PieKing1215 in https://github.com/mapeditor/rs-tiled/pull/119
    • Refactor & document by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/106
    • Start updating README.md by @PieKing1215 in https://github.com/mapeditor/rs-tiled/pull/122
    • Start getting changelog up to date by @PieKing1215 in https://github.com/mapeditor/rs-tiled/pull/121
    • Flatten Vec<Vec> to Vec by @bjorn in https://github.com/mapeditor/rs-tiled/pull/128
    • CI: Added caching of Rust stuff to potentially speed up action by @bjorn in https://github.com/mapeditor/rs-tiled/pull/129
    • Expose types at the top level by @bjorn in https://github.com/mapeditor/rs-tiled/pull/132
    • Contain all layer types in an enum by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/131
    • Add parallax support by @perlindgren in https://github.com/mapeditor/rs-tiled/pull/101
    • Some Cargo.toml updates by @bjorn in https://github.com/mapeditor/rs-tiled/pull/139
    • Add layer tint color; Fix Color parsing issues by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/150
    • Hide GIDs as internal details by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/135
    • Add group layer support by @Anti-Alias in https://github.com/mapeditor/rs-tiled/pull/146
    • Better errors by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/152
    • Add SFML example by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/133
    • Hotfix: Fix CI by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/154
    • Make tileset names optional by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/155
    • Changed Rc to Arc by @Anti-Alias in https://github.com/mapeditor/rs-tiled/pull/156
    • Removing temp file by @Anti-Alias in https://github.com/mapeditor/rs-tiled/pull/159
    • Simplify internals by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/153
    • Refactor chunk system by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/157
    • Remove Data types from the interface by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/163
    • Make path a requirement for parsing tilesets by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/160
    • Wrap Tile over a data type by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/172
    • Add some missing attributes by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/173
    • Add preliminary documentation by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/174
    • Use Color for color property type by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/180
    • Fix docs and rename member by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/181
    • Better macros by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/184
    • Better specification for Image::source + example by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/186
    • Implement Deref for wrapper types by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/182
    • Rename TiledError to Error + Add Result type by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/185
    • Update changelog by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/188
    • Add Tileset::iter, remove Iterator types by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/189
    • Update version to 0.10.0 by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/190
    • Implement Deref for Tile<'tileset> by @bjorn in https://github.com/mapeditor/rs-tiled/pull/191
    • Update crate version to 0.10.0 by @aleokdev in https://github.com/mapeditor/rs-tiled/pull/192

    New Contributors

    • @aleokdev made their first contribution in https://github.com/mapeditor/rs-tiled/pull/104
    • @nicoxxl made their first contribution in https://github.com/mapeditor/rs-tiled/pull/102
    • @PieKing1215 made their first contribution in https://github.com/mapeditor/rs-tiled/pull/110
    • @bjorn made their first contribution in https://github.com/mapeditor/rs-tiled/pull/115
    • @SiegeLord made their first contribution in https://github.com/mapeditor/rs-tiled/pull/114
    • @perlindgren made their first contribution in https://github.com/mapeditor/rs-tiled/pull/101
    • @Anti-Alias made their first contribution in https://github.com/mapeditor/rs-tiled/pull/146

    Full Changelog: https://github.com/mapeditor/rs-tiled/compare/v0.9.5...v0.10.0

    Source code(tar.gz)
    Source code(zip)
  • v0.9.5(Mar 6, 2022)

Work-in-Progress NES / Famicon Image Editor & Map Creator

NESImg An extremely work-in-progress tool for making NES/Famicom-compatible images. When faced with the challenge of formatting artwork in a way that

Katharos Technology 10 Nov 24, 2022
A simple extension for `bevy-editor-pls` to support tilemap editing right inside the bevy app.

What is this This is a simple tilemap editor plugin, that hooks right into bevy_editor_pls to work with bevy_ecs_tilemap. It works completely within i

null 3 May 8, 2023
Example implementation of a 3d hexagon tile-based map editor using bevy

bevy-hex-sandbox Example implementation of a 3d hexagon tile-based map editor using bevy v0.10. smol.mov This is not a maintained project. Instead, th

David M. Lary 4 Aug 5, 2023
DragonOS/Linux Termial text editor

Held DragonOS/Linux Termial text editor 面向DragonOS和Linux系统的终端文本编辑器。 作者:Heyicong [email protected] 安装 默认安装路径为./install/bin/held Linux: make install

DragonOS Community 4 Apr 10, 2024
A plugin for Egui integration into Bevy

bevy_egui This crate provides a Egui integration for the Bevy game engine. Features: Desktop and web (bevy_webgl2) platforms support Clipboard (web su

Vladyslav Batyrenko 453 Jan 3, 2023
Synchronize games from other platforms into your Steam library

BoilR Description This little tool will synchronize games from other platforms into your Steam library, using the Steam Shortcuts feature. The goal is

Philip Kristoffersen 823 Jan 9, 2023
Provides a mechanism to lay out data into GPU buffers according to WGSL's memory layout rules

Provides a mechanism to lay out data into GPU buffers ensuring WGSL's memory layout requirements are met. Features supports all WGSL host-shareable ty

Teodor Tanasoaia 69 Dec 30, 2022
Transform your terminal into an art canvas where you can draw stuff!

Termdraw Turn your terminal into the drawing cavnas of your dream... or not! Installation To install this dream-come-true of a tool simply run cargo i

Enoki 5 Nov 23, 2022
Turn your keyboard into a typewriter! 📇

Turn your keyboard into a typewriter! ?? daktilo-demo.mp4 daktilo ("typewriter" in Turkish, pronounced "duck-til-oh", derived from the Ancient Greek w

Orhun Parmaksız 583 Oct 8, 2023
a rust library to find near-duplicate video files

Video Duplicate Finder vid_dup_finder finds near-duplicate video files on disk. It detects videos whose frames look similar, and where the videos are

null 12 Oct 28, 2022
A Rust library for reading asset files and resource packs for any version of Minecraft

minecraft-assets A Rust library for reading asset files and resource packs for any version of Minecraft. Example use minecraft_assets::api::AssetPack;

Ben Reeves 7 Aug 14, 2022
A tool for creating optimised, platform specific glTF files.

Squisher What? squisher is a program that takes a glTF or .glb file with PNG/JPG textures and produces a .glb file where the textures have been replac

Let Eyes Equals Two 4 Aug 24, 2022
A Win32 GUI program which modifies save files from the game Freelancer (2003).

FL Save Convert A Win32 GUI program which modifies save files from the game Freelancer (2003). System Dependencies Your system will need the latest Mi

Devin Mutlu 3 Nov 15, 2022
Quake .map files for the Bevy game engine.

Qevy A plugin that adds Quake .map file support for the Bevy game engine Supported Bevy Versions: 0.12 Supported Physics Engines: XPBD (Rapier coming

Brian Howard 8 Nov 12, 2023
McShell - A programming language compiles to Minecraft mcfunction files

MCSH MCSH语言是一个语法类似Rust的编译型编程语言,其编译目标是mcfunction文件,以在Minecraft中运行。 MCSH有内存条,可实现函数递归操作。 MCSH 编译 使用 CLI 在虚拟仿真运行 编译 语法 标准库 编译 您需要先安装Rust 然后在您的控制台运行 git cl

FancyFlame 4 Feb 19, 2024
Rust-raytracer - 🔭 A simple ray tracer in Rust 🦀

rust-raytracer An implementation of a very simple raytracer based on Ray Tracing in One Weekend by Peter Shirley in Rust. I used this project to learn

David Singleton 159 Nov 28, 2022
Rust-and-opengl-lessons - Collection of example code for learning OpenGL in Rust

rust-and-opengl-lessons Project requires Rust 1.31 Collection of example code for learning OpenGL in Rust 00 - Setup 01 - Window 02 - OpenGL Context 0

Nerijus Arlauskas 348 Dec 11, 2022
Simple retro game made using Rust bracket-lib by following "Herbert Wolverson's Hands on Rust" book.

Flappy Dragon Code from This program is a result of a tutorial i followed from Herbert Wolverson's Hands-on Rust Effective Learning through 2D Game De

Praneeth Chinthaka Ranasinghe 1 Feb 7, 2022
A rust chess implementation using a neural network scoring function built on huggingface/candle + rust + wasm

Rusty Chess What is it? Rusty Chess aims to be a high quality embeddable chess engine that runs entirely locally in the browser (no backend required).

Gareth 3 Nov 3, 2023