Пример #1
0
//--------------------------------------------------------------
// Name:        selectState()
// Class:       GeneralCombatWithMeleeWeapon
//
// Description: Selects the state for the behavior
//
// Parameters:  Actor &self
//
// Returns:     None
//--------------------------------------------------------------
void GeneralCombatWithMeleeWeapon::selectState( Actor &self )
{
	float chance;
	Entity* currentEnemy;
	currentEnemy = self.enemyManager->GetCurrentEnemy();

	// If we don't have an enemy, then let's ask our enemy manager
	// to try and find one
	if ( !currentEnemy )
		self.enemyManager->FindHighestHateEnemy();

	// If we still don't have an enemy, then we need to hold
	if ( !currentEnemy )
		{
		if ( !setupHold( self ))
			return;

		_state = GENERAL_COMBAT_MELEE_HOLD;
		return;
		}

	chance = G_Random();
	if ( self.checkincomingmeleeattack() && chance < _blockChance )
		{
		_state = GENERAL_COMBAT_MELEE_BLOCK;

		if ( !setupBlock( self ) )
			setupBlockFailed( self );
		return;
		}

	chance = G_Random();
	if ( currentEnemy && self.enemyManager->InEnemyLineOfFire() && chance < _strafeChance && self.WithinDistance( currentEnemy , _meleeDistance ) )
		{
		_state = GENERAL_COMBAT_MELEE_STRAFE;

		if ( !setupStrafe( self ) )
			strafeFailed(self);

		return;      
		}




	//
	// The Change Posture stuff is commented out because it looks really weak right now
	// I need to keep it here though, so that when the animations look better or I figure out
	// how to better utilize them it will be easy to re-enable
	//
	//if ( currentEnemy && chance < _postureChangeChance && level.time > _nextPostureChangeTime && self.WithinDistance( currentEnemy , _meleeDistance ) )
	//   {
	//   _state = GENERAL_COMBAT_MELEE_CHANGE_POSTURE;
	//
	//   if ( !_setupChangePosture(self) )
	//      _setupChangePostureFailed(self);
	//
	//   return;
	//   }

	chance = G_Random();
	if ( currentEnemy && chance < _attackChance && self.WithinDistance( currentEnemy , _meleeDistance ) )
		{
		_state = GENERAL_COMBAT_MELEE_ATTACK;

		if (!setupAttack( self ))
			setupAttackFailed( self );

		return;
		}

	setupHold( self );
	_state = GENERAL_COMBAT_MELEE_HOLD;

}
Пример #2
0
    void rowTest()
    {
        csvsqldb::BlockManager blockManager;

        csvsqldb::Types types;
        types.push_back(csvsqldb::INT);
        types.push_back(csvsqldb::DATE);
        types.push_back(csvsqldb::STRING);
        types.push_back(csvsqldb::STRING);
        types.push_back(csvsqldb::STRING);
        types.push_back(csvsqldb::DATE);

        {
            csvsqldb::FunctionRegistry functions;
            csvsqldb::SQLParser parser(functions);
            csvsqldb::VariableStore store;

            csvsqldb::ASTExprNodePtr exp = parser.parseExpression("hire_date > DATE'2012-01-01'");
            csvsqldb::StackMachine::VariableMapping mapping;
            csvsqldb::StackMachine sm;
            csvsqldb::ASTInstructionStackVisitor visitor(sm, mapping);
            exp->accept(visitor);

            csvsqldb::BlockPtr block = setupBlock(blockManager);
            MyBlockProvider blockProvider(block, blockManager);
            csvsqldb::BlockIteratorPtr iterator = std::make_shared<csvsqldb::BlockIterator>(types, blockProvider, blockManager);

            {
                const csvsqldb::Values& rowValues = *(iterator->getNextRow());

                const csvsqldb::Value* val = rowValues[0];
                MPF_TEST_ASSERTEQUAL("4711", val->toString());
                val = rowValues[1];
                MPF_TEST_ASSERTEQUAL("1970-09-23", val->toString());
                val = rowValues[2];
                MPF_TEST_ASSERTEQUAL("Lars", val->toString());
                val = rowValues[3];
                MPF_TEST_ASSERTEQUAL("Fürstenberg", val->toString());
                val = rowValues[4];
                MPF_TEST_ASSERTEQUAL("M", val->toString());
                val = rowValues[5];
                MPF_TEST_ASSERTEQUAL("2012-02-01", val->toString());

                store.addVariable(0, csvsqldb::Variant(dynamic_cast<const csvsqldb::ValDate*>(val)->asDate()));
                bool matches = sm.evaluate(store, functions).asBool();
                MPF_TEST_ASSERT(matches);
            }

            {
                const csvsqldb::Values& rowValues = *(iterator->getNextRow());

                const csvsqldb::Value* val = rowValues[0];
                MPF_TEST_ASSERTEQUAL("815", val->toString());
                val = rowValues[1];
                MPF_TEST_ASSERTEQUAL("1969-05-17", val->toString());
                val = rowValues[2];
                MPF_TEST_ASSERTEQUAL("Mark", val->toString());
                val = rowValues[3];
                MPF_TEST_ASSERTEQUAL("Fürstenberg", val->toString());
                val = rowValues[4];
                MPF_TEST_ASSERTEQUAL("M", val->toString());
                val = rowValues[5];
                MPF_TEST_ASSERTEQUAL("2003-04-15", val->toString());

                store.addVariable(0, csvsqldb::Variant(dynamic_cast<const csvsqldb::ValDate*>(val)->asDate()));
                bool matches = sm.evaluate(store, functions).asBool();
                MPF_TEST_ASSERT(!matches);
            }
        }

        {
            csvsqldb::FunctionRegistry functions;
            csvsqldb::SQLParser parser(functions);
            csvsqldb::VariableStore store;

            csvsqldb::ASTExprNodePtr exp = parser.parseExpression("emp.last_name = 'Fürstenberg'");
            csvsqldb::StackMachine::VariableMapping mapping;
            csvsqldb::StackMachine sm;
            csvsqldb::ASTInstructionStackVisitor visitor(sm, mapping);
            exp->accept(visitor);

            csvsqldb::BlockPtr block = setupBlock(blockManager);
            MyBlockProvider blockProvider(block, blockManager);
            csvsqldb::BlockIteratorPtr iterator = std::make_shared<csvsqldb::BlockIterator>(types, blockProvider, blockManager);

            const csvsqldb::Values* row = nullptr;
            int count = 0;
            while((row = iterator->getNextRow())) {
                if(count == 0) {
                    MPF_TEST_ASSERTEQUAL("4711", (*row)[0]->toString());
                    MPF_TEST_ASSERTEQUAL("1970-09-23", (*row)[1]->toString());
                    MPF_TEST_ASSERTEQUAL("Lars", (*row)[2]->toString());
                    MPF_TEST_ASSERTEQUAL("Fürstenberg", (*row)[3]->toString());
                    MPF_TEST_ASSERTEQUAL("M", (*row)[4]->toString());
                    MPF_TEST_ASSERTEQUAL("2012-02-01", (*row)[5]->toString());

                    store.addVariable(0, csvsqldb::Variant(dynamic_cast<const csvsqldb::ValString*>((*row)[3])->asString()));
                    bool matches = sm.evaluate(store, functions).asBool();
                    MPF_TEST_ASSERT(matches);
                } else if(count == 1) {
                    MPF_TEST_ASSERTEQUAL("815", (*row)[0]->toString());
                    MPF_TEST_ASSERTEQUAL("1969-05-17", (*row)[1]->toString());
                    MPF_TEST_ASSERTEQUAL("Mark", (*row)[2]->toString());
                    MPF_TEST_ASSERTEQUAL("Fürstenberg", (*row)[3]->toString());
                    MPF_TEST_ASSERTEQUAL("M", (*row)[4]->toString());
                    MPF_TEST_ASSERTEQUAL("2003-04-15", (*row)[5]->toString());

                    store.addVariable(0, csvsqldb::Variant(dynamic_cast<const csvsqldb::ValString*>((*row)[3])->asString()));
                    bool matches = sm.evaluate(store, functions).asBool();
                    MPF_TEST_ASSERT(matches);
                }
                ++count;
            }
        }
    }