Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #ifndef STORY_BASE_H
00013 #define STORY_BASE_H
00014
00015 #include "company_type.h"
00016 #include "story_type.h"
00017 #include "date_type.h"
00018 #include "core/pool_type.hpp"
00019
00020 typedef Pool<StoryPageElement, StoryPageElementID, 64, 64000> StoryPageElementPool;
00021 typedef Pool<StoryPage, StoryPageID, 64, 64000> StoryPagePool;
00022 extern StoryPageElementPool _story_page_element_pool;
00023 extern StoryPagePool _story_page_pool;
00024 extern uint32 _story_page_element_next_sort_value;
00025 extern uint32 _story_page_next_sort_value;
00026
00027
00028
00029
00030 enum StoryPageElementType {
00031 SPET_TEXT = 0,
00032 SPET_LOCATION,
00033 SPET_GOAL,
00034 SPET_END,
00035 INVALID_SPET = 0xFF,
00036 };
00037
00039 template <> struct EnumPropsT<StoryPageElementType> : MakeEnumPropsT<StoryPageElementType, byte, SPET_TEXT, SPET_END, INVALID_SPET, 8> {};
00040 typedef TinyEnumT<StoryPageElementType> StoryPageElementTypeByte;
00041
00047 struct StoryPageElement : StoryPageElementPool::PoolItem<&_story_page_element_pool> {
00048 uint32 sort_value;
00049 StoryPageID page;
00050 StoryPageElementTypeByte type;
00051
00052 uint32 referenced_id;
00053 char *text;
00054
00058 inline StoryPageElement() { }
00059
00063 inline ~StoryPageElement() { free(this->text); }
00064 };
00065
00066 #define FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPageElement, story_page_element_index, var, start)
00067 #define FOR_ALL_STORY_PAGE_ELEMENTS(var) FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, 0)
00068
00070 struct StoryPage : StoryPagePool::PoolItem<&_story_page_pool> {
00071 uint32 sort_value;
00072 Date date;
00073 CompanyByte company;
00074
00075 char *title;
00076
00080 inline StoryPage() { }
00081
00085 inline ~StoryPage()
00086 {
00087 if (!this->CleaningPool()) {
00088 StoryPageElement *spe;
00089 FOR_ALL_STORY_PAGE_ELEMENTS(spe) {
00090 if (spe->page == this->index) delete spe;
00091 }
00092 }
00093 free(this->title);
00094 }
00095 };
00096
00097 #define FOR_ALL_STORY_PAGES_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPage, story_page_index, var, start)
00098 #define FOR_ALL_STORY_PAGES(var) FOR_ALL_STORY_PAGES_FROM(var, 0)
00099
00100 #endif
00101