1 ///////////////////////////////////////////////////////////////////////////////
2 //            Copyright (C) 2004-2010 by The Allacrost Project
3 //                         All Rights Reserved
4 //
5 // This code is licensed under the GNU GPL version 2. It is free software
6 // and you may modify it and/or redistribute it under the terms of this license.
7 // See http://www.gnu.org/copyleft/gpl.html for details.
8 ///////////////////////////////////////////////////////////////////////////////
9 
10 /** ***************************************************************************
11 *** \file    defs_global.cpp
12 *** \author  Daniel Steuernol, steu@allacrost.org
13 *** \brief   Source file for Lua binding code
14 ***
15 *** All binding code for the globals is contained within this file.
16 *** Therefore, everything that you see bound within this file will be made
17 *** available in Lua. All binding code is contained within this single file
18 *** because the binding code greatly increases the compilation time, but this
19 *** effect is mitigated if it is contained within a single file (Note: Binding
20 *** is now split out according to dependency level (engine, global, modes).
21 ***
22 *** \note To most C++ programmers, the syntax of the binding code found in this
23 *** file may be very unfamiliar and obtuse. Refer to the Luabind documentation
24 *** as necessary to gain an understanding of this code style.
25 *** **************************************************************************/
26 
27 #include "defs.h"
28 
29 #include "global.h"
30 #include "global_actors.h"
31 #include "global_effects.h"
32 #include "global_objects.h"
33 #include "global_skills.h"
34 #include "global_utils.h"
35 
36 using namespace luabind;
37 
38 namespace hoa_defs {
39 
BindGlobalsToLua()40 void BindGlobalsToLua()
41 {
42 	// ---------- Bind Global Components
43 	{
44 	using namespace hoa_global;
45 
46 	def("GetTargetText", &GetTargetText),
47 	def("IsTargetPoint", &IsTargetPoint),
48 	def("IsTargetActor", &IsTargetActor),
49 	def("IsTargetParty", &IsTargetParty),
50 	def("IsTargetSelf", &IsTargetSelf),
51 	def("IsTargetAlly", &IsTargetAlly),
52 	def("IsTargetFoe", &IsTargetFoe),
53 	// TODO: Luabind doesn't like these functions. I think its because they take reference arguments.
54 // 	def("IncrementIntensity", &IncrementIntensity),
55 // 	def("DecrementIntensity", &DecrementIntensity),
56 
57 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
58 	[
59 		class_<GameGlobal>("GameGlobal")
60 			.def("AddCharacter", (void(GameGlobal::*)(uint32)) &GameGlobal::AddCharacter)
61 			.def("RemoveCharacter", (void(GameGlobal::*)(uint32)) &GameGlobal::RemoveCharacter)
62 			.def("GetCharacter", &GameGlobal::GetCharacter)
63 			.def("GetDrunes", &GameGlobal::GetDrunes)
64 			.def("SetDrunes", &GameGlobal::SetDrunes)
65 			.def("AddDrunes", &GameGlobal::AddDrunes)
66 			.def("SubtractDrunes", &GameGlobal::SubtractDrunes)
67 			.def("AddToInventory", (void (GameGlobal::*)(uint32, uint32)) &GameGlobal::AddToInventory)
68 			.def("RemoveFromInventory", (void (GameGlobal::*)(uint32)) &GameGlobal::RemoveFromInventory)
69 			.def("IncrementObjectCount", &GameGlobal::IncrementObjectCount)
70 			.def("DecrementObjectCount", &GameGlobal::DecrementObjectCount)
71 			.def("DoesEventGroupExist", &GameGlobal::DoesEventGroupExist)
72 			.def("DoesEventExist", &GameGlobal::DoesEventExist)
73 			.def("AddNewEventGroup", &GameGlobal::AddNewEventGroup)
74 			.def("GetEventGroup", &GameGlobal::GetEventGroup)
75 			.def("GetEventValue", &GameGlobal::GetEventValue)
76 			.def("GetNumberEventGroups", &GameGlobal::GetNumberEventGroups)
77 			.def("GetNumberEvents", &GameGlobal::GetNumberEvents)
78 			.def("SetLocation", (void(GameGlobal::*)(const std::string&)) &GameGlobal::SetLocation)
79 
80 			// Namespace constants
81 			.enum_("constants") [
82 				// Character type constants
83 				value("GLOBAL_CHARACTER_INVALID", GLOBAL_CHARACTER_INVALID),
84 				value("GLOBAL_CHARACTER_ALL", GLOBAL_CHARACTER_ALL),
85 				// Object type constants
86 				value("GLOBAL_OBJECT_INVALID", GLOBAL_OBJECT_INVALID),
87 				value("GLOBAL_OBJECT_ITEM", GLOBAL_OBJECT_ITEM),
88 				value("GLOBAL_OBJECT_WEAPON", GLOBAL_OBJECT_WEAPON),
89 				value("GLOBAL_OBJECT_HEAD_ARMOR", GLOBAL_OBJECT_HEAD_ARMOR),
90 				value("GLOBAL_OBJECT_TORSO_ARMOR", GLOBAL_OBJECT_TORSO_ARMOR),
91 				value("GLOBAL_OBJECT_ARM_ARMOR", GLOBAL_OBJECT_ARM_ARMOR),
92 				value("GLOBAL_OBJECT_LEG_ARMOR", GLOBAL_OBJECT_LEG_ARMOR),
93 				value("GLOBAL_OBJECT_SHARD", GLOBAL_OBJECT_SHARD),
94 				value("GLOBAL_OBJECT_KEY_ITEM", GLOBAL_OBJECT_KEY_ITEM),
95 				// Item usage constants
96 				value("GLOBAL_USE_INVALID", GLOBAL_USE_INVALID),
97 				value("GLOBAL_USE_FIELD", GLOBAL_USE_FIELD),
98 				value("GLOBAL_USE_BATTLE", GLOBAL_USE_BATTLE),
99 				value("GLOBAL_USE_ALL", GLOBAL_USE_ALL),
100 				// Item and skill alignment constants
101 				value("GLOBAL_POSITION_HEAD", GLOBAL_POSITION_HEAD),
102 				value("GLOBAL_POSITION_TORSO", GLOBAL_POSITION_TORSO),
103 				value("GLOBAL_POSITION_ARMS", GLOBAL_POSITION_ARMS),
104 				value("GLOBAL_POSITION_LEGS", GLOBAL_POSITION_LEGS),
105 				// Global skill types
106 				value("GLOBAL_SKILL_INVALID", GLOBAL_SKILL_INVALID),
107 				value("GLOBAL_SKILL_ATTACK", GLOBAL_SKILL_ATTACK),
108 				value("GLOBAL_SKILL_DEFEND", GLOBAL_SKILL_DEFEND),
109 				value("GLOBAL_SKILL_SUPPORT", GLOBAL_SKILL_SUPPORT),
110 				// Elemental type constants
111 				value("GLOBAL_ELEMENTAL_FIRE", GLOBAL_ELEMENTAL_FIRE),
112 				value("GLOBAL_ELEMENTAL_WATER", GLOBAL_ELEMENTAL_WATER),
113 				value("GLOBAL_ELEMENTAL_VOLT", GLOBAL_ELEMENTAL_VOLT),
114 				value("GLOBAL_ELEMENTAL_EARTH", GLOBAL_ELEMENTAL_EARTH),
115 				value("GLOBAL_ELEMENTAL_SLICING", GLOBAL_ELEMENTAL_SLICING),
116 				value("GLOBAL_ELEMENTAL_SMASHING", GLOBAL_ELEMENTAL_SMASHING),
117 				value("GLOBAL_ELEMENTAL_MAULING", GLOBAL_ELEMENTAL_MAULING),
118 				value("GLOBAL_ELEMENTAL_PIERCING", GLOBAL_ELEMENTAL_PIERCING),
119 				// Status type constants
120 				value("GLOBAL_STATUS_HP_BOOST", GLOBAL_STATUS_HP_BOOST),
121 				value("GLOBAL_STATUS_HP_DRAIN", GLOBAL_STATUS_HP_DRAIN),
122 				value("GLOBAL_STATUS_SP_BOOST", GLOBAL_STATUS_SP_BOOST),
123 				value("GLOBAL_STATUS_SP_DRAIN", GLOBAL_STATUS_SP_DRAIN),
124 				value("GLOBAL_STATUS_STRENGTH_BOOST", GLOBAL_STATUS_STRENGTH_BOOST),
125 				value("GLOBAL_STATUS_STRENGTH_DRAIN", GLOBAL_STATUS_STRENGTH_DRAIN),
126 				value("GLOBAL_STATUS_VIGOR_BOOST", GLOBAL_STATUS_VIGOR_BOOST),
127 				value("GLOBAL_STATUS_VIGOR_DRAIN", GLOBAL_STATUS_VIGOR_DRAIN),
128 				value("GLOBAL_STATUS_FORTITUDE_BOOST", GLOBAL_STATUS_FORTITUDE_BOOST),
129 				value("GLOBAL_STATUS_FORTITUDE_DRAIN", GLOBAL_STATUS_FORTITUDE_DRAIN),
130 				value("GLOBAL_STATUS_PROTECTION_BOOST", GLOBAL_STATUS_PROTECTION_BOOST),
131 				value("GLOBAL_STATUS_PROTECTION_DRAIN", GLOBAL_STATUS_PROTECTION_DRAIN),
132 				value("GLOBAL_STATUS_AGILITY_BOOST", GLOBAL_STATUS_AGILITY_BOOST),
133 				value("GLOBAL_STATUS_AGILITY_DRAIN", GLOBAL_STATUS_AGILITY_DRAIN),
134 				value("GLOBAL_STATUS_EVADE_BOOST", GLOBAL_STATUS_EVADE_BOOST),
135 				value("GLOBAL_STATUS_EVADE_DRAIN", GLOBAL_STATUS_EVADE_DRAIN),
136 				value("GLOBAL_STATUS_PARALYSIS", GLOBAL_STATUS_PARALYSIS),
137 				// Intensity type constants
138 				value("GLOBAL_INTENSITY_NEG_EXTREME", GLOBAL_INTENSITY_NEG_EXTREME),
139 				value("GLOBAL_INTENSITY_NEG_GREATER", GLOBAL_INTENSITY_NEG_GREATER),
140 				value("GLOBAL_INTENSITY_NEG_MODERATE", GLOBAL_INTENSITY_NEG_MODERATE),
141 				value("GLOBAL_INTENSITY_NEG_LESSER", GLOBAL_INTENSITY_NEG_LESSER),
142 				value("GLOBAL_INTENSITY_NEUTRAL", GLOBAL_INTENSITY_NEUTRAL),
143 				value("GLOBAL_INTENSITY_POS_LESSER", GLOBAL_INTENSITY_POS_LESSER),
144 				value("GLOBAL_INTENSITY_POS_MODERATE", GLOBAL_INTENSITY_POS_MODERATE),
145 				value("GLOBAL_INTENSITY_POS_GREATER", GLOBAL_INTENSITY_POS_GREATER),
146 				value("GLOBAL_INTENSITY_POS_EXTREME", GLOBAL_INTENSITY_POS_EXTREME),
147 				// Target constants
148 				value("GLOBAL_TARGET_INVALID", GLOBAL_TARGET_INVALID),
149 				value("GLOBAL_TARGET_SELF_POINT", GLOBAL_TARGET_SELF_POINT),
150 				value("GLOBAL_TARGET_ALLY_POINT", GLOBAL_TARGET_ALLY_POINT),
151 				value("GLOBAL_TARGET_FOE_POINT", GLOBAL_TARGET_FOE_POINT),
152 				value("GLOBAL_TARGET_SELF", GLOBAL_TARGET_SELF),
153 				value("GLOBAL_TARGET_ALLY", GLOBAL_TARGET_ALLY),
154 				value("GLOBAL_TARGET_FOE", GLOBAL_TARGET_FOE),
155 				value("GLOBAL_TARGET_ALL_ALLIES", GLOBAL_TARGET_ALL_ALLIES),
156 				value("GLOBAL_TARGET_ALL_FOES", GLOBAL_TARGET_ALL_FOES)
157 			]
158 	];
159 
160 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
161 	[
162 		class_<GlobalEventGroup>("GlobalEventGroup")
163 			.def("DoesEventExist", &GlobalEventGroup::DoesEventExist)
164 			.def("AddNewEvent", &GlobalEventGroup::AddNewEvent)
165 			.def("GetEvent", &GlobalEventGroup::GetEvent)
166 			.def("SetEvent", &GlobalEventGroup::SetEvent)
167 			.def("GetNumberEvents", &GlobalEventGroup::GetNumberEvents)
168 			.def("GetGroupName", &GlobalEventGroup::GetGroupName)
169 	];
170 
171 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
172 	[
173 		class_<GlobalAttackPoint>("GlobalAttackPoint")
174 			.def("GetName", &GlobalAttackPoint::GetName)
175 			.def("GetXPosition", &GlobalAttackPoint::GetXPosition)
176 			.def("GetYPosition", &GlobalAttackPoint::GetYPosition)
177 			.def("GetFortitudeModifier", &GlobalAttackPoint::GetFortitudeModifier)
178 			.def("GetProtectionModifier", &GlobalAttackPoint::GetProtectionModifier)
179 			.def("GetEvadeModifier", &GlobalAttackPoint::GetEvadeModifier)
180 			.def("GetActorOwner", &GlobalAttackPoint::GetActorOwner)
181 			.def("GetTotalPhysicalDefense", &GlobalAttackPoint::GetTotalPhysicalDefense)
182 			.def("GetTotalMetaphysicalDefense", &GlobalAttackPoint::GetTotalMetaphysicalDefense)
183 			.def("GetTotalEvadeRating", &GlobalAttackPoint::GetTotalEvadeRating)
184 	];
185 
186 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
187 	[
188 		class_<GlobalActor>("GlobalActor")
189 			.def("GetID", &GlobalActor::GetID)
190 			.def("GetName", &GlobalActor::GetName)
191 			.def("GetFilename", &GlobalActor::GetFilename)
192 
193 			.def("GetHitPoints", &GlobalActor::GetHitPoints)
194 			.def("GetMaxHitPoints", &GlobalActor::GetMaxHitPoints)
195 			.def("GetSkillPoints", &GlobalActor::GetSkillPoints)
196 			.def("GetMaxSkillPoints", &GlobalActor::GetMaxSkillPoints)
197 			.def("GetExperienceLevel", &GlobalActor::GetExperienceLevel)
198 			.def("GetStrength", &GlobalActor::GetStrength)
199 			.def("GetVigor", &GlobalActor::GetVigor)
200 			.def("GetFortitude", &GlobalActor::GetFortitude)
201 			.def("GetProtection", &GlobalActor::GetProtection)
202 			.def("GetAgility", &GlobalActor::GetAgility)
203 			.def("GetEvade", &GlobalActor::GetEvade)
204 
205 			.def("GetTotalPhysicalAttack", &GlobalActor::GetTotalPhysicalAttack)
206 			.def("GetTotalMetaphysicalAttack", &GlobalActor::GetTotalMetaphysicalAttack)
207 			.def("GetAttackPoint", &GlobalActor::GetAttackPoint)
208 // 			.def("GetWeaponEquipped", &GlobalActor::GetWeaponEquipped)
209 // 			.def("GetArmorEquipped", (GlobalArmor* (GlobalActor::*)(uint32)) &GlobalActor::GetArmorEquipped)
210 // 			.def("GetAttackPoints", &GlobalActor::GetAttackPoints)
211 // 			.def("GetElementalAttackBonuses", &GlobalActor::GetElementalAttackBonuses)
212 // 			.def("GetStatusAttackBonuses", &GlobalActor::GetStatusAttackBonuses)
213 // 			.def("GetElementalDefenseBonuses", &GlobalActor::GetElementalDefenseBonuses)
214 // 			.def("GetStatusDefenseBonuses", &GlobalActor::GetStatusDefenseBonuses)
215 
216 			.def("SetHitPoints", &GlobalActor::SetHitPoints)
217 			.def("SetSkillPoints", &GlobalActor::SetSkillPoints)
218 			.def("SetMaxHitPoints", &GlobalActor::SetMaxHitPoints)
219 			.def("SetMaxSkillPoints", &GlobalActor::SetMaxSkillPoints)
220 			.def("SetExperienceLevel", &GlobalActor::SetExperienceLevel)
221 			.def("SetStrength", &GlobalActor::SetStrength)
222 			.def("SetVigor", &GlobalActor::SetVigor)
223 			.def("SetFortitude", &GlobalActor::SetFortitude)
224 			.def("SetProtection", &GlobalActor::SetProtection)
225 			.def("SetAgility", &GlobalActor::SetAgility)
226 			.def("SetEvade", &GlobalActor::SetEvade)
227 
228 			.def("AddHitPoints", &GlobalActor::AddHitPoints)
229 			.def("SubtractHitPoints", &GlobalActor::SubtractHitPoints)
230 			.def("AddMaxHitPoints", &GlobalActor::AddMaxHitPoints)
231 			.def("SubtractMaxHitPoints", &GlobalActor::SubtractMaxHitPoints)
232 			.def("AddSkillPoints", &GlobalActor::AddSkillPoints)
233 			.def("SubtractSkillPoints", &GlobalActor::SubtractSkillPoints)
234 			.def("AddMaxSkillPoints", &GlobalActor::AddMaxSkillPoints)
235 			.def("SubtractMaxSkillPoints", &GlobalActor::SubtractMaxSkillPoints)
236 			.def("AddStrength", &GlobalActor::AddStrength)
237 			.def("SubtractStrength", &GlobalActor::SubtractStrength)
238 			.def("AddVigor", &GlobalActor::AddVigor)
239 			.def("SubtractVigor", &GlobalActor::SubtractVigor)
240 			.def("AddFortitude", &GlobalActor::AddFortitude)
241 			.def("SubtractFortitude", &GlobalActor::SubtractFortitude)
242 			.def("AddProtection", &GlobalActor::AddProtection)
243 			.def("SubtractProtection", &GlobalActor::SubtractProtection)
244 			.def("AddAgility", &GlobalActor::AddAgility)
245 			.def("SubtractAgility", &GlobalActor::SubtractAgility)
246 			.def("AddEvade", &GlobalActor::AddEvade)
247 			.def("SubtractEvade", &GlobalActor::SubtractEvade)
248 
249 			.def("IsAlive", &GlobalActor::IsAlive)
250 // 			.def("EquipWeapon", &GlobalActor::EquipWeapon)
251 // 			.def("EquipArmor", &GlobalActor::EquipArmor)
252 	];
253 
254 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
255 	[
256 		class_<GlobalCharacterGrowth>("GlobalCharacterGrowth")
257 			.def_readwrite("_hit_points_growth", &GlobalCharacterGrowth::_hit_points_growth)
258 			.def_readwrite("_skill_points_growth", &GlobalCharacterGrowth::_skill_points_growth)
259 			.def_readwrite("_strength_growth", &GlobalCharacterGrowth::_strength_growth)
260 			.def_readwrite("_vigor_growth", &GlobalCharacterGrowth::_vigor_growth)
261 			.def_readwrite("_fortitude_growth", &GlobalCharacterGrowth::_fortitude_growth)
262 			.def_readwrite("_protection_growth", &GlobalCharacterGrowth::_protection_growth)
263 			.def_readwrite("_agility_growth", &GlobalCharacterGrowth::_agility_growth)
264 			.def_readwrite("_evade_growth", &GlobalCharacterGrowth::_evade_growth)
265 			.def("_AddSkill", &GlobalCharacterGrowth::_AddSkill)
266 	];
267 
268 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
269 	[
270 		class_<GlobalCharacter, GlobalActor>("GlobalCharacter")
271 			.def("GetGrowth", &GlobalCharacter::GetGrowth)
272 			.def("AddSkill", &GlobalCharacter::AddSkill)
273 	];
274 
275 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
276 	[
277 		class_<GlobalParty>("GlobalParty")
278 			.def("AddHitPoints", &GlobalParty::AddHitPoints)
279 	];
280 
281 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
282 	[
283 		class_<GlobalEnemy, GlobalActor>("GlobalEnemy")
284 	];
285 
286 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
287 	[
288 		class_<GlobalObject>("GlobalObject")
289 			.def("GetID", &GlobalObject::GetID)
290 			.def("GetName", &GlobalObject::GetName)
291 			.def("GetType", &GlobalObject::GetObjectType)
292 			.def("GetCount", &GlobalObject::GetCount)
293 			.def("IncrementCount", &GlobalObject::IncrementCount)
294 			.def("DecrementCount", &GlobalObject::DecrementCount)
295 	];
296 
297 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
298 	[
299 		class_<GlobalItem, GlobalObject>("GlobalItem")
300 // 			.def(constructor<>(uint32, uint32))
301 	];
302 
303 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
304 	[
305 		class_<GlobalWeapon, GlobalObject>("GlobalWeapon")
306 			.def("GetUsableBy", &GlobalWeapon::GetUsableBy)
307 // 			.def(constructor<>(uint32, uint32))
308 	];
309 
310 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
311 	[
312 		class_<GlobalArmor, GlobalObject>("GlobalArmor")
313 			.def("GetUsableBy", &GlobalArmor::GetUsableBy)
314 // 			.def(constructor<>(uint32, uint32))
315 	];
316 
317 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
318 	[
319 		class_<GlobalStatusEffect>("GlobalStatusEffect")
320 			.def("GetType", &GlobalStatusEffect::GetType)
321 			.def("GetIntensity", &GlobalStatusEffect::GetIntensity)
322 	];
323 
324 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
325 	[
326 		class_<GlobalElementalEffect>("GlobalElementalEffect")
327 	];
328 
329 	module(hoa_script::ScriptManager->GetGlobalState(), "hoa_global")
330 	[
331 		class_<GlobalSkill>("GlobalSkill")
332 	];
333 
334 	} // End using global namespaces
335 
336 	// Bind GlobalManager to Lua
337 	luabind::object global_table = luabind::globals(hoa_script::ScriptManager->GetGlobalState());
338 	global_table["GlobalManager"] = hoa_global::GlobalManager;
339 } // BindGlobalsToLua
340 
341 } // namespace hoa_defs
342