While things were slowing down at work, MIX 08 was starting up. I wish I could have attended but unfortunately my job takes precedence. I've been reading blog posts about MIX 08 and it sounds like it was a great time for Silverlight 2! The more I read about Silverlight 2 the more it sounded like Microsoft has finally got the ball on the road. This project (the amoeba project) was originally designed to be a Silverlight app. After digging into Silverlight 1.1, the feature set was not there yet to support our overall idea. So we took our project away from the Silverlight arena and made a small test app in DirectX.
This was mainly to get our data layer in place and see how our objects would interact in certain scenarios. We mainly got the basics of our physics engine in place.
Then we ported that app over to WPF when the news about Silverlight 2 and all of its feature set was going to be released soon.
With work and the release of Silverlight 2 over the last month we have been pretty busy. But once Silverlight 2 was released I started to port over our WPF version to a Silverlight one. Now, this is my first actual Silverlight app that I am putting up on the web. Please let me know if there are any issues, difficulties or comments that you have.
As you can tell from the pictures, each one is relatively the same as far as the controls go. All of the apps give the user the ability to: create an amoeba, apply a force to an amoeba, and connect 2 amoebas together to see what will happen. These basic apps allowed us to visualize what our data was doing with our amoeba objects. We also gave the user the ability to override the data in the background by explicitly setting the amoebas position, mass, radius or force values at any point. This allows us to see what happens when amoebas suddenly change for one reason or another.
Our next step is to build an environment that will start to influence these amoebas and allow them to change over time. In the meantime we will continue to monitor our data and how the amoebas interact with that data at certain times. And we will start to connect multiple amoeba objects together to form an actual, physical structure of some sort and see how that thing interacts with other amoebas. We will also try to incorporate some elemental values into our amoeba structures so that those values can too influence our amoebas!
Brief overview of the Silverlight demo:
The demo is currently at the bottom of the post and allows the user to create new amoebas, apply forces on those amoebas and connect amoebas together. The user will visualize what our data is doing in the background be viewing the green amoeba objects on the screen move around. The text in the center of the amoeba is the amoebas name and is there for the user to easily see what amoeba is what.
The bottom left column allows the user to create a new amoeba by specifying where / how the amoeba should appear / look. The upper left of the application is the (0,0) point for the x and y axis. The z axis, as of now, controls the z-order of the amoebas. An amoeba with a larger z axis number will appear on top of another amoeba that has a lower z axis number. The mass controls the actual mass of the amoeba that plays a part with that amoebas forces. The radius specifies how large the amoeba shall appear.
The bottom middle column lets the user add (or subtract) forces on a specified amoeba that the user can select from the listbox on the bottom. Once an amoeba is created all the listboxes will be updated with the names of the amoebas in the collection. When an amoeba is selected in the forces listbox, numbers will be displayed to the left of the textboxes that display the actual forces that are applied on that amoeba.
The bottom right column allows the user to connect one amoeba to another. When 2 amoebas are connected, they will start to attract one another and move towards each other. Due to a small math 'bug', when the amoebas get very close and their centers almost touch both amoebas will shoot off from each other. We are still weighing our options on what should actually happen when this occurs, what do you think?
The top controls allow the user to select an amoeba that has been created and edit its values in real time. When the user clicks on the 'Set Amoeba values' button, the values specified by the user will take place. When the user drags the slider from side to side the radius will automatically change the size of the amoeba.
Try to add many amoebas with different forces and then connect them together to create some real mayhem! Please share what you do and how the amoebas act. We would really like some feedback on different users and what their operating system and browser is that you used. Also, if our application seems slow at all please let us know how many amoebas you have and what you have done to them.