Search Unity

World Building [RELEASED] Dungeon Architect

Discussion in 'Tools In Progress' started by AliAkbar, Aug 9, 2015.

  1. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    bens0n, Since empty space emitters are emitted from the marker emitter scripts, this logic can be emitted from there itself. Let me know in detail what you'd like to see and I'll code it up for you
     
  2. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    Thank you @antoripa
     
    antoripa likes this.
  3. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    Added a Game Object Array Node. This is useful if you have a lot of prefabs to select from randomly. Instead of creating a node for each prefab, you drop in a Game Object Array Node and specify an array of your prefabs and it would select any one randomly. All the other features of the game object node apply to the array node as well



    It takes in an array of prefabs, instead of just one. The first prefab's thumbnail is shown.

    The Array node looks a bit different from the normal game object node:



    One of the prefabs was chosen for each of the ground tiles from the above theme


    @pixelsteam
     
    Xepherys, NavidK0, tapawafo and 2 others like this.
  4. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    Added drag / drop support on the array node. If you drop in a single prefab, it would create a game object node like before. If you select multiple prefabs and drop them on the theme editor, it would create a properly initialized array node
     
  5. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    No errors at all unfortunately. It could be colliding with some other scripts, but no idea what it could be. I don't have much of my own code in the prototype, but it does include about 30 different plugins... so it's pretty tricky to figure out the collision.

    Some other interesting notes:
    1. When first importing the asset, no theme is set in the example project, I have to assign CandyTheme manually.
    2. Theme editor looks like this: http://treefortress.com/shared/2017-03-08_12-06-26.png
    3. Generated dungeon looks like this: http://treefortress.com/shared/Unity_2017-03-08_12-06-59.png (also shows DA inspector panel)

    It seems something gets corrupted when the asset is first imported into my project. But if I import it into a clean project, and then manually copy and paste the folders into my project, it works fine. So do I actually have it working fine in my project now, after doing the 2step manual import, but would still like to know why it's getting corrupted.

    I've tested with 5.5.1, 5.5.2 and 5.6.0b10.

    I'll PM you a copy of the broken assets, and maybe you can figure out what is happening. To be clear, the only thing I've done to these assets, is to import them into my project, I've not touched them in any other way, and every demo scene is broken.

    Awesome, thanks for putting that together, and showing the door replacement technique. I figured that was the way to do it, but it's great to see it confirmed!

    The issue I found, was that using platform volumes was causing very frequent lockups. As one example, set Y cell size to 0, using 1 platform, and it should lockup everytime... (video of that here: http://treefortress.com/shared/2017-03-08_12-39-25.mp4) but other setting combinations produced lockups too, and only when using platform volumes. Another example, set Normal Std to zero, it will lock up everytime. Another example, set Room Aspect Delta to 1, and build, locks up.

    Right now, it seems I can avoid trouble by just staying away from settings things to absolute 0 or 1, but it also scares me, as I obviously can't test every seed, and can't say with 100% certainty that my users won't experience lock ups when generating their dungeons. Definitely would make me feel better if you find those infinite loops, and make sure to break out of them, or plug whatever edge cases are making lockups possible. If certain settings are invalid when used with platforms, just throw an "Invalid Settings" error so we can catch it and fix.
     
    Last edited: Mar 8, 2017
  6. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    UPDATE: If anyone else is experience the issue above with importing the project. With Ali's help, we've determined that it's an issue with the "Force Text" setting in our project. Workaround for now, is to download the asset into a "Mixed" project, and then manually copy over the folder.
     
  7. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    @AliAkbar - We're creating a forest dungeon, and would like to place a tree in every tile that is not occupied by a floortile, with random rotation, scale and size. Is there a simple way we can accomplish that? To basically fill in all empty space outside the walls with trees?
     
  8. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    Seem to have found another bug with platform volumes.

    We're attempting to make a second copty of our dungeon, to be used as a minimap, but it seems that when using platform volumes, all the platforms connect across different Dungeon's.

    You can see in this video, the 2 seperate dungeons build properly, until I enable the volumes. Then they start trying to connect to eachother:
    https://www.dropbox.com/s/6qubkl35iw8ia1t/2017-03-10_23-50-43.mp4?dl=0

    Maybe this has been fixed in your latest, as it doesn't seem to be happening in the example video you posted.
     
  9. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    Also, I wrote a little script to manually place trees anywhere there are no ground tiles. It's not integrated into DA's build, happens in frame 1 on Start, but it's getting me pretty close to what we want!

    Man, I seriously love this lib :D
     
  10. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @gskinner Sure, you can use the Marker Emitter Empty Space script. It will emit a marker at all the empty spaces outside the dungeon layout. The Demo_Theme_OutdoorCliffs sample uses this.



    Adjust how far away you'd like to have those markers (6 tiles in this case). Then in your theme file, create marker nodes with the name EmptySpace. Attaching your trees to this will place them outside your dungeon.

    You can also have more control with marker nodes with name EmptySpace_1, EmptySpace_2, ..., EmptySpace_N




    I use this script to spawn trees outside the dungeon in this theme:
     
  11. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @gskinner Thanks for the bug report. This issue has been fixed and will be available in the upcoming update
     
  12. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    Theme Graph Zooming Support

    The theme graph now fully supports zooming. This is useful when you are working with large theme files



    @pixelsteam
     
    NavidK0, pixelsteam and Griffo like this.
  13. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    This is close, but really we need something simpler than this. Depending on the value of "distance to cover" the forest will have a different shape, and it extends past the start and end of our dungeon: http://i.imgur.com/lXUsuPi.png. That blocks our start and end doorways, and prevents us from neatly connecting this to a larger hub world.

    Instead we want the bounds of the forest to be consistent in world space, and the dungeon basically cuts a path through the middle. Like this: https://www.dropbox.com/s/h7xtf1lv80pdpb6/2017-03-15_13-22-01.mp4?dl=0

    [Edit] I figured it out :)

    Here's a custom "FillArea" emitter, that does what we need:

    Code (CSharp):
    1.  
    2.  
    3. using System.Collections.Generic;
    4. using UnityEngine;
    5.  
    6. namespace DungeonArchitect.Builders.Grid
    7. {
    8.     /// <summary>
    9.     /// Emits markers across all empty space within a specified width and depth.
    10.     /// </summary>
    11.     public class MarkerEmitterFillArea : DungeonMarkerEmitter
    12.     {
    13.         public string markerName = "EmptySpace";
    14.  
    15.         public int depth = 25;
    16.         public int width = 50;
    17.         public int spacing = 1;
    18.  
    19.         public override void EmitMarkers(DungeonBuilder builder)
    20.         {
    21.             if (spacing < 1) { spacing = 1; }
    22.             var model = builder.Model as GridDungeonModel;
    23.             var gridSize = (model.Config as GridDungeonConfig).GridCellSize;
    24.             var rows = depth / spacing;
    25.             var cols = width / spacing;
    26.             var added = new List<IntVector>();
    27.             for (var z = 0; z < rows; z++) {
    28.                 for (var x = 0; x < cols; x++) {
    29.                     var point = new IntVector(
    30.                         Mathf.CeilToInt((-cols * spacing * .5f) + x * spacing), 0,
    31.                         Mathf.CeilToInt((-rows * spacing * .5f) + z * spacing));
    32.                     if (added.Contains(point)) { continue; }
    33.                     // Check if this point does not lie in a cell
    34.                     var cellInfo = model.GetGridCellLookup(point.x, point.z);
    35.                     if (cellInfo.CellType == CellType.Unknown) {
    36.                         added.Add(point);
    37.                         // Add an empty marker here
    38.                         var position = point * gridSize;
    39.                         position += Vector3.Scale(new Vector3(0.5f, 0, 0.5f), gridSize);
    40.                         var transform = Matrix4x4.TRS(position, Quaternion.identity, Vector3.one);
    41.                         builder.EmitMarker(markerName, transform, point, -1);
    42.                     }
    43.                 }
    44.             }
    45.         }
    46.     }
    47. }
    48.  
    And a little editor script with a handy build button :)
    Code (CSharp):
    1.  
    2. [CustomEditor(typeof(MarkerEmitterFillArea))]
    3. public class MarkerEmitterFillAreaEditor : Editor {
    4.     public override void OnInspectorGUI() {
    5.         DrawDefaultInspector();
    6.         if (GUILayout.Button("Rebuild Dungeon")) {
    7.             (target as MarkerEmitterFillArea).GetComponent<Dungeon>().Build();
    8.         }
    9.     }
    10. }
    11.  
    Using FillArea, combined with a couple of Platform Volumes, yields a result like this:
    http://i.imgur.com/Mzzln6g.gifv
     
    Last edited: Mar 15, 2017
  14. pixelsteam

    pixelsteam

    Joined:
    May 1, 2009
    Posts:
    924
    @AliAkbar is the Multi-GameObject node going to be in the next release? Really need this.
    Also thanks for the zoom!
     
  15. Rogerio-Castro

    Rogerio-Castro

    Joined:
    Mar 18, 2014
    Posts:
    3
    @AliAkbarHow to apply a group of prefabs to a room? I got a list of rooms like forge, kitchen, quarters, alchemy room etc. and a list of gameobject applicable to each kind of room. Is possible to apply only a group of gameobjects to a room after the same be promoted to a kind specific of room?
     
  16. bigblueboo

    bigblueboo

    Joined:
    Aug 28, 2014
    Posts:
    14
    @AliAkbar Hey Ali! Congrats on making such a beautiful system in Dungeon Architect. Very cleanly implemented. I've been having fun pushing DA with my own themes and rules. I'm a happy user and I've already recommended it to a number of people. It's a master class in editor programming, flexible design, and the implementation of a number of tricky algorithms.

    It seems like you're getting close to 1.5 (or whatever you'll call the next update.) The previewed features look great -- good luck with the release. Looking forward to it!
     
    Sehee26 and pixelsteam like this.
  17. Sehee26

    Sehee26

    Joined:
    Mar 13, 2014
    Posts:
    19
    @AliAkbar is any estimated date to the release of the new version?,

    Awesome work, thanks.
     
  18. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @bigblueboo Thank you for the kind words :)

    @Sehee26 I've submitted the latest version to Unity for review. I'll post more info in the next post

    @pixelsteam Game Object Array node is available in the next update

    @gskinner Thanks for sharing :cool:

    @Rogerio-Castro You can automatically wrap a theme override volume around your promoted rooms and give them a different look. There's a sample in the Misc folder
     
  19. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    I've submitted a new version for review. It supports 5.6, 5.5.0, 5.5.3 & 5.4.0.

    (The 5.6 version uses the newly supported unity nav system. The shooter demo samples of unity 5.6 uses the new navmesh system. You can try 5.6 with the beta version till it is released). Unity 5.5 version still uses sharpnav

    Version 1.5.0 Changelog
    • Snap Builder: Added a new builder that lets you stitch together existing room prefabs. This gives the artist a lot of control on designing the rooms
    • Theme Editor now supports zooming. Zoom in and out on the theme graph using the mouse scroll wheel. This is useful when dealing with a large theme file
    • Added a new Game Object Array Node. This works similar to the game object node, however it takes in multiple prefabs and selects one in random. This is useful if you have a lot of prefabs and don't want to clutter your theme file with lots of game object nodes.
    • City Builder: Buildings of different sizes can be placed (2x3, 4x5 etc). This is useful for placing larger structures that are not 1x1 in size (e.g. stadiums, parking logs, larger buildings etc)
    • City Builder: Added a new road layout that randomly removes certain road connections based on a probability to create a more natural looking road network
    • Grid Builder: Fixed a bug with platform volumes where they are applied only to dungeons they belong to. This fixes issues with using platform volumes with multiple dungeons in the scene
    • Fixed an hang issue with the floor plan builder when the max room size value is less than the min
    • Tweaked the stair connection weights for slightly better result
    • Added a Bulk Replace Prefab tool in the Theme editor to quickly change the prefabs of all the nodes in the theme editor with similar named prefabs on another directory. This is useful if you want to create different variations of your themes from similarly named assets in different folders.
    • Fixed editor warnings where multiple nodes were selected in the theme editor
    • Converted the samples to "Force Text" format to avoid binary import serialization issues if your project's serialization was set to "Force Text"
    • Sample: Added a new skyscraper city sample
    • Sample: Added a new city sample with larger custom building sizes
    • Sample: Added a new multi-dungeon layout example that uses three procedural dungeons that connect to one central area
    • Sample: Added a new sample to demostrate the new Game Object Array Node
     
    nixter, Griffo and hopeful like this.
  20. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    @AliAkbar

    I used Dungen for my last project, but this seems to be a good alternative.

    I also noticed that there is Unreal version of this tool as well.

    So What is difference in between unreal and unity version in terms of features? Is Unity version lags behind Unreal one? If so by how much and what is likely hood for Unity version to catch up anytime soon?
     
  21. XxPleYxX

    XxPleYxX

    Joined:
    Jul 26, 2011
    Posts:
    41
    @AliAkbar

    Great news and good work. One small question, and what about flow control graph? any ETA? is still in development?
     
  22. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @castor76 They are more or less the same feature wise.

    When I build a new feature, sometimes it's easier to experiment in unity or in ue4. (e.g. landscapes are very easy to work with in Unity and had their support since the start, but difficult in ue4 due to engine constraints and was added only recently). Eventually I pull the changes to both the engines. Is there anything in particular you'd like to see in Unity from the UE4 version?

    There is however, a version number different between unity (1.5.0) and ue4 (2.6.0) but that is because I started the ue4 version one year earlier and it doesn't make sense to keep these version numbers in sync as unity version was designed from the ground up with the unity programming model in mind

    @XxPleYxX I'll be focusing on the flow control graph next
     
    castor76 likes this.
  23. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    Thanks for the reply.

    Few more questions. How do you handle things like locked doors and key placements?
    What about something like must spawn objects ?
    Is this kind of control already implemented or is it part of upcoming features included in flow editor like?
     
  24. Sehee26

    Sehee26

    Joined:
    Mar 13, 2014
    Posts:
    19
    @AliAkbar in floorplan, lift and ladder is supported in the next update?
    If not, can you explain a little how can i connect different floors?
     
  25. gskinner

    gskinner

    Joined:
    Aug 28, 2014
    Posts:
    43
    Cheers, I updated it slightly to work when the Dungeon is not position at 0,0,0.

    Also, did you have a chance to look at the infinite loop issues mentioned earlier?
     
  26. Scimajor

    Scimajor

    Joined:
    Feb 27, 2013
    Posts:
    3
    I am fairly new to Unity but have some experience with coding FPS games in Unity. I just purchased this app and it's terrific. It's remarkably simple to use to make complex "dungeons".

    The issue I'm having is with adding in an FPS player character. Every single attempt I make at adding a player character to my dungeon results in the player falling through the level. My preference is using the Standard Assets FPS controller (later the Vive controller for VR). My best guess is that the FPS player controller is ignoring D.Arch's nav mesh.

    I apologize if I'm missing something obvious.

    Would it be possible to detail how to use the Standard Assets FPS controller in conjunction with D.Arch?

    Unity 5.5.2f1

    Thanks.
     
  27. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @castor76 It will be supported with the flow editor
     
  28. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    This has been in my todo list for some time. It shouldn't be too difficult and I'll work on adding it in the next update
     
    Sehee26 likes this.
  29. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @gskinner I couldn't get that fix pushed in 1.5.0. As a workaround leave the Y grid size to 1 and set Height Variation probability to 0 (which is what I assume you wanted?)

    Edit: I'll provide a hotfix for this soon
     
  30. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @Scimajor Thank you for using Dungeon Architect. You can use FPS controllers spawned by the theme file. Here's a video detailing how:


    There is a script file in the video to spawn a marker in a room (to place your player). You can grab it from here
     
  31. Sehee26

    Sehee26

    Joined:
    Mar 13, 2014
    Posts:
    19
    Ok thanks. I´m sure is an easy job, but i check the examples, and i don´t know from where start to do it, maybe with volumes?
     
    AliAkbar likes this.
  32. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @Sehee26 Yep volumes would be the way to go. I have something like this working in the UE4 version with lifts

     
  33. Sehee26

    Sehee26

    Joined:
    Mar 13, 2014
    Posts:
    19
    Cool!, it looks awesome. I will try with volumes then.
     
  34. Sehee26

    Sehee26

    Joined:
    Mar 13, 2014
    Posts:
    19
    @AliAkbar i´m looking to spawn volumes dynamically in floorplanner, but checking the example include i see only works with the gridDungeonModel, because floorPlanModel don´t have Cell Class. Is any way to do that with floorplan?

    Sorry if my english isn´t good.
     
  35. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    @AliAkbar

    I am experimenting with DA at the moment, and I am having a blast. However, I have noticed that when I wanted to create some larger door, I had to increase the size of the grid cell size. This is fine for the door, but it means the overall size of each cell is bigger so it doesn't produce more.. organic and non rigid looking dungeons.

    What is work around , alternative for this? Can we have door of size 3 cell blocks etc? (width of the door)
    Or should we use some kind of custom selection script to not spawn walls and wall separators near the door to simulate this?
     
  36. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    I am also little bit confused with the spatial constraint. Is Door considered as wall (Empty) ?
    If so this can sometimes leads to the wrong behaviour when you want to use it on the ground tiles.
    I want to have the ground tiles to spawn different tiles per neighboring wall tiles. So when used for the ground tile, I am mega confused as to how it can work, because the walls are generated for the rooms.

    I think in order to generate the floor ground tiles properly depends on where the walls / fences are and then where the empty space is. How can I detect this kind of configurations? if I just detect walls and build floor around the walls, then I would not know if the walls are neighboring the empty space or it is in between ground tiles such as some of the walls for the rooms.

    The wordings such as Empty and Occupied is confusing because it could mean different things if you are trying to use it on the wall or ground. :( Also when you talk about the surrounding tiles and their reference axis in the world, how do they related when you talk about it in 3d space? It's easy enough to understand it for 2D as they are 1:1 match, but for 3D... which world axis direction is for which neighbor in the constraint?
     
    Last edited: Apr 5, 2017
  37. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    Also, I think I found some issue with the doors. Little squares are the doors. This room has 3 doors next to each other (total 5 doors) Also if you take a look at the ground tile around the top door, it has the round corner one. which should only spawn for the actual corners only.

    upload_2017-4-5_19-24-13.png

    upload_2017-4-5_19-26-21.png
     
  38. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @Sehee26 I'll implement lifts / stairs in the floorplan soon
     
    Sehee26 and hopeful like this.
  39. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @castor76 For now increasing the grid size would be the only way to go. I tried implementing larger doors earlier but it creates lots of invalid cases. E.g. if you have a 2 tile wide door and only one corridor tile connected to it, which would connect only half the door and look ugly. We could pad the other tile if it is empty with a new corridor cell. However, the other tile might not be empty, just inaccessible, i.e. above or below the first adjacent tile. We cannot change the height of this tile without messing up the stair graph connectivity

    I've though of some ways of solving this (like create a padding around the room border so there are corridor 1x1 cells next to the all the large door tiles and then the rest of the dungeon start connecting to them. I'll explore this further
     
  40. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @castor76 Thank you for the feedback. The spatial constraint system definitely needs improvement. I've got a lot of feedback from other developers as well and I'm looking to revamp it and make it more data driven so you have more control.

    In the mean time, could you have a look at this post? I created that script before there was spatial constraints. Let me know if that works for you or I can give you a more concrete example.
     
  41. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    There's a dungeon config variable DoorProximitySteps (not the best name I know :p)

    If you increase it it will remove your duplicates. It checks if other nearby doors are accessible from a door within these many steps. If so, it removes it. Increasing to 3-6 would remove all nearby duplicates

     
  42. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    @AliAkbar Thanks for the replies. Let us know if you have some news about the spatial constraint and larger door ideas.
     
  43. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    We can basically have the corridoor padding to have 1 extra tile to make sure that the tiles around the double door has the necessary tiles for them. this will still make the base size of the tile to be half size of the door so it can have more detailed shapes on corridoors.

    Also , is there way to make the object parent to the one that emits it? I have wall that is made up with two parts, upper and lower and I want the lower to spawn first and then the top one but the top one should be parented to the lower one.
     
  44. Astarorr

    Astarorr

    Joined:
    Jan 17, 2013
    Posts:
    41
    @AliAkbar Hi, checked Snap builder - it doesn't supporting First room and End room yet?
     
  45. wolfen231

    wolfen231

    Joined:
    Apr 22, 2014
    Posts:
    402
    @AliAkbar Have a couple of questions off the top of my head after your watching your videos. Asset looks great by the way.

    1. On the terrain stuff. What happens (if you can) assign more than one texture to any of the options (cliff, corridor, room, etc)?
    2. How does this engine handle walls and halls with varying degrees of angles? 15, 35, 45 degrees?

    Cheers,
     
    Last edited: Apr 17, 2017
  46. castor76

    castor76

    Joined:
    Dec 5, 2011
    Posts:
    2,517
    If I want to have something to spawn but not right next to itself, how can I check in the selection rule script to see if the same marker is spawned within 3x3 grid centered on itself?
     
  47. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    @Astarorr Snap builder is still an early work in progress. I'm working on a new design that would let you use theming with the snap builder as well. You basically block out your room modules with new set of tools and apply theming on them

    I'll have updates on this soon
     
  48. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    1. It's like the texture paint tool in the unity terrain editor. It takes in a texture (with optional normal maps) and paints the terrain with it

    2. It doesn't handle arbitrary degree angles well as the default builder is based on a grid
     
  49. AliAkbar

    AliAkbar

    Joined:
    Jun 30, 2014
    Posts:
    729
    This is a useful feature will be added in the next build
     
    v_James_v and castor76 like this.
  50. Astarorr

    Astarorr

    Joined:
    Jan 17, 2013
    Posts:
    41
    Amazing! When it'll be ready please let me know - i'm using it in current project.