Seems pretty cool. I'd like resolutions settings though, running on a 24 widescreen and it's a bit jaggy.
Jejeje 24 inch, lucky you
You can change display settings manually by editing the display.cfg file. Not perfect, I know, an ingame menu would be the correct thing to do. Also, widescreen displays may experience some issues with the GUI elements' scale not being correct.
Kinda reminds me of a cross between American McGee's Alice and James and the Giant Peach. Nicely done.
Thanks! Truth be told, we were a little bit more inspired by Burton films ( specially at the beginning of the project, later the characters and world seemed to start developing a personality of their own ), but wanted to go for a lighter, less gloomy world. Don't know if we managed to get it right, but it was a big inspiration source.
Congratulations for the mention to the best art direction at the Art Futura contest, Pau & co.!
Iei!! Thanks a lot Alan. We are very happy about it. For some reason now all the problems during development seem so far away... ( No t'ho escric també en Català que veig que tens un bon nivell d'Anglés
)
Congrats!
!
May I ask how you created the transform widget in your editor? For the life of me I can't figure it out. I'd normally use a 3D model, but it looks naff -- is yours a ManualObject?
Sure.
All the transform widgets in the editor are manual objects.
For example, the move widget is made of three lines ( one per axis ) and three cones.
The editors are Mogre code, so sorry for that. It's very straightforward to port though. Here is the creation of the X axis for the move gizmo:
Code: Select all
m_transformGizmoX = GeometryHelper.CreateLine( SceneManager, XAxisMaterialName, Mogre.Vector3.ZERO, Mogre.Vector3.UNIT_X );
...
m_transformGizmoX2 = GeometryHelper.CreateCone( SceneManager, XAxisMaterialName, Mogre.Vector3.UNIT_X, Mogre.Vector3.UNIT_X, radius, sides, height );
...
And here are the functions called. They may have many bugs ( in fact I'm pretty sure, as they just have been tested with the editor. They do work for the editor's reduced need so I didn't check them thoroughly. ).
If anyone wishes to use them, please feel free to do so, but if you find any bug and fix it would be nice if you'd told me
( not an obligation though, it'd just be nice )
Code: Select all
public static Mogre.ManualObject CreateLine( Mogre.SceneManager sceneManager, String materialName, Mogre.Vector3 startPoint, Mogre.Vector3 endPoint )
{
Mogre.ManualObject line = sceneManager.CreateManualObject( CreateNewRandomName() );
line.Begin( materialName, Mogre.RenderOperation.OperationTypes.OT_LINE_LIST );
line.Position( startPoint );
line.Position( endPoint );
line.End();
return line;
}
public static Mogre.ManualObject CreateCone( Mogre.SceneManager sceneManager, String materialName, Mogre.Vector3 center, Mogre.Vector3 direction, float radius, int sides, float height )
{
List<Mogre.Vector3> points = GetCirclePoints( center, radius, sides, direction, false );
Mogre.Vector3 tip = center + direction.NormalisedCopy * height;
Mogre.ManualObject cone = sceneManager.CreateManualObject( CreateNewRandomName() );
cone.Begin( materialName, Mogre.RenderOperation.OperationTypes.OT_TRIANGLE_LIST );
foreach ( Mogre.Vector3 point in points )
{
cone.Position( point );
}
cone.Position( tip );
cone.Position( center );
ushort tipIndex = ( ushort ) ( points.Count );
ushort centerIndex = ( ushort ) ( points.Count + 1 );
for ( int i = 0; i < points.Count; i++ )
{
ushort v1 = ( ushort ) ( i );
ushort v2 = ( ushort ) ( ( i + 1 ) % ( points.Count ) );
cone.Index( tipIndex );
cone.Index( v1 );
cone.Index( v2 );
//cap
cone.Index( centerIndex );
cone.Index( v1 );
cone.Index( v2 );
}
cone.End();
return cone;
}
public static List<Mogre.Vector3> GetCirclePoints( Mogre.Vector3 center, float radius, int sides, Mogre.Vector3 normal, bool close )
{
Debug.Assert( 0 < sides );
Mogre.Vector3 defaultNormal = Mogre.Vector3.UNIT_X;
Mogre.Quaternion q = defaultNormal.GetRotationTo( normal );
float dot = normal.DotProduct( Mogre.Vector3.NEGATIVE_UNIT_X );
float fi = ( float ) Math.Acos( dot / ( normal.Length ) );
if ( fi <= 0.001 )
{
q.FromAngleAxis( new Mogre.Degree( 180 ), Mogre.Vector3.UNIT_Y );
}
List<Mogre.Vector3> points = new List<Mogre.Vector3>();
float value = 0;
float inc = ( float ) ( 2 * Math.PI ) / sides;
int iterations = sides;
if ( close )
{
iterations++;
}
for ( int i = 0; i < iterations; i++ )
{
Mogre.Vector3 point = new Mogre.Vector3( 0, radius * ( float ) Math.Cos( value ), radius * ( float ) Math.Sin( value ) );
Mogre.Vector3 transformedPoint = center + ( q * point );
points.Add( transformedPoint );
value += inc;
}
return points;
}