2 * This file is part of ShapeFusion (Copyright 2000 Tito Dal Canton)
4 * ShapeFusion is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * ShapeFusion is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with ShapeFusion; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #ifndef __PHYSICSVIEW_H__
20 #define __PHYSICSVIEW_H__
22 #include "wx/docview.h"
23 #include "wx/treectrl.h"
24 #include "PhysicsDocument.h"
25 #include "../ShapeFusionApp.h"
27 class PhysicsView : public wxView
29 DECLARE_DYNAMIC_CLASS(PhysicsView)
33 FIELD_ALIEN_COLLECTION,
34 FIELD_ALIEN_COLOR_TABLE,
36 FIELD_ALIEN_HARD_DYING,
37 FIELD_ALIEN_SOFT_DYING,
38 FIELD_ALIEN_HARD_DEAD,
39 FIELD_ALIEN_SOFT_DEAD,
40 FIELD_ALIEN_STATIONARY,
42 FIELD_ALIEN_TELEPORT_IN,
43 FIELD_ALIEN_TELEPORT_OUT,
44 FIELD_ALIEN_MELEE_ATTACK_SHAPE,
45 FIELD_ALIEN_RANGED_ATTACK_SHAPE,
47 MENU_ALIEN_ACTIVATION,
48 MENU_ALIEN_FRIENDLY_ACTIVATION,
52 MENU_ALIEN_FRIENDLY_FIRE,
56 FIELD_ALIEN_RANDOM_SOUND_MASK,
57 FIELD_ALIEN_SOUND_PITCH,
59 FIELD_ALIEN_ATTACK_FREQUENCY,
61 MENU_ALIEN_ATTACK_TYPE,
62 FIELD_ALIEN_ATTACK_REPETITIONS,
63 FIELD_ALIEN_ATTACK_ERROR,
64 FIELD_ALIEN_ATTACK_RANGE,
65 FIELD_ALIEN_ATTACK_SEQUENCE,
66 FIELD_ALIEN_ATTACK_DX,
67 FIELD_ALIEN_ATTACK_DY,
68 FIELD_ALIEN_ATTACK_DZ,
69 NUM_ALIEN_ATTACK_CONTROLS = 8,
71 FIELD_ALIEN_SHRAPNEL_RADIUS = MENU_ALIEN_ATTACK_TYPE + NUM_ALIEN_ATTACK_CONTROLS * 2,
72 MENU_ALIEN_SHRAPNEL_DAMAGE_TYPE,
73 FIELD_ALIEN_SHRAPNEL_BASE_DAMAGE,
74 FIELD_ALIEN_SHRAPNEL_RANDOM_DAMAGE,
75 FIELD_ALIEN_SHRAPNEL_DAMAGE_SCALE,
76 CB_ALIEN_SHRAPNEL_ALIEN_DAMAGE,
78 MENU_ALIEN_RANGED_IMPACT_EFFECT,
79 MENU_ALIEN_MELEE_IMPACT_EFFECT,
86 FIELD_ALIEN_TERMINAL_VELOCITY,
89 FIELD_ALIEN_MIN_LEDGE_JUMP,
90 FIELD_ALIEN_MAX_LEDGE_JUMP,
91 FIELD_ALIEN_EXT_VELOCITY_SCALE,
92 FIELD_ALIEN_HOVER_HEIGHT,
93 FIELD_ALIEN_DOOR_RETRY_MASK,
95 FIELD_ALIEN_VISUAL_RANGE,
96 FIELD_ALIEN_DARK_VISUAL_RANGE,
97 FIELD_ALIEN_INTELLIGENCE,
99 MENU_ALIEN_CARRYING_ITEM,
100 MENU_ALIEN_CONTRAIL_EFFECT,
104 CB_ALIEN_ENEMIES = CB_ALIEN_FRIENDS + 16,
105 CB_ALIEN_FLAGS = CB_ALIEN_ENEMIES + 16,
106 CB_ALIEN_IMMUNITIES = CB_ALIEN_FLAGS + 27,
107 CB_ALIEN_WEAKNESSES = CB_ALIEN_IMMUNITIES + 24,
109 FIELD_EFFECT_COLLECTION = CB_ALIEN_WEAKNESSES + 24,
110 FIELD_EFFECT_COLOR_TABLE,
111 FIELD_EFFECT_SEQUENCE,
113 MENU_EFFECT_DELAY_SOUND,
114 CB_EFFECT_END_WHEN_ANIMATION_LOOPS,
115 CB_EFFECT_END_WHEN_TRANSFER_ANIMATION_LOOPS,
116 CB_EFFECT_SOUND_ONLY,
117 CB_EFFECT_MEDIA_EFFECT,
120 CB_SHOT_ALIEN_DAMAGE = CB_SHOT_FLAGS + 22,
122 FIELD_SHOT_COLLECTION,
123 FIELD_SHOT_COLOR_TABLE,
125 FIELD_SHOT_DAMAGE_BASE,
126 FIELD_SHOT_DAMAGE_RANDOM,
128 FIELD_SHOT_AREA_OF_EFFECT,
131 FIELD_SHOT_CONTRAIL_TICKS,
132 FIELD_SHOT_MAXIMUM_CONTRAILS,
134 FIELD_SHOT_DAMAGE_SCALE,
135 FIELD_SHOT_SOUND_PITCH,
137 MENU_SHOT_DAMAGE_TYPE,
138 MENU_SHOT_FLYBY_SOUND,
139 MENU_SHOT_REBOUND_SOUND,
140 MENU_SHOT_DETONATION_EFFECT,
141 MENU_SHOT_MEDIA_DETONATION_EFFECT,
143 MENU_SHOT_MEDIA_IMPACT,
145 FIELD_MAX_FORWARD_VELOCITY,
146 FIELD_MAX_BACKWARD_VELOCITY,
147 FIELD_MAX_PERPENDICULAR_VELOCITY,
151 FIELD_AIRBORNE_DECELERATION,
152 FIELD_GRAVITATIONAL_ACCELERATION,
153 FIELD_CLIMBING_ACCELERATION,
154 FIELD_TERMINAL_VELOCITY,
155 FIELD_EXTERNAL_DECELERATION,
158 FIELD_STEP_AMPLITUDE,
163 FIELD_ANGULAR_ACCELERATION,
164 FIELD_ANGULAR_DECELERATION,
165 FIELD_MAXIMUM_ANGULAR_VELOCITY,
166 FIELD_ANGULAR_RECENTERING_VELOCITY,
167 FIELD_HEAD_ANGULAR_VELOCITY,
168 FIELD_HEAD_ANGULAR_MAXIMUM,
169 FIELD_MAXIMUM_ELEVATION,
170 FIELD_EXTERNAL_ANGULAR_DECELERATION,
175 FIELD_HALF_CAMERA_SEPARATION,
179 FIELD_WEAPON_COLLECTION = CB_WEAPON_FLAGS + 10,
180 FIELD_WEAPON_COLOR_TABLE,
183 FIELD_WEAPON_RELOADING,
184 FIELD_WEAPON_CHARGING,
185 FIELD_WEAPON_CHARGED,
187 FIELD_WEAPON_AWAIT_RELOAD,
188 FIELD_WEAPON_LOADING,
189 FIELD_WEAPON_FINISH_LOADING,
190 FIELD_WEAPON_FLASH_DECAY,
192 FIELD_WEAPON_FLASH_INTENSITY,
193 FIELD_WEAPON_IDLE_HEIGHT,
194 FIELD_WEAPON_BOB_AMPLITUDE,
195 FIELD_WEAPON_KICK_HEIGHT,
196 FIELD_WEAPON_RELOAD_HEIGHT,
197 FIELD_WEAPON_IDLE_WIDTH,
199 MENU_WEAPON_ITEM_TYPE,
202 FIELD_TRIGGER_ROUNDS,
204 FIELD_TRIGGER_RECOVERY,
205 FIELD_TRIGGER_CHARGING,
206 FIELD_TRIGGER_RECOIL,
210 FIELD_TRIGGER_BURST_COUNT,
211 MENU_TRIGGER_PROJECTILE,
212 MENU_TRIGGER_AMMO_TYPE,
215 MENU_TRIGGER_CHARGING,
216 MENU_TRIGGER_SHELL_CASING,
217 MENU_TRIGGER_RELOADING,
218 MENU_TRIGGER_CHARGED,
219 MENU_TRIGGER_SHELL_CASING_TYPE,
220 NUM_TRIGGER_IDS = 18,
221 LAST_TRIGGER_ID = MENU_TRIGGER_SHELL_CASING_TYPE + NUM_TRIGGER_IDS,
228 wxBoxSizer* dummy_sizer;
230 wxBoxSizer* aliens_appearance_sizer;
232 wxTextCtrl* alien_collection_field;
233 wxTextCtrl* alien_color_table_field;
234 wxTextCtrl* alien_hit_field;
235 wxTextCtrl* alien_hard_dying_field;
236 wxTextCtrl* alien_soft_dying_field;
237 wxTextCtrl* alien_hard_dead_field;
238 wxTextCtrl* alien_soft_dead_field;
239 wxTextCtrl* alien_stationary_field;
240 wxTextCtrl* alien_moving_field;
241 wxTextCtrl* alien_teleport_in_field;
242 wxTextCtrl* alien_teleport_out_field;
243 wxTextCtrl* alien_melee_attack_shape_field;
244 wxTextCtrl* alien_ranged_attack_shape_field;
246 wxChoice* alien_activation_choice;
247 wxChoice* alien_friendly_activation_choice;
248 wxChoice* alien_clear_choice;
249 wxChoice* alien_kill_choice;
250 wxChoice* alien_apology_choice;
251 wxChoice* alien_friendly_fire_choice;
252 wxChoice* alien_flaming_choice;
253 wxChoice* alien_random_choice;
255 wxTextCtrl* alien_random_sound_mask_field;
256 wxTextCtrl* alien_sound_pitch_field;
258 wxBoxSizer* aliens_combat_sizer;
260 wxTextCtrl* alien_attack_frequency_field;
262 wxChoice* alien_attack_type_choices[2];
263 wxTextCtrl* alien_attack_repetitions_fields[2];
264 wxTextCtrl* alien_attack_error_fields[2];
265 wxTextCtrl* alien_attack_range_fields[2];
266 wxTextCtrl* alien_attack_sequence_fields[2];
267 wxTextCtrl* alien_attack_dx_fields[2];
268 wxTextCtrl* alien_attack_dy_fields[2];
269 wxTextCtrl* alien_attack_dz_fields[2];
271 wxTextCtrl* alien_shrapnel_radius_field;
272 wxChoice* alien_shrapnel_damage_type_choice;
273 wxTextCtrl* alien_shrapnel_base_damage_field;
274 wxTextCtrl* alien_shrapnel_random_damage_field;
275 wxTextCtrl* alien_shrapnel_damage_scale_field;
276 wxCheckBox* alien_shrapnel_alien_damage_checkbox;
278 wxChoice* alien_ranged_impact_effect_choice;
279 wxChoice* alien_melee_impact_effect_choice;
281 wxBoxSizer* aliens_constants_sizer;
283 wxTextCtrl* alien_vitality_field;
284 wxTextCtrl* alien_radius_field;
285 wxTextCtrl* alien_height_field;
287 wxTextCtrl* alien_speed_field;
288 wxTextCtrl* alien_terminal_velocity_field;
289 wxTextCtrl* alien_gravity_field;
291 wxTextCtrl* alien_min_ledge_jump_field;
292 wxTextCtrl* alien_max_ledge_jump_field;
293 wxTextCtrl* alien_ext_velocity_scale_field;
294 wxTextCtrl* alien_hover_height_field;
295 wxTextCtrl* alien_door_retry_mask_field;
297 wxTextCtrl* alien_visual_range_field;
298 wxTextCtrl* alien_dark_visual_range_field;
299 wxTextCtrl* alien_intelligence_field;
301 wxChoice* alien_carrying_item_choice;
302 wxChoice* alien_contrail_effect_choice;
304 wxBoxSizer* aliens_behavior_sizer;
306 wxChoice* alien_class_choice;
308 wxCheckBox* alien_friends_checkboxes[16];
309 wxCheckBox* alien_enemies_checkboxes[16];
310 wxCheckBox* alien_flags_checkboxes[27];
312 wxBoxSizer* aliens_immunities_sizer;
314 wxCheckBox* alien_immunities_checkboxes[24];
315 wxCheckBox* alien_weaknesses_checkboxes[24];
317 wxBoxSizer* effects_sizer;
319 wxTextCtrl* eff_collection_field;
320 wxTextCtrl* eff_color_table_field;
321 wxTextCtrl* eff_sequence_field;
322 wxTextCtrl* eff_pitch_field;
324 wxTextCtrl* eff_delay_field;
326 wxChoice* eff_delay_sound_choice;
328 wxCheckBox* eff_end_when_animation_loops_checkbox;
329 wxCheckBox* eff_end_when_transfer_animation_loops_checkbox;
330 wxCheckBox* eff_sound_only_checkbox;
331 wxCheckBox* eff_media_effect_checkbox;
333 wxFlexGridSizer* physics_sizer;
335 wxTextCtrl* max_forward_velocity_field;
336 wxTextCtrl* max_backward_velocity_field;
337 wxTextCtrl* max_perpendicular_velocity_field;
339 wxTextCtrl* acceleration_field;
340 wxTextCtrl* deceleration_field;
341 wxTextCtrl* airborne_deceleration_field;
342 wxTextCtrl* gravitational_acceleration_field;
343 wxTextCtrl* climbing_acceleration_field;
344 wxTextCtrl* terminal_velocity_field;
345 wxTextCtrl* external_deceleration_field;
347 wxTextCtrl* step_delta_field;
348 wxTextCtrl* step_amplitude_field;
350 wxTextCtrl* radius_field;
351 wxTextCtrl* height_field;
353 wxTextCtrl* angular_acceleration_field;
354 wxTextCtrl* angular_deceleration_field;
355 wxTextCtrl* maximum_angular_velocity_field;
356 wxTextCtrl* angular_recentering_velocity_field;
357 wxTextCtrl* head_angular_velocity_field;
358 wxTextCtrl* head_angular_maximum_field;
359 wxTextCtrl* maximum_elevation_field;
360 wxTextCtrl* external_angular_deceleration_field;
362 wxTextCtrl* dead_height_field;
363 wxTextCtrl* camera_height_field;
364 wxTextCtrl* splash_height_field;
365 wxTextCtrl* half_camera_separation_field;
367 wxBoxSizer* shots_sizer;
369 wxTextCtrl* shots_collection_field;
370 wxTextCtrl* shots_color_table_field;
371 wxTextCtrl* shots_sequence_field;
373 wxChoice* shots_damage_type_choice;
374 wxTextCtrl* shots_damage_base_field;
375 wxTextCtrl* shots_damage_random_field;
376 wxTextCtrl* shots_damage_scale_field;
377 wxCheckBox* shots_alien_damage_checkbox;
379 wxChoice* shots_flyby_sound_choice;
380 wxChoice* shots_rebound_sound_choice;
381 wxTextCtrl* shots_sound_pitch_field;
382 wxTextCtrl* shots_radius_field;
383 wxTextCtrl* shots_area_of_effect_field;
384 wxTextCtrl* shots_speed_field;
385 wxTextCtrl* shots_range_field;
386 wxChoice* shots_detonation_effect_choice;
387 wxChoice* shots_media_detonation_effect_choice;
388 wxChoice* shots_contrail_choice;
389 wxTextCtrl* shots_contrail_ticks_field;
390 wxTextCtrl* shots_maximum_contrails_field;
392 wxCheckBox* shots_flags_checkboxes[22];
394 wxChoice* shots_media_impact_choice;
396 wxBoxSizer* weapons_definitions_sizer;
398 wxChoice* weapon_item_type_choice;
400 wxTextCtrl* weapon_collection_field;
401 wxTextCtrl* weapon_color_table_field;
402 wxTextCtrl* weapon_idle_field;
403 wxTextCtrl* weapon_firing_field;
404 wxTextCtrl* weapon_reloading_field;
405 wxTextCtrl* weapon_charging_field;
406 wxTextCtrl* weapon_charged_field;
407 wxTextCtrl* weapon_flash_intensity_field;
409 wxTextCtrl* weapon_ready_field;
410 wxTextCtrl* weapon_await_reload_field;
411 wxTextCtrl* weapon_loading_field;
412 wxTextCtrl* weapon_finish_loading_field;
413 wxTextCtrl* weapon_flash_decay_field;
415 wxChoice* weapon_class_choice;
417 wxTextCtrl* weapon_idle_height_field;
418 wxTextCtrl* weapon_bob_amplitude_field;
419 wxTextCtrl* weapon_kick_height_field;
420 wxTextCtrl* weapon_reload_height_field;
421 wxTextCtrl* weapon_idle_width_field;
423 wxCheckBox* weapon_flags_checkboxes[10];
425 wxBoxSizer* weapons_triggers_sizer;
427 wxChoice* trigger_projectile_choices[2];
428 wxTextCtrl* trigger_rounds_fields[2];
429 wxChoice* trigger_ammo_type_choices[2];
431 wxChoice* trigger_firing_choices[2];
432 wxChoice* trigger_click_choices[2];
433 wxChoice* trigger_charging_choices[2];
434 wxChoice* trigger_shell_casing_choices[2];
435 wxChoice* trigger_reloading_choices[2];
436 wxChoice* trigger_charged_choices[2];
438 wxTextCtrl* trigger_ticks_fields[2];
439 wxTextCtrl* trigger_recovery_fields[2];
440 wxTextCtrl* trigger_charging_fields[2];
441 wxTextCtrl* trigger_recoil_fields[2];
442 wxTextCtrl* trigger_theta_fields[2];
443 wxTextCtrl* trigger_dx_fields[2];
444 wxTextCtrl* trigger_dz_fields[2];
445 wxTextCtrl* trigger_burst_count_fields[2];
447 wxChoice* trigger_shell_casing_type_choices[2];
450 DECLARE_EVENT_TABLE();
456 bool OnCreate(wxDocument* doc, long flags);
457 void OnDraw(wxDC* dc);
458 void OnUpdate(wxView* sender, wxObject* hint = (wxObject *) NULL);
459 bool OnClose(bool deletewindow = false);
462 void OnTreeSelect(wxTreeEvent& e);
466 void CreateEffects();
467 void CreatePhysicsConstants();
469 void CreateWeapons();
471 void OnSelectAlienAppearance(int index);
472 void OnSelectAlienCombat(int index);
473 void OnSelectAlienConstants(int index);
474 void OnSelectAlienBehavior(int index);
475 void OnSelectAlienImmunities(int index);
476 void OnSelectPhysicsConstants(int index);
477 void OnSelectEffect(int index);
478 void OnSelectShot(int index);
479 void OnSelectWeaponDefinition(int index);
480 void OnSelectWeaponTriggers(int index);
482 short GetSelection(); // index of current tree selection
484 void MenuEditCopy(wxCommandEvent&);
485 void MenuEditPaste(wxCommandEvent&);
487 void EditAlienCheckboxes(wxCommandEvent& e);
488 void EditAlienDoubles(wxCommandEvent& e);
489 void EditAlienFields(wxCommandEvent& e);
490 void EditAlienMenus(wxCommandEvent& e);
492 void EditEffectCheckboxes(wxCommandEvent& e);
493 void EditEffectFields(wxCommandEvent& e);
494 void EditEffectDoubles(wxCommandEvent& e);
495 void EditEffectMenus(wxCommandEvent& e);
497 void EditShotCheckboxes(wxCommandEvent& e);
498 void EditShotFields(wxCommandEvent& e);
499 void EditShotDoubles(wxCommandEvent& e);
500 void EditShotMenus(wxCommandEvent& e);
502 void EditPhysicsConstants(wxCommandEvent& e);
504 void EditWeaponCheckboxes(wxCommandEvent& e);
505 void EditWeaponFields(wxCommandEvent& e);
506 void EditWeaponDoubles(wxCommandEvent& e);
507 void EditWeaponMenus(wxCommandEvent& e);
509 void EditTriggerFields(wxCommandEvent& e);
510 void EditTriggerMenus(wxCommandEvent& e);