Utoopia Framework & PodEdit - Early Access Soon!

Monkey Forums/Monkey Programming/Utoopia Framework & PodEdit - Early Access Soon!

Tibit(Posted 2011) [#1]
Want to get a kick-ass framework that just boosts your productivity in Monkey?

Core Design Values:
SIMPLE
POWERFUL
EFFECTIVE

I'll release an Early Access Package Soon!

Let me present the Utoopia Framework:

* Component-Based Engine Architecture
- Simply write a component, attach it, and it'll update itself.

* Written with Performance in Mind
- Almost no continuous garbage is created what-so-ever.

* Component-Based Hierarchical State Machine
- IntroScreen, MainMenu, InGame, HighScore, that's 4 states almost any game have. OnEnter,OnRender,OnUpdate,OnExit
Changing state is as simple as: SwitchState("MainMenu")

* GameClock with delta, fps and timestamp functionality
- Integrated into the statemachine and any component, access current delta, FPS, or make your own timeoffset.
- As simple as clock.Delta, or clock.TimeStamp, clock.TimeSince( timestamp) or clock.TimeSinceStarted

* A very ambitious Vector2D Class
- Once you start to use this one, you will use it everywhere! It is also super fast since it provides access methods to everything, meaning you won't have to create unnecessary copies!
- Position.DistanceTo( car.Position ), or check angle by doing Velocity.Direction, set it by going Velocity.Direction = 90

* UnitTest Framework
- Write testdriven code and allow your tests to automatically verify your code. You can even count how many times a method has been run or just verify that the output is expected in relation to the input.

* Complete Color Class
- You can now go Color.Blue.Apply, or use the Color class to save the Color of something into a variable.

* Complete Rectangle Class
- Access all Corners, Width, Height, or the Center, use myRect.Draw() to render it.

* DeviceScreen Class
- A rectangle that represents the Screen, so in your code you can go: Screen.Width or Screen.Center.X

* Extremely helpful Camera Class
- This class allows you to render the world and by simply moving the camera, zooming in and out, rotating it, you change the view, but not the world!
- You can use several cameras to create a split-screen game, 2 split, 3 split, 4 split, whatever you want!
- With this you can become resolution independent, just adjust your zoom in relation to Screen.Width

* Really powerful Image2D Attachment System
- You have an Image, you go: ship.AttachTo( planet) you can then do planet.NodeRotate(angle) rotating everything attached to the planet, or planet.ImageRotate(angle) to rotate only the planet image or planet.Rotate( angle) to rotate both!
- Convert between World and Screen Coordinates easily!

* Content Manager
- Load all your images using the Content manager, and you can access those images anywhere.

* Queue Class
- A performance effective Queue, allowing you to push and pop items onto it.

* Handy Vector Helper Class
- Project a vector on another vector? Bounce a vector off a wall? Render a vector as an arrow. Or get the closest distance to a specified line from a point.

* InputHelper Class
- Allows you to detect touch or mouse, or check for TouchAtLocation:bool(x,y,radius)

* Debug Variable Tracker Class
- Add variables that you want to track. Each unique variable is added to a list that the tracker renders to the screen, showing the value the variable has in realitime.
- A killer debug tool!

That's all that is done and tested so far! I'll open for early access soon so don't miss that if you are interested.

PodEdit is my Monkey Code Editor. It is really good to code in but it still lacks complete Intellisense. (more on that later though).

Future and InProgress
* Debug Console - debug print, tracking, and activate and deactivate components on the fly!
* Debug Window - render debug data, logging data, variable values
* Performance Profiling System - connected to Debug Console
* 2D Physics - Optimized and stable SAT-based physics engine
* GUI - Menu System, buttons, sliders, text-system
* Event System
* AI - Pathfinding, Flocking behavior
* FileHandling System, easily save/load maps, settings
* TileEditorSystem + xmlBased MapSystem
* Particle System
* Isometric View and Depth sorting


matt(Posted 2011) [#2]
That sounds sweet! Would love to take a look.


Raz(Posted 2011) [#3]
Very interested in this too :)


CodeGit(Posted 2011) [#4]
Yes, also interested. Let us know when you are ready.


Tibit(Posted 2011) [#5]
Good to hear, I'm working on it! :D


Qcat(Posted 2011) [#6]
This sounds to good to be true!

I am so missing the debug tools in monkey I wood buy Just for that let alone everything else!


matty47(Posted 2011) [#7]
How's this coming along. Sounds exciting
Thanks


Alex(Posted 2011) [#8]
Sounds good. I'll buy it.


pinete(Posted 2011) [#9]
Any news on this?
Best!


Tibit(Posted 2011) [#10]
I've been away a lot, it's done for release, using it myself atm, just working on getting the new forum up, managed to crash the old one by setting some stupid setting :)


pinete(Posted 2011) [#11]
go go go !! :)


Greg Squire(Posted 2011) [#12]
I'd be interesting in looking at and possibly using this as well. Looking forward to this! How's it coming along?


Tibit(Posted 2011) [#13]
Going nicley, I now have GUI that you can either attach to the World, or to the Screen. So assume you have a game world, you can make any Image2D clickable, and it should work correctly even if you Zoom,Rotate and Move the Camera around for instance.

myButton.AttachTo Screen

Or

myButton.AttachTo World

Or

myButton.AttachTo mySpaceShip

A lot of stuff have been improved.

New Input system that has proved to be very useful.

You can go: If Keyboard.A.Pressed

You can create your own keys. I have the Combination Key and the Any Key, these combined allows you to do things like this:

Let's say you want: Ctrl + C
Then create a myCombinationKey:CombinationKey to which you add Keyboard.Ctrl and Keyboard.C
myCombinationKey.AddKey Keyboard.Ctrl
You can now go, myCombinationKey.IsPressed
If you want input to respond to more than one key you can use the AnyKey, to which you add Keys, like Keyboard.W and Keyboard.Up. myAnyKey.IsDown will return true if W OR Up isDown.
Of course you can also combine these two, so you add myCombinationKey to the anyKey.

Depends on exactly what functionality you are after, but I'm aiming to do a commercial release of my game ASAP, and several more to come. So while the framework is still in pre-release it packs a lot of power.


Loofadawg(Posted 2011) [#14]
This all sounds great!


matt(Posted 2011) [#15]
What's the latest on this?

I downloaded the first version but it was short on docs and examples.


Supertino(Posted 2011) [#16]
Sounds great, I prefer to make my own frameworks but this does look good might need to reconsider.


Tibit(Posted 2011) [#17]
I'm working on the examples now.

I have restructured the files, so instead of dumping them all in the main-module folder each section of the engine now has it's own sub-folder.

Also this means that samples will be found in each N every sub-folder. I intend release ASAP (like today) :)


a1programmer(Posted 2011) [#18]
Great news! Looking forward to checking it out!


matt(Posted 2011) [#19]
Sweet! (the reorg and examples)


Tibit(Posted 2011) [#20]
v4 Released now. Will be away for a week now, so might not be so active, but just post in the forums if there is any questions, will answer when back.

Every file has been restructored and refactored, plus I added some examples.

* New *
- basic gui, buttons, shapes
- input Keyboard, Mouse, Touch
- keyBind interface
- State-Reworked
- Components-Reworked
- clock removed, instead the fixed Monkey clock is used, delta:float provided for convenience.
- debugging improved
- camera tweaked a lot, now has proper Screen/World coordinate conversion functions

I think SVN told me it is up in 212 files now, omg...

It now works to just import utoopia and you get everything, you can also import any sub-category and you get everything in that category (ex: import utoopia.core) , or you can import stuff directly (ex: import utoopia.core.component)


matt(Posted 2011) [#21]
Excellent work! Well done.


samowitsch(Posted 2011) [#22]
Any news of this framework?


Tibit(Posted 2011) [#23]
We have it in mint condition. I'm still using it to make games, it is very powerful and easy to use indeed. I guess the only downside is that I haven't spent any time lately on documentation or posting news - I just had to few users and there is not that many using Monkey so far, I realized that I'd be better of using utoopia myself to make awesome games, and then later on with a few releases under the belt I might do something public with it.

At this moment you have several other frameworks that you can choose from, I posted the vector class public and I'm happy to post more stuff public if there is something specific that people here needs. The engine has many awesome features by now however it serves it's own purpose to boost productivity in Monkey, at least for us.

In my company we are also experimenting on some new advanced AI technique stuff, that might make a huge impact in the speed on which you can develop mock-ups and a high-quality games and be able to reuse more code.

I'm still happy to share knowledge or even code with people in this community, so feel free to ask, I'm just not going to do a complete documentation overhaul at this stage for the whole engine - but I do want to do that one day!

So many new cool stuff planned. Our first game is finally in review at Apple now.


TheRedFox(Posted 2011) [#24]
@Tidbit: The world/camera and components parts would be great for insights.


frank(Posted 2011) [#25]
Any downloads yet? I'm looking for good flocking code AI.


Tibit(Posted 2011) [#26]
I'm looking into making something with the Camera System and I'll consider the AI System too.

I'd love to find a handy way to share utoopia. Documentation and updates are the two major things to solve.

btw TheRedFox, is it Tibit, not Tidbit - that is someone else :)


frank(Posted 2011) [#27]
Thanks for the update, but why not just put it in Google code? Or you are planning on selling? I mean; just using the tools of the trade GIT (or SVN if you *have* to) + WIKI, would solve this no?


Tibit(Posted 2011) [#28]
frank, never used GoogleCode before. I checked it out and it looks quite nice.

Created one here. Haven't connected the svn yet, might need to fix permissions for that.

http://code.google.com/p/utoopia/

Previously I created an utoopia forum in which I posted a lot of examples with explanations, however 3 weeks later all examples where outdated due to the engine growing so quickly.

Might throw up a new forum, might be simpler than using the googleWiki, not sure yet :)


frank(Posted 2011) [#29]
:)

I usually use GitHub(.com), but seems Monkey coders prefer Google Code.

Both are great for managing your projects though, especially if they are open source. You can get quite nice exposure and it's easy for people to join in and help without messing up your way of working.


Tibit(Posted 2012) [#30]
Haven't used gitHub, it seems very good actually. However I was just reading about git, but I'm not sure it beats svn, tough GitHub might beat GoogleCode :)

Seems quite complex to setup:
http://help.github.com/win-set-up-git/
http://progit.org/book/ch1-3.html

I'm actually open minded to using Git. A lot of people say it is better than svn, yet to me SVN is not user friendly enough, and git seems even less so :(


Samah(Posted 2012) [#31]
yet to me SVN is not user friendly enough

http://tortoisesvn.tigris.org/
'nuff said. :)

It's sorta hard to compare SVN/CVS to Mercurial/Git. The former are centralised (one repository), whereas the latter are distributed (one 'main' repository, but cloned by each developer and branched per clone). That's a very simple explanation, though. There are arguments for and against Mercurial (Hg) vs Git, but IMO Hg is much easier to use if you use the TortoiseHg workbench.
http://tortoisehg.bitbucket.org/

There is a Tortoise for Git, but I couldn't see a graphical tool like TortoiseHg workbench (GUI ftw!)


therevills(Posted 2012) [#32]
For a small team (<5) I would use SVN, for a large team (>20) Hg/Git...


Samah(Posted 2012) [#33]
For a small team (<5) I would use SVN, for a large team (>20) Hg/Git...

Awww... you love Starteam :)


frank(Posted 2012) [#34]
I don't see why svn would be 'better' for a small team; at the rate you see people dropping svn in favor of git, I would say git is better for anything. Not trying to troll or start a tool war, but I cannot think of anything svn is better at, but I can think of a lot of things it's worse at.


c.k.(Posted 2012) [#35]
I switched from SVN to Hg for all my projects (personal, business, etc.) a while back. I give it a double-plus thumbs-up.


TheRedFox(Posted 2012) [#36]
Hg here as well.
A tad slow on binary files tough.


Tri|Ga|De(Posted 2012) [#37]
Its proberly just me that can find it but is there a way to download this framework?


hardcoal(Posted 2012) [#38]
work work work and be happy


Tibit(Posted 2012) [#39]
Right now you have to mail me to get the source :)


AaronK(Posted 2012) [#40]
Hi there Tibit. I posted on the website (as someone else had) but not sure if you got it or not. I'd love to try it out.


Snader(Posted 2012) [#41]
I would love to see this Framework!


Paul - Taiphoz(Posted 2012) [#42]
gosh just getting used to diddy dont know if I wana switch frameworks, this will have to wait till my current project is finished.


Tibit(Posted 2012) [#43]
Hi guys!

Yes a lot of things are added now including iOS native stuff like IAP.

We need to get the documentation (we are working on it now) done and take another look at the API.

As the framework grows, it also takes longer time to write documentation and make sure the interface and code has a high quality.

I'm not sure I want anyone to use utoopia until I can guarantee it delivers and that we will support/update it in the long run.

However I would suggest you go with diddy as of now. I do have plans that might be of great benefit to many of you but nothing is decided yet! Get your games out there - that is the most important thing to focus on in my oppinion.


NoOdle(Posted 2012) [#44]
do you have any tech demos or games that show off your framework? I need to figure out if it's worth continuing with mine; yours has the same feature set and I've just started to rewrite mine from scratch!

Cheers


frank(Posted 2012) [#45]
It's a bit of a shame to have all those different frameworks :) Better to get it out there so other people can help and join/merge efforts.


Tibit(Posted 2012) [#46]
Yeah I agree, it would be awesome with some kind of community effort on the framework side.

There are a lot of things that almost any game needs and then there are things that only certain sub-set of games need.

Noodle most demos we have is out dated since we have changed and upgraded so many aspects of the framework since those where made. You can always check out "Star Fight - The Action Game" on the App Store, however that doesn't show much what the framework does or how easy it is to use, better to wait til we release the documentation.

Since utoopia uses a component based system it is very easy for anyone who makes their own additions or already has code to plug that in.

Engine.AddComponent( new NameOfYourOwnCustomComponent )

And then your own component can do whatever you want it to since it contains Start(), Update() and a Render() methods.

Everything in utoopia uses this system too, which is why you choose what parts of utoopia you want to use. Don't like the render system? Don't attach it. Don't like the input system? Attach diddy's instead. And so on.

So in any case, things that are not already implemented in utoopia is dead-simple to add and I'd love for that Component-Based part to be part of Monkey - so all frameworks could make use of it - I see no downside to using that system at all.


Tibit(Posted 2012) [#47]
@Noodle - what specific functionality do you need for you current game?


AaronK(Posted 2012) [#48]
Tibit, can't wait to see it as I'm about to embark on my own framework and anything that can save me time is well worth it.

One question I have. Do you handle batching of draws into minimal draw calls?

Aaron


NoOdle(Posted 2012) [#49]
@Tibit

The features that I have added to my framework that I will definitely need are:

Actions. These comprise of rotateTo, scaleTo, moveTo, alphaTo, colorTo. They are time based and can be decorated with ease actions and others. Actions to delete sprites, hide sprites, change z order, call a user method/function. An action can be made up of a sequence of other actions, spawn multiple actions at once, repeat actions and reverse actions. Animation actions can (as there are also actions) be repeated, reversed, added in a sequence etc making animating sprites very simple.

Transitions. Allowing easy ways to move between scenes, allowing a huge range of different transition effects, fade, move etc

SpriteAtlas Manager. Loads and stores multiple sprite sheets and extracts any animations automatically with one command. A similar manager for text as well allowing dynamic text labels and static text labels with a dictionary of fonts stored by name.

Can't think of anything else right now, but these are some of the features I will definitely need. Its very handy, for example, if you wanted to create a moving platform that moves from one location to another with a slight delay when it reaches it target: