From f35e3781a120937fcf00bacd35f8e891ae630a4a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 21 Dec 2008 13:35:47 +0000 Subject: full direction. pitch and roll control for fx_flare, fx_particles and func_rotate --- src/model/map.cc | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'src/model/map.cc') diff --git a/src/model/map.cc b/src/model/map.cc index c073a4d..8139dd0 100644 --- a/src/model/map.cc +++ b/src/model/map.cc @@ -677,7 +677,7 @@ void Map::clear_bbox() class_maxbbox[i] = -MAX_BOUNDS; } - class_angle = 0; + class_axis.clear(); class_speed = 0; } @@ -715,7 +715,7 @@ void Map::load_fragmentgroup(Model *model, const FragmentGroup::Type class_type) FragmentGroup *group = new FragmentGroup(); group->set_type(class_type); group->set_location((class_minbbox + class_maxbbox) / 2.0f - map_center); - group->set_angle(class_angle); + group->set_axis(class_axis); group->set_speed(class_speed); for (Materials::iterator mit = map_materials.begin(); mit != map_materials.end(); mit++) { @@ -875,8 +875,22 @@ Model * Map::load(std::string const &name) } else if (mapfile.in_class("func_rotate")) { - if (mapfile.got_key_float("angle", mapfile.class_angle)) { - continue; + if (mapfile.got_key_float("angle", angle)) { + if (angle == ANGLEUP) { + mapfile.class_axis.change_pitch(90.0f); + } else if (angle == ANGLEDOWN) { + mapfile.class_axis.change_pitch(-90.0f); + } else { + mapfile.class_axis.change_direction(angle); + } + } else if (mapfile.got_key_float("direction", angle)) { + mapfile.class_axis.change_direction(angle); + + } else if (mapfile.got_key_float("pitch", angle)) { + mapfile.class_axis.change_pitch(angle); + + } else if (mapfile.got_key_float("roll", angle)) { + mapfile.class_axis.change_roll(angle); } else if (mapfile.got_key_float("speed", mapfile.class_speed)) { continue; @@ -1007,9 +1021,22 @@ Model * Map::load(std::string const &name) } else if (mapfile.got_key_int("flare", flare->light_flare)) { continue; - } else if (mapfile.got_key_float("angle", flare->flare_angle)) { - flare->flare_angle = math::degrees360f(flare->flare_angle); - continue; + } else if (mapfile.got_key_float("angle", angle)) { + if (angle == ANGLEUP) { + flare->flare_axis.change_pitch(90.0f); + } else if (angle == ANGLEDOWN) { + flare->flare_axis.change_pitch(-90.0f); + } else { + flare->flare_axis.change_direction(angle); + } + } else if (mapfile.got_key_float("direction", angle)) { + flare->flare_axis.change_direction(angle); + + } else if (mapfile.got_key_float("pitch", angle)) { + flare->flare_axis.change_pitch(angle); + + } else if (mapfile.got_key_float("roll", angle)) { + flare->flare_axis.change_roll(angle); } else if (mapfile.got_key()) { con_warn "Unknown key " << mapfile.classname() << ":" << mapfile.key() << std::endl; @@ -1030,8 +1057,13 @@ Model * Map::load(std::string const &name) } else if (mapfile.got_key_string("script", particles->particles_script)) { continue; } else if (mapfile.got_key_float("angle", angle)) { - particles->particles_axis.change_direction(angle); - + if (angle == ANGLEUP) { + particles->particles_axis.change_pitch(90.0f); + } else if (angle == ANGLEDOWN) { + particles->particles_axis.change_pitch(-90.0f); + } else { + particles->particles_axis.change_direction(angle); + } } else if (mapfile.got_key_float("direction", angle)) { particles->particles_axis.change_direction(angle); -- cgit v1.2.3