void Animal::handleStimulus(Environment *environment, double dt) { voiceInterval -= dt; if (this == environment->getPlayer()) { Vector2D movement = environment->getMovement(); movement = movement.mult(dt); translate(movement); handleCollisions(environment); environment->updateObjectScreen(this); if (movement.distanceTo(Vector2D()) > 1.0e-5) { addEnergy(-dt); } for (int i = 0; i < sensors.size(); i++) { sensors[i]->handleStimulus(this, environment, dt); } } else { RandomNumberGenerator *rng = RandomNumberGenerator::getInstance(); if (curAIStateDuration > 0.0) { curAIStateDuration -= dt; } else { curAIStateDuration = ((double) rng->getInt(500, 3000)) / 1000.0; curAIDirection = Vector2D(rng->getInt(-1, 1), rng->getInt(-1, 1)); curAIDirection = curAIDirection.mult(speed); } Vector2D movement = curAIDirection; movement = movement.mult(dt); translate(movement); handleCollisions(environment); environment->updateObjectScreen(this); } }
Animal::Animal() : Object(OBJ_TYPE_ANIMAL) { energy = 80.0; speed = 80.0; if (!samplesInitialized) { for (int i = 0; i < 16; i++) { voiceSamples[i] = 0; } samplesInitialized = true; } voice = dna.getVoice(); RandomNumberGenerator *rng = RandomNumberGenerator::getInstance(); voiceInterval = ((double) rng->getInt(500, 5000)) / 1000.0; addSensor(dna.getSightSensor()); addSensor(dna.getDigestiveSystem()); addSensor(dna.getHearingSensor()); addSensor(dna.getNervousSystem()); }
void Animal::resetVoiceInterval() { RandomNumberGenerator *rng = RandomNumberGenerator::getInstance(); voiceInterval = ((double) rng->getInt(500, 5000)) / 1000.0; }