NiklasEi / bevy_asset_loader

Bevy plugin helping with asset loading and organization
Apache License 2.0
449 stars 53 forks source link

RON Map support #179

Open MickHarrigan opened 5 months ago

MickHarrigan commented 5 months ago

I am looking to implement this:

({
    "icons": Map {
        "a" : Image (
            path: "a.png"
        ),
        "b" : Image (
            path: "b.png"
        ),
        "c" : Image (
            path: "c.png"
        ),
    },
    "meshes": Map {
        "sphere": Sphere (
            radius: 0.75,
        ),
        "square": Quad (
            size: (
                2.0,
                2.0
            )
        ),
    },
})

Where I then am trying to create a dynamic asset out of this, with the backbone enum being:

/// Supported types of icons within the editor to be loaded in
#[derive(serde::Deserialize, Debug, Clone)]
enum EditorIconAssetType {
    /// PNG images for cameras, lights, and audio
    Image { path: String },
    /// Quad mesh for putting images onto
    Quad { size: Vec2 },
    /// Icosphere mesh to make an icon clickable
    Sphere { radius: f32 },

    // *This is the part that I am not sure about*
    /// Collection of multiple inner assets
    Map { items: HashMap<String, EditorIconAssetType> },
}

So my question on this is do I need to try and find a way to support the RON map type like this or is there another way? I know that in the impl of DynamicAssetType there is a collection type that stores a vec of the data, so is there a clean way that this could be done? I feel like this should either be a feature if it isn't already, but given a direction I wouldn't mind trying to hash it out.

NiklasEi commented 5 months ago

Maps in Ron would be

"icons": {
        "a" : Image (
            path: "a.png"
        ),
        "b" : Image (
            path: "b.png"
        ),
        "c" : Image (
            path: "c.png"
        ),
    }

Without the "Map". But if that doesn't work I can try to extend the custom dynamic assets example and potentially fix it.

MickHarrigan commented 5 months ago

Maps in Ron would be

"icons": {
      "a" : Image (
          path: "a.png"
      ),
      "b" : Image (
          path: "b.png"
      ),
      "c" : Image (
          path: "c.png"
      ),
  }

Without the "Map". But if that doesn't work I can try to extend the custom dynamic assets example and potentially fix it.

I had that before and edited the comment to have the "Map" in it, my bad. I did try testing with just nothing there but end up getting an Expected Identifier error at the { after "icons"