Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-12-21 13:35:47 +0000
committerStijn Buys <ingar@osirion.org>2008-12-21 13:35:47 +0000
commitf35e3781a120937fcf00bacd35f8e891ae630a4a (patch)
tree2c81bbb422ec56cae6dcb151536dc9e5dd24c632 /src/model/map.cc
parentaad0913d91fc3b682deddb5a5f8380d1475174f5 (diff)
full direction. pitch and roll control for fx_flare, fx_particles and func_rotate
Diffstat (limited to 'src/model/map.cc')
-rw-r--r--src/model/map.cc50
1 files changed, 41 insertions, 9 deletions
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);