/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at golgotha_source@usa.net (Subject should have "GOLG" in it) ***********************************************************************/ #ifndef G1_EDITOR_HH #define G1_EDITOR_HH #include "editor/contedit.hh" #include "math/num_type.hh" #include "device/event.hh" #include "device/device.hh" #include "string/string.hh" #include "editor/pmenu.hh" #include "objs/model_id.hh" #include "map.hh" #include "mess_id.hh" #include "cwin_man.hh" #include "editor/dialogs/scene.hh" #include "math/vector.hh" #include "controller.hh" #include "editor/dialogs/debug_win.hh" #include "map_man.hh" class r1_render_window_class; class i4_pull_menu_class; class g1_editor_key_item; class r1_render_api_class; class g1_object_class; class i4_image_class; class g1_movie_flow_class; class g1_time_line; class i4_text_input_class; class g1_path_window_class; class g1_editor_class : public g1_cwin_man_class { struct undo_info { int head, tail, redo_tail, max, allow; undo_info() { allow=1; head=tail=redo_tail=0; max=32; } } undo; void show_undo_state(); void save_undo_info(w32 sections, i4_const_str &fname); i4_window_class **tool_window; g1_time_line *time_line; int t_views; int vert_noise_amount; enum { MAX_VIEWS=4}; g1_controller_edit_class *views[MAX_VIEWS]; r1_render_window_class *view_wins[MAX_VIEWS]; i4_bool use_view_state; g1_view_state_class view_states[MAX_VIEWS]; void set_edit_mode(i4_bool yes_no); i4_bool need_save, can_undo, can_redo, selection, paste_buffer_valid, edit_mode, profile_view, debug_view; i4_image_class *pick_act, *pick_pass; g1_path_window_class *path_window; i4_parent_window_class *objects_window; i4_event_handler_reference_classradar_parent; void create_radar(); i4_string_manager_class e_strs; g1_map_class *create_default_map(int w, int h, const i4_const_str &name); i4_pull_menu_class *menu; g1_editor_key_item *command_keys[G1_EDITOR_LAST]; void save(); virtual void init(i4_parent_window_class *parent, i4_graphical_style_class *style, i4_image_class *root_window, i4_display_class *display, i4_window_manager_class *wm); virtual void uninit(); // this will load an image an convert it to be a compatable bit depth with the frame buffer i4_image_class *load_compatiable_image(const i4_const_str &fname); void create_objects_window(); void get_map_cell_from_type(w32 type, g1_map_cell_class &ct); void close_windows(); struct window_info { sw32 x,y; window_info() { x=0; y=0; } void save(i4_window_class *w) { x=w->x(); y=w->y(); } }; window_info wi_scene, wi_objects; g1_scene_editor_class scene_edit; void merge_terrain(); i4_bool merge_terrain_ok(i4_user_message_event_class *ev); void open_file(); void open_dll(); void open_file_ok(i4_user_message_event_class *ev); void open_dll_ok(i4_user_message_event_class *ev); void open_saveas(); void open_saveas_ok(i4_user_message_event_class *ev); void open_resize_level_window(); void resize_level(); void open_new_level_window(); void new_level_from_dialog(); struct { i4_text_input_class *w, *h; int orient; } resize_dialog; struct { i4_text_input_class *amount; } terrain_noise_dialog; struct { i4_text_input_class *w, *h, *name; } new_dialog; struct { i4_text_input_class *name; } sky_dialog; void create_sky_window(); void set_sky(); void load_height_bitmap(); void save_height_bitmap(); void load_height_bitmap_ok(i4_event *ev); void save_height_bitmap_ok(i4_event *ev); public: struct movement_info { i4_bool pan_up, pan_down, pan_left, pan_right, pan_forward, pan_backward, rotate_left, rotate_right, rotate_up, rotate_down; } movement; // used for dialog boxes that need to be completed i4_event_handler_reference_class modal_window; void close_modal(); i4_parent_window_class *create_modal(w32 w, w32 h, char *title_res); void add_undo(w32 sections); void do_undo(); void do_redo(); i4_bool have_map() { return g1_map_is_loaded(); } g1_map_class *get_map() { return g1_get_map(); } i4_image_class *delete_icon; virtual void create_views(); virtual void destroy_views(); void redraw_all(); const i4_const_str &get_editor_string(char *res_name) { return e_strs.get(res_name); } i4_const_str *get_editor_array(char *res_name) { return e_strs.get_array(res_name); } // the pointer 'window' is passed via reference because it will be set to 0, // when the tool window is replaced (at a later time) void set_tool_window(i4_window_class **window); void changed(); void do_command(w16 command_id); void select_all_verts(); g1_editor_class(); virtual void receive_event(i4_event *ev); void major_mode_change() { if (edit_mode) for (w32 i=0; i setup_mode(); } i4_bool in_editor() { return edit_mode; } void flatten_terrain(); void smooth_terrain(); void smooth_terrain_ok(); void noise_terrain(); void noise_terrain_ok(); int get_current_splines(i4_spline_class **buffer, int buf_size); void mark_selected_verts_for_undo_save(); void unmark_all_selected_verts_for_undo_save(); virtual void save_views(g1_saver_class *fp); virtual void load_views(g1_loader_class *fp); g1_controller_edit_class *get_current_view(); }; extern g1_editor_class g1_editor_instance; #endif