forked from enlightenment/efl
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:
parent
bd9c06c5f5
commit
fcea4e820a
|
@ -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
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue