ephysics: add a new example doc: EPhysics Logo -

ephysics_logo.c



Patch by: Ricardo de Almeida Gonzaga <ricardo@profusion.mobi>



SVN revision: 77451
This commit is contained in:
Ricardo de Almeida Gonzaga 2012-10-04 22:37:40 +00:00 committed by Bruno Dilly
parent bd9c06c5f5
commit fcea4e820a
1 changed files with 187 additions and 0 deletions

View File

@ -14,6 +14,7 @@
* @li @ref tutorial_ephysics_forces
* @li @ref tutorial_ephysics_growing_balls
* @li @ref tutorial_ephysics_gravity
* @li @ref tutorial_ephysics_logo
* @li @ref tutorial_ephysics_rotating_forever
* @li @ref tutorial_ephysics_velocity
* @li @ref tutorial_ephysics_shapes
@ -1096,6 +1097,192 @@
* @example test_no_gravity.c
*/
/**
* @page tutorial_ephysics_logo EPhysics - Logo
*
* The purpose of this example is to demonstrate the EPhysics_Logo.
*
* For this example we'll have an EPhysics_World.
*
* The basic concepts like - initializing an EPhysics_World, render geometry,
* physics limiting boundaries, were already covered in
* @ref tutorial_ephysics_bouncing_ball
*
* @section add-logostruct Logo Data Struct
* @dontinclude ephysics_logo.c
*
* While in this example we'll be working with a struct to hold some objects
* in our code. For clarity sake we present you the struct declaration in the
* following block.
*
* @skip struct letter_desc {
* @until };
*
* @section add-lett Adding the letters
* @dontinclude ephysics_logo.c
*
* To add the letters we'll use this function that creates the shadow, light
* and letter images.
*
* @skip _letter_add(Evas *evas
* @until }
*
* In this loop we'll use the function letter_add using the falling_letters
* declared in logo data struct.
*
* @skip for (i = 0; i < EINA_C_ARRAY
* @until (image, &w, &h);
*
* Place image and light on top, above what the viewport can show, to fall
* later on.
*
* @skip evas_object_move(image, x,
* @until evas_object_move(light, x, -h * (i + 1) - 50);
*
* Place shadow below the hit-line: FLOOR_Y, centered at image.
*
* @skipline evas_object_move(shadow, x + CENTER(w, sh_w
*
* Here we set the letters padding and add letter body using the function
* below and setting its friction.
*
* @skip x += falling_letters[i].padd
* @until }
*
* Here we call another function that will be common to the circle body as
* well, note that we add a callback that will be explained later.
* @dontinclude ephysics_logo.c
*
* @skip _letter_body_box_add(EPhysics_World *world
* @until }
*
* This function is used to create the body setting its properties. Note that
* we disable the rotation on Z axis to this letters don't tilt or recline.
* @dontinclude ephysics_logo.c
*
* @skip _letter_body_setup_common(EPhysics_Body *body
* @until }
*
* In this callback function that we added to our letter body we'll update its
* light and shadow.
*
* First we'll update the body, get its image geometry and set the floor
* distance based on images height.
*
* @dontinclude ephysics_logo.c
*
* @skip _update_box_cb(void *data
* @until floor_distance = FLOOR_Y - h;
*
* As long as the letter approaches the floor, its shadow is darker, with bigger y.
*
* @skip if (y > SH_THRESHOLD)
* @until &sh_h);
* @skipline alpha = 255 * (y - SH_THRESHOLD)
*
* And with bigger x -- its proportional to x / WIDTH, but varies from 100 to
* 255
*
* @skip pos_x = (double) x /
* @until PROP_GET(pos_x, 100, 255);
*
* Note that the box shadow is not resized, just moved. And here set also the
* colors.
*
* @skip evas_object_move(shadow, x +
* @until alpha, alpha);
*
* As long as the letter approaches the floor, its lighter, with bigger x and y.
*
* @skipline evas_object_move(light, x
* @skipline alpha = (y <= 0) ? 0 : y * 255
* @skip alpha = alpha * (x - OFFSET_X + 80)
* @until }
*
* @section add-lettere Adding the letter E
*
* Here we'll add the last letter, "E" is a circle that comes rolling on
* the floor.
*
* First we use the letter_add function, set its shadow color and get
* its sizes.
*
* @skip _letter_add(evas, "E", &image
* @until evas_object_image_size_get(image, &w, &h);
*
* Place image and light above the floor and to the left of viewport, to comes
* rolling later on.
*
* @skip evas_object_move(image, -w - 1, FLOOR_Y
* @until evas_object_move(light, -w - 1, FLOOR_Y - h + 1);
*
* Place the shadow below the hit-line: FLOOR_Y centered at image.
*
* @skipline evas_object_move(shadow, -w - 1 + CENTER(w, sh_w)
*
* Here we create the body using body_circle function and enable its rotation
* on Z axis.
*
* @skip letter_body = _letter_body_circle_add
* @until letter_body, EINA_TRUE);
*
* Make the "E" logo get into the viewport by applying a horizontal force.
*
* @skipline ephysics_body_central_impulse_apply(letter_body
*
* Here we use the letter_body_setup_common to create the body and set its
* properties, note that we add a callback that will be explained below.
* @dontinclude ephysics_logo.c
*
* @skip _letter_body_circle_add(EPhysics_World *world
* @until }
*
* In this callback function that we added to our "E" letter body we'll update
* its light and shadow.
*
* First we'll update the body and get its image geometry.
*
* @dontinclude ephysics_logo.c
*
* @skip _update_circle_cb(void *data
* @until geometry_get(image, &x, &y, &w, &h);
*
* As long as the letter approaches the floor, its lighter, with bigger x.
*
* @skip evas_object_move(light, x
* @until alpha, alpha);
*
* Use the same map from image to the light (rotate it).
*
* @skip map = evas_object_map_get(image
* @until light, EINA_TRUE);
*
* As long as the letter approaches the floor, its shadow is darker, with
* bigger y.
*
* @skip evas_object_image_size_get(shadow,
* @until alpha, alpha);
*
* When the letter "E" passes the viewport, we send it to the begin again to
* collide with the other letters.
*
* @skip if (x > E_THRESHOLD)
* @until }
*
* Here we finish the example. The full source code can be found at
* @ref ephysics_logo_c.
*
*/
/**
* @page ephysics_logo_c ephysics_logo.c
*
* @section ephysics-logo-c ephysics_logo.c
* @include ephysics_logo.c
*
* @example ephysics_logo.c
*/
/**
* @page tutorial_ephysics_rotating_forever EPhysics - Rotating Forever
*