void ai_action(int action, int player, AI_Distances *distances) {
	switch(action) {
	case 0: break;
	case 1: ai_left(player, distances); break;
	case 2: ai_right(player, distances); break;
	}
}
示例#2
0
void Zombie::runAI(Uint16 dt) {
    Dai+=dt;
    if (state&STATE_ATTACK) Dattack+=dt;
    else Dattack=T_Attack_Bite-300;
        
    if (Dai>T_AI_EFFECT) {
        if (state&STATE_ATTACK) {
            if (targets.empty()) {
                //shouldn't happen
                unsetState(STATE_ATTACK);
            } else {
                Player* target=*(targets.begin());
                Uint16 dir=scenario->getDirection(getCenter(),target->getCenter());
                dir&=~(DIR_UP|DIR_DOWN);
                if (dir&DIR_LEFT) setState(STATE_LEFT);
                else unsetState(STATE_LEFT);
                
                if (Dattack>T_Attack_Bite) {
                    ai_attack(target,dir);
                }
            }
        } else if (state&STATE_LEFT) ai_left(Dai);
        else ai_right(Dai);
        Dai=0;
    }
}