Well I have to admit I love the recent features that C2 has been coming out with. To my surprise I really enjoy the debugger so i can watch variables and data in arrays and dictionaries. However with so much out now I was hoping to make a call out for the Scirra team to work on Modularity.
I was thinking about Modularity and how from my experience could be implemented and it's use of functionality for developers.
* Extend Group to Group Module
Right now Groups are already an object in C2. They are in the debugger, they can "hold" local variables, functions and loops all register to a Group. Groups make a great starting place to build modularity from.
* Group Module
Is a new category called Module(simlar to Layout, EventSheets, Object, Families). Modules are an EventSheet with a Group as a requirement.
* Group Functions
Functions are a good plugin, but the fact that they need to reference Plugin.Call(myfunction) is definetly cumbersome. Instead Group becomes the Function Plugin. And Function's are baked in. So instead of Function.Call(""). We can now just use GroupModule.myfunction. Of course this means that GroupModule get there own "compile" prior to being used. So to update changes in a Module would require an in IDE Build.
* Group Objects
Right now to import an EventSheet/Events. The developers needs to create an object that's used in the sheet and declare all variables named exactly the same. This is fine for smaller works. but anything that really digs into a lot of meat and chewy work; this effort becomes more of a hassle. Also on top if the module developer updates there EventSheet the using developer needs to make the appropriate changes.
Well if objects(sprites, arrays, dictionaries, spritfonts....) can be baked into the Group module. Then this becomes easy to make updates.
As a simple situation. I am working on a Point and Click Adventure. There is a lot of work that went into project. I would like to someday offer the entire work to the community. But odds are the EventSheets, objects... will get updated with new features, improvements.... Someone who decided to use my stuff won't be able to effectively update due to the large amounts changes. They would either have to continue working with an old version or I and they would have to design and follow some kind of update sheet. Very inconvenient and not practical.
* Group Events & Actions and Expressions
It would be fantastic that a module can offer ACE development design.
* Private and Public Objects
For API safety reasons it would be great that objects can be declared as private or public to other developers. Access to to public objects can be done in the same tree like manner on the module similar to opening a folder.
* CAMOD
We have CAPX Construct ? Project Zip. CAPROJ Construct ? Project. So now there is Construct ? Module. These are optionally minified capx.
* Open or Closed CAMOD
It would also be nice to have the option to allow or deny others access to the Module EventSheet/s and objects for modification.
* Module Repository and Asset store
This was inspired by Unity. I was browsing the asset store on the Scirra website today to see any new items. I had the thought that most C2 developers probably don't even know about the store(I could be wrong). C2 could use the benefit of having a link to the webstore at the top among the RUN button(not just the start page). Also it would be great if it was a New Window with no browser frame. That way it looks more integrated with the C2 program. Also downloading an asset should download into an Asset library in C2. While offering this. It would be great to offer a Module Repository so people could get the module integration.
So with all that with Debug, gui improvements, profiler, tilemaps are out. That's some of the big items on the road list. That leaves Modularity and Multiplayer. I firmly believe that Modularity will enhance everything of C2. I certainly believe it would push the usability and accessibility and developer utility by leaps and bounds.
Also doing this offers OOP design model which I know appeared elsewhere.