コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}