Crossfire Server, Trunk
RecipeWrapper.cpp
Go to the documentation of this file.
1 /*
2  * Crossfire -- cooperative multi-player graphical RPG and adventure game
3  *
4  * Copyright (c) 2022 the Crossfire Development Team
5  *
6  * Crossfire is free software and comes with ABSOLUTELY NO WARRANTY. You are
7  * welcome to redistribute it under certain conditions. For details, please
8  * see COPYING and LICENSE.
9  *
10  * The authors can be reached via e-mail at <crossfire@metalforge.org>.
11  */
12 
13 #include "RecipeWrapper.h"
14 #include "ResourcesManager.h"
15 #include "CREPixmap.h"
16 #include "../archetypes/ArchetypeWrapper.h"
17 
19  : AssetTWrapper(parent, "Recipe", rp) {
20 }
21 
22 QString RecipeWrapper::title() const
23 {
24  return myWrappedItem->title;
25 }
26 
27 int RecipeWrapper::chance() const
28 {
29  return myWrappedItem->chance;
30 }
31 
32 int RecipeWrapper::difficulty() const
33 {
34  return myWrappedItem->diff;
35 }
36 
37 int RecipeWrapper::experience() const
38 {
39  return myWrappedItem->exp;
40 }
41 
42 QStringList RecipeWrapper::archs() const
43 {
44  QStringList archs;
45  for (size_t i = 0; i < myWrappedItem->arch_names; i++)
46  {
47  archs.append(myWrappedItem->arch_name[i]);
48  }
49  return archs;
50 }
51 
52 QStringList RecipeWrapper::ingredients() const
53 {
54  QStringList ingredients;
55  for (linked_char* ing = myWrappedItem->ingred; ing; ing = ing->next)
56  {
57  ingredients.append(ing->name);
58  }
59  return ingredients;
60 }
61 
62 bool RecipeWrapper::transmute() const
63 {
64  return myWrappedItem->transmute != 0;
65 }
66 
67 int RecipeWrapper::minLevel() const
68 {
69  return myWrappedItem->min_level;
70 }
71 
72 QString RecipeWrapper::keycode() const
73 {
74  return myWrappedItem->keycode;
75 }
76 
77 QString RecipeWrapper::displayName() const {
78  if (myWrappedItem->arch_names == 0) {
79  return QString("%1 (no archetype?)").arg(myWrappedItem->title);
80  }
81  auto base = find_archetype(myWrappedItem->arch_name[0]);
82  if (!base) {
83  return QString("%1 (no archetype?)").arg(myWrappedItem->title);
84  }
85 
86  if (strcmp(myWrappedItem->title, "NONE") == 0) {
87  if (base->clone.title) {
88  return QString("%1 %2").arg(base->clone.name, base->clone.title);
89  }
90  return base->clone.name;
91  }
92  return QString("%1 of %2").arg(base->clone.name, myWrappedItem->title);
93 }
94 
96  const Face *face = recipe_get_face(myWrappedItem);
97  const archetype* base = NULL;
98  if (myWrappedItem->arch_names > 0) {
100  }
101  if (!face && base != NULL) {
102  return CREPixmap::getIcon(base->clone.face);
103  }
104  return CREPixmap::getIcon(face);
105 }
106 
107 AssetWrapper::PossibleUse RecipeWrapper::uses(const AssetWrapper *asset, std::string &hint) const {
108  auto arch = dynamic_cast<const ArchetypeWrapper *>(asset);
109  if (arch) {
110  for (size_t i = 0; i < wrappedItem()->arch_names; i++) {
111  if (strcmp(wrappedItem()->arch_name[i], arch->wrappedItem()->name) == 0) {
112  hint = "alchemy product";
113  return Uses;
114  }
115  }
116  return DoesntUse;
117  }
118  return DoesntUse;
119 }
RecipeWrapper::keycode
QString keycode
Definition: RecipeWrapper.h:36
RecipeWrapper::RecipeWrapper
RecipeWrapper(AssetWrapper *parent, const recipe *rp, ResourcesManager *resources)
Definition: RecipeWrapper.cpp:18
RecipeWrapper::experience
int experience
Definition: RecipeWrapper.h:31
recipe::arch_names
size_t arch_names
Definition: recipe.h:12
archininventory.arch
arch
DIALOGCHECK MINARGS 1 MAXARGS 1
Definition: archininventory.py:16
RecipeWrapper::displayName
virtual QString displayName() const override
Definition: RecipeWrapper.cpp:77
recipe::arch_name
char ** arch_name
Definition: recipe.h:13
AssetTWrapper< const recipe >::myWrappedItem
const recipe * myWrappedItem
Definition: AssetWrapper.h:104
ArchetypeWrapper
Definition: ArchetypeWrapper.h:25
recipe::transmute
int transmute
Definition: recipe.h:19
RecipeWrapper::minLevel
int minLevel
Definition: RecipeWrapper.h:35
RecipeWrapper::ingredients
QStringList ingredients
Definition: RecipeWrapper.h:33
recipe::exp
int exp
Definition: recipe.h:17
AssetWrapper
Definition: AssetWrapper.h:25
AssetTWrapper< const recipe >::wrappedItem
const recipe * wrappedItem() const
Definition: AssetWrapper.h:101
linked_char
Definition: global.h:96
RecipeWrapper::uses
virtual PossibleUse uses(const AssetWrapper *asset, std::string &hint) const override
Definition: RecipeWrapper.cpp:107
archetype::clone
object clone
Definition: object.h:478
RecipeWrapper::displayIcon
virtual QIcon displayIcon() const override
Definition: RecipeWrapper.cpp:95
object::face
const Face * face
Definition: object.h:341
AssetTWrapper
Definition: AssetWrapper.h:94
ResourcesManager
Definition: ResourcesManager.h:80
linked_char::next
struct linked_char * next
Definition: global.h:98
RecipeWrapper::archs
QStringList archs
Definition: RecipeWrapper.h:32
archetype
Definition: object.h:474
RecipeWrapper::title
QString title
Definition: RecipeWrapper.h:28
AssetWrapper::PossibleUse
PossibleUse
Definition: AssetWrapper.h:32
RecipeWrapper::transmute
bool transmute
Definition: RecipeWrapper.h:34
AssetWrapper::Uses
@ Uses
Definition: AssetWrapper.h:32
recipe
Definition: recipe.h:10
ResourcesManager.h
CREPixmap.h
RecipeWrapper.h
recipe::chance
int chance
Definition: recipe.h:14
find_archetype
archetype * find_archetype(const char *name)
Definition: assets.cpp:266
recipe::diff
int diff
Definition: recipe.h:16
recipe::keycode
sstring keycode
Definition: recipe.h:25
Face
Definition: face.h:14
recipe::min_level
int min_level
Definition: recipe.h:30
recipe::ingred
linked_char * ingred
Definition: recipe.h:22
AssetWrapper::DoesntUse
@ DoesntUse
Definition: AssetWrapper.h:32
CREPixmap::getIcon
static QIcon getIcon(uint16_t faceNumber)
Definition: CREPixmap.cpp:65
RecipeWrapper::chance
int chance
Definition: RecipeWrapper.h:29
recipe_get_face
const Face * recipe_get_face(const recipe *rp)
Definition: recipe.cpp:920
recipe::title
sstring title
Definition: recipe.h:11
RecipeWrapper::difficulty
int difficulty
Definition: RecipeWrapper.h:30