Mercurial > MadButterfly
annotate include/mb_sprite.h @ 1160:1a699dc00fa3
Fix the issue of not removing node in old scene when switching scenes.
- When a timeline is playing and crossing two scenes (tween block),
nodes, for the old scene, in duplicate group must be removed. But,
it is not.
- It is fixed by checking if nodes, in the duplicate group, are also
in the key frame next to the new scene. All nodes that is not in
next key frame are remove.
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 28 Dec 2010 13:35:34 +0800 |
parents | 8679b03f72e8 |
children |
rev | line source |
---|---|
1051
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
1 #ifndef __MB_SPRITE_H_ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
2 #define __MB_SPRITE_H_ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
3 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
4 #include "mb_types.h" |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
5 #include "mb_redraw_man.h" |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
6 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
7 /*! \defgroup mb_sprite Implement sprites for animation. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
8 * @{ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
9 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
10 /*! \brief A sprite is a set of graphics that being an object in animation. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
11 * |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
12 * A sprite include graphics comprise an object. For example, a tank, in |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
13 * example tank, is comprised a set of graphics that is represented as a |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
14 * sprite. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
15 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
16 struct _mb_sprite { |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
17 void (*free)(mb_sprite_t *); |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
18 mb_obj_t *(*get_obj_with_name)(mb_sprite_t *sprite, const char *id); |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
19 /*! Return non-zero for error. */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
20 int (*goto_scene)(mb_sprite_t *sprite, int scene_no); |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
21 }; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
22 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
23 #define MB_SPRITE_FREE(sprite) ((mb_sprite_t *)(sprite))->free(sprite) |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
24 #define MB_SPRITE_GET_OBJ(sprite, name) \ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
25 ((mb_sprite_t *)(sprite))->get_obj_with_name((mb_sprite_t *)(sprite), \ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
26 (name)) |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
27 #define MB_SPRITE_GOTO_SCENE(sprite, scene_no) \ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
28 ((mb_sprite_t *)(sprite))->goto_scene((mb_sprite_t *)(sprite), scene_no) |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
29 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
30 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
31 /*! \brief Load sprite dymanicly from the shared object module. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
32 * |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
33 * The search path can be changed by sprite_set_search_path. The name |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
34 * can have a relative path in the front of it. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
35 * This function will search the object in the current working directory |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
36 * and then search the system search path. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
37 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
38 extern mb_sprite_t *sprite_load(const char *name, redraw_man_t *rdman, |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
39 coord_t *root); |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
40 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
41 /*! \brief Set the search path of dymanic object loading. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
42 * |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
43 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
44 extern void sprite_set_search_path(const char *path); |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
45 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
46 /*! \defgroup mb_sprite_lsym Sprite with linear symbol table. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
47 * @{ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
48 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
49 struct _mb_sprite_lsym_entry { |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
50 const char *sym; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
51 const int offset; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
52 }; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
53 typedef struct _mb_sprite_lsym_entry mb_sprite_lsym_entry_t; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
54 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
55 /*! \brief A sub-type of mb_sprite_t with linear symbol table. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
56 * |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
57 * This type of sprite search symbols with linear/or binary searching. |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
58 */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
59 struct _mb_sprite_lsym { |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
60 mb_sprite_t sprite; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
61 int num_entries; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
62 mb_sprite_lsym_entry_t *entries; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
63 }; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
64 typedef struct _mb_sprite_lsym mb_sprite_lsym_t; |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
65 /* @} */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
66 /* @} */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
67 |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
68 #endif /* __MB_SPRITE_H_ */ |
8679b03f72e8
Move declaration about sprite to a separated header file.
Thinker K.F. Li <thinker@codemud.net>
parents:
diff
changeset
|
69 |