Changeset - r21218:8daf27729482
[Not reviewed]
master
0 6 0
zuu - 11 years ago 2014-02-06 19:48:19
zuu@openttd.org
(svn r26306) -Add: [nogo] More story APIs: RemovePageElement, GetCompany, GetDate, SetDate
6 files changed with 139 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/command.cpp
Show inline comments
 
@@ -160,8 +160,10 @@ CommandProc CmdCreateStoryPage;
 
CommandProc CmdCreateStoryPageElement;
 
CommandProc CmdUpdateStoryPageElement;
 
CommandProc CmdSetStoryPageTitle;
 
CommandProc CmdSetStoryPageDate;
 
CommandProc CmdShowStoryPage;
 
CommandProc CmdRemoveStoryPage;
 
CommandProc CmdRemoveStoryPageElement;
 

	
 
CommandProc CmdLevelLand;
 

	
 
@@ -312,8 +314,10 @@ static const Command _command_proc_table
 
	DEF_CMD(CmdCreateStoryPageElement,  CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_CREATE_STORY_PAGE_ELEMENT
 
	DEF_CMD(CmdUpdateStoryPageElement,  CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_UPDATE_STORY_PAGE_ELEMENT
 
	DEF_CMD(CmdSetStoryPageTitle,       CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_SET_STORY_PAGE_TITLE
 
	DEF_CMD(CmdSetStoryPageDate,                       CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_SET_STORY_PAGE_DATE
 
	DEF_CMD(CmdShowStoryPage,                          CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_SHOW_STORY_PAGE
 
	DEF_CMD(CmdRemoveStoryPage,                        CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_REMOVE_STORY_PAGE
 
	DEF_CMD(CmdRemoveStoryPageElement,                 CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_REMOVE_STORY_ELEMENT_PAGE
 

	
 
	DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once
 

	
src/command_type.h
Show inline comments
 
@@ -288,8 +288,10 @@ enum Commands {
 
	CMD_CREATE_STORY_PAGE_ELEMENT,    ///< create a new story page element
 
	CMD_UPDATE_STORY_PAGE_ELEMENT,    ///< update a story page element
 
	CMD_SET_STORY_PAGE_TITLE,         ///< update title of a story page
 
	CMD_SET_STORY_PAGE_DATE,          ///< update date of a story page
 
	CMD_SHOW_STORY_PAGE,              ///< show a story page
 
	CMD_REMOVE_STORY_PAGE,            ///< remove a story page
 
	CMD_REMOVE_STORY_PAGE_ELEMENT,    ///< remove a story page element
 
	CMD_LEVEL_LAND,                   ///< level land
 

	
 
	CMD_BUILD_LOCK,                   ///< build a lock
src/script/api/game/game_story_page.hpp.sq
Show inline comments
 
@@ -32,11 +32,15 @@ void SQGSStoryPage_Register(Squirrel *en
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::New,                     "New",                     3, ".i.");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::NewElement,              "NewElement",              5, ".iii.");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::UpdateElement,           "UpdateElement",           4, ".ii.");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSort,             "GetPageSort",             2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSort,      "GetPageElementSort",      2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageSortValue,        "GetPageSortValue",        2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetPageElementSortValue, "GetPageElementSortValue", 2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetCompany,              "GetCompany",              2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::GetDate,                 "GetDate",                 2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetDate,                 "SetDate",                 3, ".ii");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::SetTitle,                "SetTitle",                3, ".i.");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Show,                    "Show",                    2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::Remove,                  "Remove",                  2, ".i");
 
	SQGSStoryPage.DefSQStaticMethod(engine, &ScriptStoryPage::RemoveElement,           "RemoveElement",           2, ".i");
 

	
 
	SQGSStoryPage.PostRegister(engine);
 
}
src/script/api/script_story_page.cpp
Show inline comments
 
@@ -98,14 +98,14 @@
 
			type == ::SPET_TEXT || type == ::SPET_LOCATION ? text->GetEncodedText() : NULL);
 
}
 

	
 
/* static */ uint32 ScriptStoryPage::GetPageSort(StoryPageID story_page_id)
 
