-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathitems.py
More file actions
111 lines (100 loc) · 3.98 KB
/
items.py
File metadata and controls
111 lines (100 loc) · 3.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
class Item:
def __init__(self, base: str = "item", sprite: str = None, item_type: str = None, name: str = None,
description: str = None):
self.base = base
if sprite is not None:
self.sprite: str = sprite
if item_type is not None:
self.item_type: str = item_type
if name is not None:
self.name: str = name
if description is not None:
self.description: str = description
def get_sprite(self, base_items):
if hasattr(self, "sprite"):
return self.sprite
else:
return base_items[self.base]["sprite"]
def get_item_type(self, base_items):
if hasattr(self, "item_type"):
return self.item_type
else:
return base_items[self.base]["item_type"]
def get_name(self, base_items):
if hasattr(self, "name"):
return self.name
else:
return base_items[self.base]["name"]
def get_description(self, base_items):
if hasattr(self, "description"):
return self.description
else:
return base_items[self.base]["description"]
class Weapon(Item):
def __init__(self, base: str = "item", sprite: str = None, item_type: str = None, name: str = None,
description: str = None, weapon_class: str = None,
damage: float = None, damage_type: str = None):
super().__init__(base, sprite, item_type, name, description)
if weapon_class is not None:
self.weapon_class: str = weapon_class
if damage is not None:
self.damage: float = damage
if damage_type is not None:
self.damage_type: str = damage_type
def get_damage(self, base_items):
if hasattr(self, "damage"):
return self.damage
elif "damage" in base_items[self.base]:
return base_items[self.base]["damage"]
else:
return 0.0
def get_damage_type(self, base_items):
if hasattr(self, "damage_type"):
return self.damage_type
elif "damage_type" in base_items[self.base]:
return base_items[self.base]["damage_type"]
else:
return "void"
def get_weapon_class(self, base_items):
if hasattr(self, "weapon_class"):
return self.weapon_class
elif "weapon_class" in base_items[self.base]:
return base_items[self.base]["weapon_class"]
else:
return "unknown"
def from_dict(item_dict: dict, item_bases: dict) -> Item:
if ("item_type" in item_dict and item_dict["item_type"] == "weapon") or item_bases[item_dict["base"]]["item_type"] == "weapon":
return Weapon(
item_dict.get("base", "item"),
item_dict.get("sprite", None),
"weapon",
item_dict.get("name", None),
item_dict.get("description", None),
item_dict.get("weapon_class", None),
item_dict.get("damage", None),
item_dict.get("damage_type", None)
)
elif "item_type" in item_dict:
return Item(
item_dict.get("base", None),
item_dict.get("sprite", None),
item_dict["item_type"],
item_dict.get("name", None),
item_dict.get("description", None),
)
elif "item_type" in item_bases[item_dict["base"]]:
return Item(
item_dict.get("base", None),
item_dict.get("sprite", None),
item_bases[item_dict["base"]]["item_type"],
item_dict.get("name", None),
item_dict.get("description", None),
)
else:
return Item(
item_dict.get("base", None),
item_dict.get("sprite", None),
"misc",
item_dict.get("name", None),
item_dict.get("description", None),
)