ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/anim.C
(Generate patch)

Comparing deliantra/server/common/anim.C (file contents):
Revision 1.9 by root, Tue Sep 12 19:20:05 2006 UTC vs.
Revision 1.16 by root, Sun Jan 14 23:15:57 2007 UTC

1
2/*
3 * static char *rcsid_anim_c =
4 * "$Id: anim.C,v 1.9 2006/09/12 19:20:05 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
4 Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team
10 Copyright (C) 2002-2003 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002-2003 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 6 Copyright (C) 1992 Frank Tore Johansen
12 7
13 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
22 17
23 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 21
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 22 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 23*/
29 24
30/* This file contains animation related code. */ 25/* This file contains animation related code. */
31 26
32#include <global.h> 27#include <global.h>
33#include <stdio.h> 28#include <stdio.h>
34
35std::vector < Animations > animations;
36 29
37void 30void
38free_all_anim (void) 31free_all_anim (void)
39{ 32{
40 for (int i = 0; i <= num_animations; i++) 33 for (int i = 0; i <= num_animations; i++)
72 { 65 {
73 Animations anim0; 66 Animations anim0;
74 67
75 anim0.name = "###none"; 68 anim0.name = "###none";
76 anim0.num_animations = 1; 69 anim0.num_animations = 1;
77 anim0.faces = (Fontindex *) malloc (sizeof (Fontindex)); 70 anim0.faces = (uint16 *)malloc (sizeof (uint16));
78 anim0.faces[0] = 0; 71 anim0.faces[0] = 0;
79 anim0.facings = 0; 72 anim0.facings = 0;
80 73
81 animations.push_back (anim0); 74 animations.push_back (anim0);
82 } 75 }
83 76
84 sprintf (buf, "%s/animations", settings.datadir); 77 sprintf (buf, "%s/animations", settings.datadir);
85 LOG (llevDebug, "Reading animations from %s...", buf); 78 LOG (llevDebug, "Reading animations from %s...\n", buf);
86 if ((fp = fopen (buf, "r")) == NULL) 79 if ((fp = fopen (buf, "r")) == NULL)
87 { 80 {
88 LOG (llevError, "Cannot open animations file %s: %s\n", buf, strerror (errno)); 81 LOG (llevError, "Cannot open animations file %s: %s\n", buf, strerror (errno));
89 exit (-1); 82 exit (-1);
90 } 83 }
110 anim.facings = 1; 103 anim.facings = 1;
111 animations.push_back (anim); 104 animations.push_back (anim);
112 } 105 }
113 else if (!strncmp (buf, "mina", 4)) 106 else if (!strncmp (buf, "mina", 4))
114 { 107 {
115 animations[num_animations].faces = (Fontindex *) malloc (sizeof (Fontindex) * num_frames); 108 animations[num_animations].faces = (uint16 *) malloc (sizeof (uint16) * num_frames);
116 for (i = 0; i < num_frames; i++) 109 for (i = 0; i < num_frames; i++)
117 animations[num_animations].faces[i] = faces[i]; 110 animations[num_animations].faces[i] = faces[i];
118 animations[num_animations].num_animations = num_frames; 111 animations[num_animations].num_animations = num_frames;
119 if (num_frames % animations[num_animations].facings) 112 if (num_frames % animations[num_animations].facings)
120 { 113 {
147{ 140{
148 return strcmp (a->name, b->name); 141 return strcmp (a->name, b->name);
149} 142}
150 143
151/* Tries to find the animation id that matches name. Returns an integer match 144/* Tries to find the animation id that matches name. Returns an integer match
152 * 0 if no match found (animation 0 is initialized as the 'bug' face 145 * 0 if no match found (animation 0 is initialised as the 'bug' face
153 */ 146 */
154int 147int
155find_animation (const char *name) 148find_animation (const char *name)
156{ 149{
157 Animations 150 Animations search, *match;
158 search, *
159 match;
160 151
161 search.name = name; 152 search.name = name;
162 153
163 match = (Animations *) bsearch (&search, &animations[0], (num_animations + 1), 154 match = (Animations *) bsearch (&search, &animations[0], (num_animations + 1),
164 sizeof (Animations), (int (*)(const void *, const void *)) anim_compare); 155 sizeof (Animations), (int (*)(const void *, const void *)) anim_compare);
165 156
166 157
167 if (match) 158 if (match)
168 return match->num; 159 return match->num;
160
169 LOG (llevError, "Unable to find animation %s\n", name); 161 LOG (llevError, "Unable to find animation %s\n", name);
162
170 return 0; 163 return 0;
171} 164}
172 165
173/* 166/*
174 * animate_object(object) updates the face-variable of an object. 167 * animate_object(object) updates the face-variable of an object.
177 * dir is the direction the object is facing. This is generally same as 170 * dir is the direction the object is facing. This is generally same as
178 * op->direction, but in some cases, op->facing is used instead - the 171 * op->direction, but in some cases, op->facing is used instead - the
179 * caller has a better idea which one it really wants to be using, 172 * caller has a better idea which one it really wants to be using,
180 * so let it pass along the right one. 173 * so let it pass along the right one.
181 */ 174 */
182
183void 175void
184animate_object (object *op, int dir) 176animate_object (object *op, int dir)
185{ 177{
186 int
187 max_state; /* Max animation state object should be drawn in */ 178 int max_state; /* Max animation state object should be drawn in */
188 int
189 base_state; /* starting index # to draw from */ 179 int base_state; /* starting index # to draw from */
190 180
191 if (!op->animation_id || !NUM_ANIMATIONS (op)) 181 if (!op->animation_id || !NUM_ANIMATIONS (op))
192 { 182 {
193 LOG (llevError, "Object %s lacks animation.\n", op->debug_desc ()); 183 LOG (llevError, "Object %s lacks animation.\n", op->debug_desc ());
184 CLEAR_FLAG (op, FLAG_ANIMATE);
194 return; 185 return;
195 } 186 }
196 187
197 if (op->head) 188 if (op->head)
198 { 189 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines