Mercurial > otakunoraifu
diff scn2k/scn2k_impl.h @ 0:223b71206888
Initial import
author | thib |
---|---|
date | Fri, 01 Aug 2008 16:32:45 +0000 |
parents | |
children | 5ae5533b3a9a |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scn2k/scn2k_impl.h @@ -0,0 +1,118 @@ +#ifndef __SCN2k_IMPL_H__ +#define __SCN2k_IMPL_H__ + +#include"scn2k.h" +#include"window/widget.h" +#include"window/event.h" +#include<vector> +#include<string> +#include<map> +#include<set> + +struct StackItem { + int scn_number; + int scn_pt; + StackItem(int number, int pt) : scn_number(number), scn_pt(pt) {} +}; + +struct SaveTitle { + virtual std::string operator()(int number) const = 0; +}; + +struct Scn2kMenu { + Cmd cmd; + class Scn2kMenuImpl* pimpl; + enum MenuType { MENU_LOAD, MENU_SAVE, MENU_CONFIG, MENU_BACKLOG, MENU_BACKLOG2}; + MenuType type; + enum MenuStatus { MENU_CONTINUE=0, MENU_CMD=1, MENU_DELETE=2}; + MenuStatus status; + void InitPanel(Event::Container& event, PicContainer& parent); + void InitTitle(const SaveTitle&); + void Cancel(void); + void Exec(Cmd& cmd); + void activate(void); + void deactivate(void); + Scn2kMenu(MenuType type, class Scn2k& scn_impl, const Flags& flags, Text& text, int system_version); + ~Scn2kMenu(); +}; + +struct Scn2kSaveTitle : SaveTitle { + const class Scn2k& impl; + std::string operator() (int number) const; + Scn2kSaveTitle(const Scn2k& _impl) : impl(_impl) {} +}; + +class Scn2k : Event::Time { + Event::Container& event; + PicContainer& parent; + AyuSysConfig& config; + WidMouseCursor* mcursor; + Flags flag; + Text text_exec; + Grp grp_exec; + int system_version; + SkipMode skip_mode; + int scn_number; + int scn_point; + enum {SCN_INFO=999999, SCN_INFO_MENU=10000001, SCN_INFO_LOCALS = 10000100, SCN_INFO_LOCALSTR = 10000200, SCN_INFO_RETSTR = 10000300}; // stack に積まれる特殊な番号 + + int save_scn, save_point; + + char* script_start; + char* script_end; + const char* script; + + int backlog_script_scn; + char* backlog_script_start; + char* backlog_script_end; + + std::string window_title; + std::vector<StackItem> stack; + std::vector<std::string> stack_strbuffer; + std::vector<CmdSimplified> cmd_stack; + std::vector<std::string> rollback_save; + std::string new_rollback_save; + std::map<int, std::set<int> > text_readflag; + char* cmd_stack_str; + char cmd_stack_str_orig[32768]; + + Cmdtype dialog_type; + class WidDialog* dialog; + Scn2kMenu* menu; + bool menu_mouseshown; + + Surface* mouse_surface; + int mouse_type; + int mouse_pressed; + void ShowCursor(); + void HideCursor(); + + void SetSkipMode(SkipMode mode); + + virtual void Elapsed(unsigned int current_time); + + // セーブ関連 + std::string MakeSaveFile(void) const; + bool StatSaveFile(int num, int& year, int& month, int& day, int& wday, int& hour,int& min, int& sec, int& msec, std::string& title) const; + void SaveImpl(std::string& s); + void LoadImpl(const char* s); + void Save(Cmd& cmd); + void Load(Cmd& cmd); + void SaveRollback(void); + void LoadRollback(Cmd& cmd); + void SaveSys(void); + void LoadSys(void); +public: + Scn2k(Event::Container& _event, PicContainer& _parent, class MuSys& mu, AyuSysConfig& config); + ~Scn2k(); + static char* OpenScript(int scn_number, char*& end, int* call_vec, int& system_version); + bool ChangeScript(int scn_number, int call_no); + bool ReadCmdAt(Cmd& cmd, int scn, int pt); + void show_textwindow(int type); + void hide_textwindow(void); + void SysExec(Cmd& cmd); + bool SysWait(Cmd& cmd); + + friend struct Scn2kSaveTitle; +}; +#endif