static int get_class_parameter_value(char *value)
{
- int result = (strEqual(value, ARG_UNDEFINED) ? ARG_UNDEFINED_VALUE :
- get_hash_from_string(value));
+ int result = CLASS_DEFAULT;
+
+ if (strEqual(value, ARG_UNDEFINED))
+ return ARG_UNDEFINED_VALUE;
+
+ if (string_has_parameter(value, "mm_engine_only"))
+ result |= CLASS_MM_ENGINE_ONLY;
+
+ if (string_has_parameter(value, "extra_panel_items"))
+ result |= CLASS_EXTRA_PANEL_ITEMS;
+
+ if (string_has_parameter(value, "bd_pre_hatching"))
+ result |= CLASS_BD_PRE_HATCHING;
+
+ if (string_has_parameter(value, "bd_post_hatching"))
+ result |= CLASS_BD_POST_HATCHING;
+
+ if (result == CLASS_DEFAULT)
+ result = get_hash_from_string(value);
return result;
}
return (class == get_hash_from_string(value));
}
+boolean hasClass(int class, int value)
+{
+ if (class < CLASS_NONE ||
+ class > CLASS_MAX)
+ return FALSE;
+
+ return ((class & value) != 0);
+}
+
void InitMenuDesignSettings_FromHash(SetupFileHash *setup_file_hash,
boolean ignore_defaults)
{
int get_parameter_value(char *, char *, int);
boolean isClass(int, char *);
+boolean hasClass(int, int);
#endif // FILES_H
if (PANEL_DEACTIVATED(pos))
continue;
- if (isClass(pos->class, "extra_panel_items") &&
+ if (hasClass(pos->class, CLASS_EXTRA_PANEL_ITEMS) &&
!setup.prefer_extra_panel_items)
continue;
- if (isClass(pos->class, "bd_pre_hatching") &&
+ if (hasClass(pos->class, CLASS_BD_PRE_HATCHING) &&
(level.game_engine_type != GAME_ENGINE_TYPE_BD || game_bd.game->cave->hatched))
continue;
- if (isClass(pos->class, "bd_post_hatching") &&
+ if (hasClass(pos->class, CLASS_BD_POST_HATCHING) &&
(level.game_engine_type == GAME_ENGINE_TYPE_BD && !game_bd.game->cave->hatched))
continue;
int width, height;
int dst_x = PANEL_XPOS(pos);
int dst_y = PANEL_YPOS(pos);
- boolean skip = (isClass(pos->class, "mm_engine_only") &&
+ boolean skip = (hasClass(pos->class, CLASS_MM_ENGINE_ONLY) &&
level.game_engine_type != GAME_ENGINE_TYPE_MM);
if (graphic != IMG_UNDEFINED && !skip)
// values for special global animation delay actions
#define ANIM_DELAY_ACTION_NONE -1
+// values for special drawing classes
+#define CLASS_NONE 0
+
+// values used for game panel graphics
+#define CLASS_MM_ENGINE_ONLY (1 << 0)
+#define CLASS_EXTRA_PANEL_ITEMS (1 << 1)
+#define CLASS_BD_PRE_HATCHING (1 << 2)
+#define CLASS_BD_POST_HATCHING (1 << 3)
+
+#define CLASS_MAX ((1 << 4) - 1)
+
+#define CLASS_DEFAULT CLASS_NONE
+
// values for special drawing styles and event handling
#define STYLE_NONE 0