BattleAction::BattleAction(BattleActor* actor, BattleTarget target) : _actor(actor), _target(target), _is_scripted(false) { if(actor == nullptr) IF_PRINT_WARNING(BATTLE_DEBUG) << "constructor received nullptr actor" << std::endl; if(target.GetType() == GLOBAL_TARGET_INVALID) IF_PRINT_WARNING(BATTLE_DEBUG) << "constructor received invalid target" << std::endl; }
ItemAction::ItemAction(BattleActor *source, BattleTarget target, const std::shared_ptr<BattleItem>& item) : BattleAction(source, target), _item(item), _action_canceled(false) { if(item == nullptr) { PRINT_WARNING << "Item action without valid item!!" << std::endl; return; } if(item->GetGlobalItem().GetTargetType() == GLOBAL_TARGET_INVALID) IF_PRINT_WARNING(BATTLE_DEBUG) << "constructor received invalid item" << std::endl; if(item->GetGlobalItem().GetTargetType() != target.GetType()) IF_PRINT_WARNING(BATTLE_DEBUG) << "item and target reference different target types" << std::endl; if(item->GetGlobalItem().IsUsableInBattle() == false) IF_PRINT_WARNING(BATTLE_DEBUG) << "item is not usable in battle" << std::endl; // Check for a custom skill animation script for the given character _is_scripted = false; std::string animation_script_file = item->GetGlobalItem().GetAnimationScript(); if(animation_script_file.empty()) return; // Clears out old script data std::string tablespace = ScriptEngine::GetTableSpace(animation_script_file); ScriptManager->DropGlobalTable(tablespace); if(!_anim_script.OpenFile(animation_script_file)) { _anim_script.CloseFile(); return; } if(_anim_script.OpenTablespace().empty()) { PRINT_ERROR << "No namespace found in file: " << animation_script_file << std::endl; _anim_script.CloseFile(); return; } _init_function = _anim_script.ReadFunctionPointer("Initialize"); if(!_init_function.is_valid()) { _anim_script.CloseFile(); return; } // Attempt to load a possible update function. _update_function = _anim_script.ReadFunctionPointer("Update"); _is_scripted = true; }
SkillAction::SkillAction(BattleActor *actor, BattleTarget target, GlobalSkill *skill) : BattleAction(actor, target), _skill(skill) { if(skill == nullptr) { IF_PRINT_WARNING(BATTLE_DEBUG) << "constructor received nullptr skill argument" << std::endl; return; } if(skill->GetTargetType() == GLOBAL_TARGET_INVALID) IF_PRINT_WARNING(BATTLE_DEBUG) << "constructor received invalid skill" << std::endl; if(skill->GetTargetType() != target.GetType()) IF_PRINT_WARNING(BATTLE_DEBUG) << "skill and target reference different target types" << std::endl; if(skill->IsExecutableInBattle() == false) IF_PRINT_WARNING(BATTLE_DEBUG) << "skill is not executable in battle" << std::endl; // Check for a custom skill animation script for the given character _is_scripted = false; std::string animation_script_file = skill->GetAnimationScript(_actor->GetID()); if(animation_script_file.empty()) return; // Clears out old script data std::string tablespace = ScriptEngine::GetTableSpace(animation_script_file); ScriptManager->DropGlobalTable(tablespace); if(!_anim_script.OpenFile(animation_script_file)) { _anim_script.CloseFile(); return; } if(_anim_script.OpenTablespace().empty()) { PRINT_ERROR << "No namespace found in file: " << animation_script_file << std::endl; _anim_script.CloseFile(); return; } _init_function = _anim_script.ReadFunctionPointer("Initialize"); if(!_init_function.is_valid()) { _anim_script.CloseFile(); return; } // Attempt to load a possible update function. _update_function = _anim_script.ReadFunctionPointer("Update"); _is_scripted = true; }