/* static */ uint32 ScriptStoryPage::GetPageSortValue(StoryPageID story_page_id)
 
{
 
	EnforcePrecondition(false, IsValidStoryPage(story_page_id));
 

	
 
	return StoryPage::Get(story_page_id)->sort_value;
 
}
 

	
 
/* static */ uint32 ScriptStoryPage::GetPageElementSort(StoryPageElementID story_page_element_id)
 
/* static */ uint32 ScriptStoryPage::GetPageElementSortValue(StoryPageElementID story_page_element_id)
 
{
 
	EnforcePrecondition(false, IsValidStoryPageElement(story_page_element_id));
 

	
 
@@ -122,6 +122,32 @@
 
	return ScriptObject::DoCommand(0, story_page_id, 0, CMD_SET_STORY_PAGE_TITLE, title != NULL? title->GetEncodedText() : NULL);
 
}
 

	
 
/* static */ ScriptCompany::CompanyID ScriptStoryPage::GetCompany(StoryPageID story_page_id)
 
{
 
	EnforcePrecondition(ScriptCompany::COMPANY_INVALID, IsValidStoryPage(story_page_id));
 

	
 
	CompanyID c = StoryPage::Get(story_page_id)->company;
 
	ScriptCompany::CompanyID company = c == INVALID_COMPANY ? ScriptCompany::COMPANY_INVALID : (ScriptCompany::CompanyID)c;
 

	
 
	return company;
 
}
 

	
 
/* static */ int32 ScriptStoryPage::GetDate(StoryPageID story_page_id)
 
{
 
	EnforcePrecondition(-1, IsValidStoryPage(story_page_id));
 

	
 
	return StoryPage::Get(story_page_id)->date;
 
}
 

	
 
/* static */ bool ScriptStoryPage::SetDate(StoryPageID story_page_id, int32 date)
 
{
 
	EnforcePrecondition(false, IsValidStoryPage(story_page_id));
 
	EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
 

	
 
	return ScriptObject::DoCommand(0, story_page_id, date, CMD_SET_STORY_PAGE_DATE, NULL);
 
}
 

	
 

	
 
/* static */ bool ScriptStoryPage::Show(StoryPageID story_page_id)
 
{
 
	EnforcePrecondition(false, IsValidStoryPage(story_page_id));
 
@@ -138,3 +164,11 @@
 
	return ScriptObject::DoCommand(0, story_page_id, 0, CMD_REMOVE_STORY_PAGE);
 
}
 

	
 
/* static */ bool ScriptStoryPage::RemoveElement(StoryPageElementID story_page_element_id)
 
{
 
	EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
 
	EnforcePrecondition(false, IsValidStoryPageElement(story_page_element_id));
 

	
 
	return ScriptObject::DoCommand(0, story_page_element_id, 0, CMD_REMOVE_STORY_PAGE_ELEMENT);
 
}
 

	
src/script/api/script_story_page.hpp
Show inline comments
 
