OSDN Git Service

イニシャルコミット。
[marathon/ShapeFusion.git] / Physics / PhysicsView.h
1 /*
2  * This file is part of ShapeFusion (Copyright 2000 Tito Dal Canton)
3  *
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.
8  *
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.
13  *
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
17 */
18
19 #ifndef __PHYSICSVIEW_H__
20 #define __PHYSICSVIEW_H__
21
22 #include "wx/docview.h"
23 #include "wx/treectrl.h"
24 #include "PhysicsDocument.h"
25 #include "../ShapeFusionApp.h"
26
27 class PhysicsView : public wxView
28 {
29         DECLARE_DYNAMIC_CLASS(PhysicsView)
30
31 private:
32         enum {
33                 FIELD_ALIEN_COLLECTION,
34                 FIELD_ALIEN_COLOR_TABLE,
35                 FIELD_ALIEN_HIT,
36                 FIELD_ALIEN_HARD_DYING,
37                 FIELD_ALIEN_SOFT_DYING,
38                 FIELD_ALIEN_HARD_DEAD,
39                 FIELD_ALIEN_SOFT_DEAD,
40                 FIELD_ALIEN_STATIONARY,
41                 FIELD_ALIEN_MOVING,
42                 FIELD_ALIEN_TELEPORT_IN,
43                 FIELD_ALIEN_TELEPORT_OUT,
44                 FIELD_ALIEN_MELEE_ATTACK_SHAPE,
45                 FIELD_ALIEN_RANGED_ATTACK_SHAPE,
46
47                 MENU_ALIEN_ACTIVATION,
48                 MENU_ALIEN_FRIENDLY_ACTIVATION,
49                 MENU_ALIEN_CLEAR,
50                 MENU_ALIEN_KILL,
51                 MENU_ALIEN_APOLOGY,
52                 MENU_ALIEN_FRIENDLY_FIRE,
53                 MENU_ALIEN_FLAMING,
54                 MENU_ALIEN_RANDOM,
55
56                 FIELD_ALIEN_RANDOM_SOUND_MASK,
57                 FIELD_ALIEN_SOUND_PITCH,
58
59                 FIELD_ALIEN_ATTACK_FREQUENCY,
60
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,
70
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,
77
78                 MENU_ALIEN_RANGED_IMPACT_EFFECT,
79                 MENU_ALIEN_MELEE_IMPACT_EFFECT,
80
81                 FIELD_ALIEN_VITALITY,
82                 FIELD_ALIEN_RADIUS,
83                 FIELD_ALIEN_HEIGHT,
84
85                 FIELD_ALIEN_SPEED,
86                 FIELD_ALIEN_TERMINAL_VELOCITY,
87                 FIELD_ALIEN_GRAVITY,
88
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,
94         
95                 FIELD_ALIEN_VISUAL_RANGE,
96                 FIELD_ALIEN_DARK_VISUAL_RANGE,
97                 FIELD_ALIEN_INTELLIGENCE,
98                 
99                 MENU_ALIEN_CARRYING_ITEM,
100                 MENU_ALIEN_CONTRAIL_EFFECT,
101
102                 MENU_ALIEN_CLASS,
103                 CB_ALIEN_FRIENDS,
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,
108
109                 FIELD_EFFECT_COLLECTION = CB_ALIEN_WEAKNESSES + 24,
110                 FIELD_EFFECT_COLOR_TABLE,
111                 FIELD_EFFECT_SEQUENCE,
112                 FIELD_EFFECT_PITCH,
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,
118
119                 CB_SHOT_FLAGS,
120                 CB_SHOT_ALIEN_DAMAGE = CB_SHOT_FLAGS + 22,
121
122                 FIELD_SHOT_COLLECTION,
123                 FIELD_SHOT_COLOR_TABLE,
124                 FIELD_SHOT_SEQUENCE,
125                 FIELD_SHOT_DAMAGE_BASE,
126                 FIELD_SHOT_DAMAGE_RANDOM,
127                 FIELD_SHOT_RADIUS,
128                 FIELD_SHOT_AREA_OF_EFFECT,
129                 FIELD_SHOT_SPEED,
130                 FIELD_SHOT_RANGE,
131                 FIELD_SHOT_CONTRAIL_TICKS,
132                 FIELD_SHOT_MAXIMUM_CONTRAILS,
133                 
134                 FIELD_SHOT_DAMAGE_SCALE,
135                 FIELD_SHOT_SOUND_PITCH,
136
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,
142                 MENU_SHOT_CONTRAIL,
143                 MENU_SHOT_MEDIA_IMPACT,
144
145                 FIELD_MAX_FORWARD_VELOCITY,
146                 FIELD_MAX_BACKWARD_VELOCITY,
147                 FIELD_MAX_PERPENDICULAR_VELOCITY,
148
149                 FIELD_ACCELERATION,
150                 FIELD_DECELERATION,
151                 FIELD_AIRBORNE_DECELERATION,
152                 FIELD_GRAVITATIONAL_ACCELERATION,
153                 FIELD_CLIMBING_ACCELERATION,
154                 FIELD_TERMINAL_VELOCITY,
155                 FIELD_EXTERNAL_DECELERATION,
156
157                 FIELD_STEP_DELTA,
158                 FIELD_STEP_AMPLITUDE,
159
160                 FIELD_RADIUS,
161                 FIELD_HEIGHT,
162
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,
171
172                 FIELD_DEAD_HEIGHT,
173                 FIELD_CAMERA_HEIGHT,
174                 FIELD_SPLASH_HEIGHT,
175                 FIELD_HALF_CAMERA_SEPARATION,
176
177                 CB_WEAPON_FLAGS,
178
179                 FIELD_WEAPON_COLLECTION = CB_WEAPON_FLAGS + 10,
180                 FIELD_WEAPON_COLOR_TABLE,
181                 FIELD_WEAPON_IDLE,
182                 FIELD_WEAPON_FIRING,
183                 FIELD_WEAPON_RELOADING,
184                 FIELD_WEAPON_CHARGING,
185                 FIELD_WEAPON_CHARGED,
186                 FIELD_WEAPON_READY,
187                 FIELD_WEAPON_AWAIT_RELOAD,
188                 FIELD_WEAPON_LOADING,
189                 FIELD_WEAPON_FINISH_LOADING,
190                 FIELD_WEAPON_FLASH_DECAY,
191
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,
198                 
199                 MENU_WEAPON_ITEM_TYPE,
200                 MENU_WEAPON_CLASS,
201
202                 FIELD_TRIGGER_ROUNDS,
203                 FIELD_TRIGGER_TICKS,
204                 FIELD_TRIGGER_RECOVERY,
205                 FIELD_TRIGGER_CHARGING,
206                 FIELD_TRIGGER_RECOIL,
207                 FIELD_TRIGGER_THETA,
208                 FIELD_TRIGGER_DX,
209                 FIELD_TRIGGER_DZ,
210                 FIELD_TRIGGER_BURST_COUNT,
211                 MENU_TRIGGER_PROJECTILE,
212                 MENU_TRIGGER_AMMO_TYPE,
213                 MENU_TRIGGER_FIRING,
214                 MENU_TRIGGER_CLICK,
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,
222         };
223
224         wxBoxSizer* mainbox;
225         wxPanel* main_panel;
226         wxMenuBar* menubar;
227         wxTreeCtrl* tree;
228         wxBoxSizer* dummy_sizer;
229
230         wxBoxSizer* aliens_appearance_sizer;
231
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;
245
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;
254
255         wxTextCtrl* alien_random_sound_mask_field;
256         wxTextCtrl* alien_sound_pitch_field;
257         
258         wxBoxSizer* aliens_combat_sizer;
259
260         wxTextCtrl* alien_attack_frequency_field;
261
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];
270
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;
277
278         wxChoice* alien_ranged_impact_effect_choice;
279         wxChoice* alien_melee_impact_effect_choice;
280
281         wxBoxSizer* aliens_constants_sizer;
282
283         wxTextCtrl* alien_vitality_field;
284         wxTextCtrl* alien_radius_field;
285         wxTextCtrl* alien_height_field;
286
287         wxTextCtrl* alien_speed_field;
288         wxTextCtrl* alien_terminal_velocity_field;
289         wxTextCtrl* alien_gravity_field;
290
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;
296         
297         wxTextCtrl* alien_visual_range_field;
298         wxTextCtrl* alien_dark_visual_range_field;
299         wxTextCtrl* alien_intelligence_field;
300         
301         wxChoice* alien_carrying_item_choice;
302         wxChoice* alien_contrail_effect_choice;
303
304         wxBoxSizer* aliens_behavior_sizer;
305
306         wxChoice* alien_class_choice;
307
308         wxCheckBox* alien_friends_checkboxes[16];
309         wxCheckBox* alien_enemies_checkboxes[16];
310         wxCheckBox* alien_flags_checkboxes[27];
311
312         wxBoxSizer* aliens_immunities_sizer;
313
314         wxCheckBox* alien_immunities_checkboxes[24];
315         wxCheckBox* alien_weaknesses_checkboxes[24];
316         
317         wxBoxSizer* effects_sizer;
318
319         wxTextCtrl* eff_collection_field;
320         wxTextCtrl* eff_color_table_field;
321         wxTextCtrl* eff_sequence_field;
322         wxTextCtrl* eff_pitch_field;
323
324         wxTextCtrl* eff_delay_field;
325
326         wxChoice* eff_delay_sound_choice;
327
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;
332
333         wxFlexGridSizer* physics_sizer;
334
335         wxTextCtrl* max_forward_velocity_field;
336         wxTextCtrl* max_backward_velocity_field;
337         wxTextCtrl* max_perpendicular_velocity_field;
338
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;
346
347         wxTextCtrl* step_delta_field;
348         wxTextCtrl* step_amplitude_field;
349
350         wxTextCtrl* radius_field;
351         wxTextCtrl* height_field;
352
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;
361
362         wxTextCtrl* dead_height_field;
363         wxTextCtrl* camera_height_field;
364         wxTextCtrl* splash_height_field;
365         wxTextCtrl* half_camera_separation_field;
366
367         wxBoxSizer* shots_sizer;
368
369         wxTextCtrl* shots_collection_field;
370         wxTextCtrl* shots_color_table_field;
371         wxTextCtrl* shots_sequence_field;
372
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;
378
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;
391
392         wxCheckBox* shots_flags_checkboxes[22];
393
394         wxChoice* shots_media_impact_choice;
395
396         wxBoxSizer* weapons_definitions_sizer;
397
398         wxChoice* weapon_item_type_choice;
399
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;
408
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;
414
415         wxChoice* weapon_class_choice;
416
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;
422
423         wxCheckBox* weapon_flags_checkboxes[10];
424
425         wxBoxSizer* weapons_triggers_sizer;
426
427         wxChoice* trigger_projectile_choices[2];
428         wxTextCtrl* trigger_rounds_fields[2];
429         wxChoice* trigger_ammo_type_choices[2];
430
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];
437         
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];
446         
447         wxChoice* trigger_shell_casing_type_choices[2];
448         
449 protected:
450         DECLARE_EVENT_TABLE();
451
452 public:
453         PhysicsView() { }
454         ~PhysicsView(){ }
455
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);
460         
461         // control callbacks
462         void OnTreeSelect(wxTreeEvent& e);
463
464 private:
465         void CreateAliens();
466         void CreateEffects();
467         void CreatePhysicsConstants();
468         void CreateShots();
469         void CreateWeapons();
470
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);
481
482         short GetSelection(); // index of current tree selection
483
484         void MenuEditCopy(wxCommandEvent&);
485         void MenuEditPaste(wxCommandEvent&);
486
487         void EditAlienCheckboxes(wxCommandEvent& e);
488         void EditAlienDoubles(wxCommandEvent& e);
489         void EditAlienFields(wxCommandEvent& e);
490         void EditAlienMenus(wxCommandEvent& e);
491
492         void EditEffectCheckboxes(wxCommandEvent& e);
493         void EditEffectFields(wxCommandEvent& e);
494         void EditEffectDoubles(wxCommandEvent& e);
495         void EditEffectMenus(wxCommandEvent& e);
496
497         void EditShotCheckboxes(wxCommandEvent& e);
498         void EditShotFields(wxCommandEvent& e);
499         void EditShotDoubles(wxCommandEvent& e);
500         void EditShotMenus(wxCommandEvent& e);
501
502         void EditPhysicsConstants(wxCommandEvent& e);
503
504         void EditWeaponCheckboxes(wxCommandEvent& e);
505         void EditWeaponFields(wxCommandEvent& e);
506         void EditWeaponDoubles(wxCommandEvent& e);
507         void EditWeaponMenus(wxCommandEvent& e);
508
509         void EditTriggerFields(wxCommandEvent& e);
510         void EditTriggerMenus(wxCommandEvent& e);
511
512         wxFrame* mFrame;
513 };
514
515 #endif