Newer
Older
#include "bats.hpp"
#include "environment.hpp"
#include "key_positions_structure.hpp"
#include "interpolation.hpp"
#include "terrain.hpp"
void bats::initialize_bats()
{
// Initialize the temporary mesh_drawable that will be inserted in the hierarchy
mesh_drawable body;
mesh_drawable wing1;
mesh_drawable wing2;
// Create the geometry of the meshes
// Note: this geometry must be set in their local coordinates with respect to their position in the hierarchy (and with respect to their animation)
body.initialize_data_on_gpu(mesh_load_file_obj(project::path + "assets/bat/batbodyok.obj"));
wing1.initialize_data_on_gpu(mesh_load_file_obj(project::path + "assets/bat/batwingleft.obj"));
wing2.initialize_data_on_gpu(mesh_load_file_obj(project::path + "assets/bat/batwingright.obj"));
// Scale the model
//body.model.scaling = 0.2f;
//wing1.model.scaling = 0.2f;
//wing2.model.scaling = 0.2f;
// Set the color of some elements
body.material.color = { 1,1,1 };
body.material.phong.specular = 0.0f;
wing1.material.color = { 0.4f,0.4f,0.4f };
wing1.material.phong.specular = 0.0f;
wing2.material.color = { 0.4f,0.4f,0.4f };
wing2.material.phong.specular = 0.0f;
body.texture.load_and_initialize_texture_2d_on_gpu(project::path + "assets/bat/bat_texture.jpg",
GL_REPEAT,
GL_REPEAT);
wing1.texture.load_and_initialize_texture_2d_on_gpu(project::path + "assets/bat/batw_texture.jpg",
GL_REPEAT,
GL_MIRRORED_REPEAT);
wing2.texture.load_and_initialize_texture_2d_on_gpu(project::path + "assets/bat/batw_texture.jpg",
GL_REPEAT,
GL_MIRRORED_REPEAT);
// Add the elements in the hierarchy
// The syntax is hierarchy.add(mesh_drawable, "name of the parent element", [optional: local translation in the hierarchy])
// Notes:
// - An element must necessarily be added after its parent
// - The first element (without explicit name of its parent) is assumed to be the root.
bat_mesh.add(body, "Bat base");
bat_mesh.add(wing1, "Bat wing left1", "Bat base");
bat_mesh.add(wing2, "Bat wing right1", "Bat base");
N = 0;
}
void bats::update_mvt()
{
for (int i = 0; i < N; i++) {
bats_prop[i].update_mvt();
}
}
void bats::add_bat(vec3 new_pos, float _size, numarray<vec3> key_positions, numarray<float> key_times) {
N++;
bats_prop.resize(N);
bats_prop[N - 1].pos = new_pos;
bats_prop[N - 1].isdead = false;
bats_prop[N - 1].size = _size;
bats_prop[N - 1].initialize_mvt(new_pos, key_positions, key_times);
}