@@ -126,7 +126,7 @@ public:
 
	 * @param story_page_id The story page to get the sort value of.
 
	 * @return Page sort value.
 
	 */
 
	static uint32 GetPageSort(StoryPageID story_page_id);
 
	static uint32 GetPageSortValue(StoryPageID story_page_id);
 

	
 
	/**
 
	 * Get story page element sort value. Each page element has a sort value that is internally
 
@@ -137,7 +137,34 @@ public:
 
	 * @param story_page_element_id The story page element to get the sort value of.
 
	 * @return Page element sort value.
 
	 */
 
	static uint32 GetPageElementSort(StoryPageElementID story_page_element_id);
 
	static uint32 GetPageElementSortValue(StoryPageElementID story_page_element_id);
 

	
 
	/**
 
	 * Get the company which the page belongs to. If the page is global,
 
	 * ScriptCompany::COMPANY_INVALID is returned.
 
	 * @param story_page_id The story page to get the company for.
 
	 * @return owner company or ScriptCompany::COMPANY_INVALID
 
	 * @pre IsValidStoryPage(story_page_id).
 
	 */
 
	static ScriptCompany::CompanyID GetCompany(StoryPageID story_page_id);
 

	
 
	/**
 
	 * Get the page date which is displayed at the top of each page.
 
	 * @param story_page_id The story page to get the date of.
 
	 * @return The date
 
	 * @pre IsValidStoryPage(story_page_id).
 
	 */
 
	static int32 GetDate(StoryPageID story_page_id);
 

	
 
	/**
 
	 * Update date of a story page. The date is shown in the top left of the page
 
	 * @param story_page_id The story page to set the date for.
 
	 * @param date Page date (@see ScriptDate)
 
	 * @return True if the action succeeded.
 
	 * @pre No ScriptCompanyMode may be in scope.
 
	 * @pre IsValidStoryPage(story_page_id).
 
	 */
 
	static bool SetDate(StoryPageID story_page_id, int32 date);
 

	
 
	/**
 
	 * Update title of a story page. The title is shown in the page selector drop down.
 
@@ -169,6 +196,15 @@ public:
 
	 * @pre IsValidStoryPage(story_page_id).
 
	 */
 
	static bool Remove(StoryPageID story_page_id);
 

	
 
	/**
 
	 * Removes a story page element.
 
	 * @param story_page_element_id The story page element to remove.
 
	 * @return True if the action succeeded.
 
	 * @pre No ScriptCompanyMode may be in scope.
 
	 * @pre IsValidStoryPageElement(story_page_element_id).
 
	 */
 
	static bool RemoveElement(StoryPageElementID story_page_element_id);
 
};
 

	
 
#endif /* SCRIPT_STORY_HPP */
src/story.cpp
Show inline comments
 
@@ -251,6 +251,32 @@ CommandCost CmdSetStoryPageTitle(TileInd
 
}
 

	
 
/**
 
 * Update date of a story page.
 
 * @param tile unused.
 
 * @param flags type of operation
 
 * @param p1 = (bit 0 - 15) - StoryPageID to update.
 
 * @param p2 = (bit 0 - 31) - date
 
 * @param text unused
 
 * @return the cost of this operation or an error
 
 */
 
CommandCost CmdSetStoryPageDate(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 
{
 
	if (_current_company != OWNER_DEITY) return CMD_ERROR;
 
	StoryPageID page_id = (StoryPageID)GB(p1, 0, 16);
 
	if (!StoryPage::IsValidID(page_id)) return CMD_ERROR;
 
	Date date = (Date)p2;
 

	
 
	if (flags & DC_EXEC) {
 
		StoryPage *p = StoryPage::Get(page_id);
 
		p->date = date;
 

	
 
		InvalidateWindowClassesData(WC_STORY_BOOK, page_id);
 
	}
 

	
 
	return CommandCost();
 
}
 

	
 
/**
 
 * Display a story page for all clients that are allowed to
 
 * view the story page.
 
 * @param tile unused.
 
@@ -307,3 +333,30 @@ CommandCost CmdRemoveStoryPage(TileIndex
 
	return CommandCost();
 
}
 

	
 
/**
 
 * Remove a story page element
 
 * @param tile unused.
 
 * @param flags type of operation
 
 * @param p1 = (bit 0 - 15) - StoryPageElementID to remove.
 
 * @param p2 unused.
 
 * @param text unused.
 
 * @return the cost of this operation or an error
 
 */
 
CommandCost CmdRemoveStoryPageElement(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 
{
 
	if (_current_company != OWNER_DEITY) return CMD_ERROR;
 
	StoryPageElementID page_element_id = (StoryPageElementID)p1;
 
	if (!StoryPageElement::IsValidID(page_element_id)) return CMD_ERROR;
 

	
 
	if (flags & DC_EXEC) {
 
		StoryPageElement *pe = StoryPageElement::Get(page_element_id);
 
		StoryPageID page_id = pe->page;
 

	
 
		delete pe;
 

	
 
		InvalidateWindowClassesData(WC_STORY_BOOK, page_id);
 
	}
 

	
 
	return CommandCost();
 
}
 

	
0 comments (0 inline, 0 general)