mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 09:34:19 +00:00
saving server settings within the map and loading them on init
This commit is contained in:
parent
47cc831db9
commit
54e61bfe39
|
@ -14,6 +14,7 @@ public:
|
||||||
virtual void *GetDataSwapped(int Index) = 0;
|
virtual void *GetDataSwapped(int Index) = 0;
|
||||||
virtual void UnloadData(int Index) = 0;
|
virtual void UnloadData(int Index) = 0;
|
||||||
virtual void *GetItem(int Index, int *Type, int *pID) = 0;
|
virtual void *GetItem(int Index, int *Type, int *pID) = 0;
|
||||||
|
virtual int GetItemSize(int Index) = 0;
|
||||||
virtual void GetType(int Type, int *pStart, int *pNum) = 0;
|
virtual void GetType(int Type, int *pStart, int *pNum) = 0;
|
||||||
virtual void *FindItem(int Type, int ID) = 0;
|
virtual void *FindItem(int Type, int ID) = 0;
|
||||||
virtual int NumItems() = 0;
|
virtual int NumItems() = 0;
|
||||||
|
|
|
@ -16,6 +16,7 @@ public:
|
||||||
virtual void *GetDataSwapped(int Index) { return m_DataFile.GetDataSwapped(Index); }
|
virtual void *GetDataSwapped(int Index) { return m_DataFile.GetDataSwapped(Index); }
|
||||||
virtual void UnloadData(int Index) { m_DataFile.UnloadData(Index); }
|
virtual void UnloadData(int Index) { m_DataFile.UnloadData(Index); }
|
||||||
virtual void *GetItem(int Index, int *pType, int *pID) { return m_DataFile.GetItem(Index, pType, pID); }
|
virtual void *GetItem(int Index, int *pType, int *pID) { return m_DataFile.GetItem(Index, pType, pID); }
|
||||||
|
virtual int GetItemSize(int Index) { return m_DataFile.GetItemSize(Index); }
|
||||||
virtual void GetType(int Type, int *pStart, int *pNum) { m_DataFile.GetType(Type, pStart, pNum); }
|
virtual void GetType(int Type, int *pStart, int *pNum) { m_DataFile.GetType(Type, pStart, pNum); }
|
||||||
virtual void *FindItem(int Type, int ID) { return m_DataFile.FindItem(Type, ID); }
|
virtual void *FindItem(int Type, int ID) { return m_DataFile.FindItem(Type, ID); }
|
||||||
virtual int NumItems() { return m_DataFile.NumItems(); }
|
virtual int NumItems() { return m_DataFile.NumItems(); }
|
||||||
|
|
|
@ -3987,7 +3987,20 @@ void CEditor::RenderStatusbar(CUIRect View)
|
||||||
if(MouseButton == 2)
|
if(MouseButton == 2)
|
||||||
m_ShowEnvelopeEditor = (m_ShowEnvelopeEditor+3)%4;
|
m_ShowEnvelopeEditor = (m_ShowEnvelopeEditor+3)%4;
|
||||||
else if(MouseButton == 1)
|
else if(MouseButton == 1)
|
||||||
m_ShowEnvelopeEditor = (m_ShowEnvelopeEditor+1)%4;
|
|
||||||
|
if(MouseButton)
|
||||||
|
{
|
||||||
|
m_ShowServerSettingsEditor = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
View.VSplitRight(100.0f, &View, &Button);
|
||||||
|
Button.VSplitRight(10.0f, &Button, 0);
|
||||||
|
static int s_SettingsButton = 0;
|
||||||
|
if(DoButton_Editor(&s_SettingsButton, "Server settings", m_ShowServerSettingsEditor, &Button, 0, "Toggles the server settings editor."))
|
||||||
|
{
|
||||||
|
m_ShowEnvelopeEditor = 0;
|
||||||
|
m_ShowServerSettingsEditor ^= 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (g_Config.m_ClEditorUndo)
|
if (g_Config.m_ClEditorUndo)
|
||||||
{
|
{
|
||||||
|
@ -4599,6 +4612,110 @@ void CEditor::RenderEnvelopeEditor(CUIRect View)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CEditor::RenderServerSettingsEditor(CUIRect View)
|
||||||
|
{
|
||||||
|
static int s_CommandSelectedIndex = -1;
|
||||||
|
|
||||||
|
CUIRect ToolBar;
|
||||||
|
View.HSplitTop(20.0f, &ToolBar, &View);
|
||||||
|
ToolBar.Margin(2.0f, &ToolBar);
|
||||||
|
|
||||||
|
// do the toolbar
|
||||||
|
{
|
||||||
|
CUIRect Button;
|
||||||
|
|
||||||
|
// command line
|
||||||
|
ToolBar.VSplitLeft(5.0f, 0, &Button);
|
||||||
|
UI()->DoLabel(&Button, "Command:", 12.0f, -1);
|
||||||
|
|
||||||
|
Button.VSplitLeft(70.0f, 0, &Button);
|
||||||
|
Button.VSplitLeft(180.0f, &Button, 0);
|
||||||
|
DoEditBox(&m_CommandBox, &Button, m_aSettingsCommand, sizeof(m_aSettingsCommand), 12.0f, &m_CommandBox);
|
||||||
|
|
||||||
|
// buttons
|
||||||
|
ToolBar.VSplitRight(50.0f, &ToolBar, &Button);
|
||||||
|
static int s_AddButton = 0;
|
||||||
|
if(DoButton_Editor(&s_AddButton, "Add", 0, &Button, 0, "Add a command to command list."))
|
||||||
|
{
|
||||||
|
if(m_aSettingsCommand[0] != 0 && str_find(m_aSettingsCommand, " "))
|
||||||
|
{
|
||||||
|
bool Found = false;
|
||||||
|
for(int i = 0; i < m_Map.m_lSettings.size(); i++)
|
||||||
|
if(!str_comp(m_Map.m_lSettings[i].m_aCommand, m_aSettingsCommand))
|
||||||
|
{
|
||||||
|
Found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!Found)
|
||||||
|
{
|
||||||
|
CEditorMap::CSetting Setting;
|
||||||
|
str_copy(Setting.m_aCommand, m_aSettingsCommand, sizeof(Setting.m_aCommand));
|
||||||
|
m_Map.m_lSettings.add(Setting);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_Map.m_lSettings.size())
|
||||||
|
{
|
||||||
|
ToolBar.VSplitRight(50.0f, &ToolBar, &Button);
|
||||||
|
Button.VSplitRight(5.0f, &Button, 0);
|
||||||
|
static int s_AddButton = 0;
|
||||||
|
if(DoButton_Editor(&s_AddButton, "Del", 0, &Button, 0, "Delete a command from the command list."))
|
||||||
|
if(s_CommandSelectedIndex > -1 && s_CommandSelectedIndex < m_Map.m_lSettings.size())
|
||||||
|
m_Map.m_lSettings.remove_index(s_CommandSelectedIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
View.HSplitTop(2.0f, 0, &View);
|
||||||
|
RenderBackground(View, ms_CheckerTexture, 32.0f, 0.1f);
|
||||||
|
|
||||||
|
CUIRect ListBox;
|
||||||
|
View.Margin(1.0f, &ListBox);
|
||||||
|
|
||||||
|
float ListHeight = 17.0f * m_Map.m_lSettings.size();
|
||||||
|
static int s_ScrollBar = 0;
|
||||||
|
static float s_ScrollValue = 0;
|
||||||
|
|
||||||
|
float ScrollDifference = ListHeight - ListBox.h;
|
||||||
|
|
||||||
|
if(ListHeight > ListBox.h) // Do we even need a scrollbar?
|
||||||
|
{
|
||||||
|
CUIRect Scroll;
|
||||||
|
ListBox.VSplitRight(15.0f, &ListBox, &Scroll);
|
||||||
|
ListBox.VSplitRight(3.0f, &ListBox, 0); // extra spacing
|
||||||
|
Scroll.HMargin(5.0f, &Scroll);
|
||||||
|
s_ScrollValue = UiDoScrollbarV(&s_ScrollBar, &Scroll, s_ScrollValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
float ListStartAt = ScrollDifference * s_ScrollValue;
|
||||||
|
if(ListStartAt < 0.0f)
|
||||||
|
ListStartAt = 0.0f;
|
||||||
|
|
||||||
|
float ListStopAt = ListHeight - ScrollDifference * (1 - s_ScrollValue);
|
||||||
|
float ListCur = 0;
|
||||||
|
|
||||||
|
UI()->ClipEnable(&ListBox);
|
||||||
|
for(int i = 0; i < m_Map.m_lSettings.size(); i++)
|
||||||
|
{
|
||||||
|
if(ListCur > ListStopAt)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(ListCur >= ListStartAt)
|
||||||
|
{
|
||||||
|
CUIRect Button;
|
||||||
|
ListBox.HSplitTop(15.0f, &Button, &ListBox);
|
||||||
|
ListBox.HSplitTop(2.0f, 0, &ListBox);
|
||||||
|
Button.VSplitLeft(5.0f, 0, &Button);
|
||||||
|
|
||||||
|
if(DoButton_MenuItem(&m_Map.m_lSettings[i], m_Map.m_lSettings[i].m_aCommand, s_CommandSelectedIndex == i, &Button, 0, 0))
|
||||||
|
s_CommandSelectedIndex = i;
|
||||||
|
}
|
||||||
|
ListCur += 17.0f;
|
||||||
|
}
|
||||||
|
UI()->ClipDisable();
|
||||||
|
}
|
||||||
|
|
||||||
int CEditor::PopupMenuFile(CEditor *pEditor, CUIRect View)
|
int CEditor::PopupMenuFile(CEditor *pEditor, CUIRect View)
|
||||||
{
|
{
|
||||||
static int s_NewMapButton = 0;
|
static int s_NewMapButton = 0;
|
||||||
|
@ -4757,8 +4874,8 @@ void CEditor::Render()
|
||||||
// render checker
|
// render checker
|
||||||
RenderBackground(View, ms_CheckerTexture, 32.0f, 1.0f);
|
RenderBackground(View, ms_CheckerTexture, 32.0f, 1.0f);
|
||||||
|
|
||||||
CUIRect MenuBar, CModeBar, ToolBar, StatusBar, EnvelopeEditor, UndoList, ToolBox;
|
CUIRect MenuBar, CModeBar, ToolBar, StatusBar, ExtraEditor, UndoList, ToolBox;
|
||||||
m_ShowPicker = Input()->KeyPressed(KEY_SPACE) != 0 && m_Dialog == DIALOG_NONE && m_EditBoxActive == 0;
|
m_ShowPicker = Input()->KeyPressed(KEY_SPACE) != 0 && m_Dialog == DIALOG_NONE && m_EditBoxActive == 0 && UI()->LastActiveItem() != &m_CommandBox;
|
||||||
|
|
||||||
if(m_GuiActive)
|
if(m_GuiActive)
|
||||||
{
|
{
|
||||||
|
@ -4775,12 +4892,15 @@ void CEditor::Render()
|
||||||
size *= 2.0f;
|
size *= 2.0f;
|
||||||
else if(m_ShowEnvelopeEditor == 3)
|
else if(m_ShowEnvelopeEditor == 3)
|
||||||
size *= 3.0f;
|
size *= 3.0f;
|
||||||
View.HSplitBottom(size, &View, &EnvelopeEditor);
|
View.HSplitBottom(size, &View, &ExtraEditor);
|
||||||
}
|
}
|
||||||
if (m_ShowUndo && !m_ShowPicker)
|
if (m_ShowUndo && !m_ShowPicker)
|
||||||
{
|
{
|
||||||
View.HSplitBottom(250.0f, &View, &UndoList);
|
View.HSplitBottom(250.0f, &View, &UndoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_ShowServerSettingsEditor && !m_ShowPicker)
|
||||||
|
View.HSplitBottom(250.0f, &View, &ExtraEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// a little hack for now
|
// a little hack for now
|
||||||
|
@ -4846,10 +4966,10 @@ void CEditor::Render()
|
||||||
|
|
||||||
if(m_GuiActive)
|
if(m_GuiActive)
|
||||||
{
|
{
|
||||||
if(m_ShowEnvelopeEditor)
|
if(m_ShowEnvelopeEditor || m_ShowServerSettingsEditor)
|
||||||
{
|
{
|
||||||
RenderBackground(EnvelopeEditor, ms_BackgroundTexture, 128.0f, Brightness);
|
RenderBackground(ExtraEditor, ms_BackgroundTexture, 128.0f, Brightness);
|
||||||
EnvelopeEditor.Margin(2.0f, &EnvelopeEditor);
|
ExtraEditor.Margin(2.0f, &ExtraEditor);
|
||||||
}
|
}
|
||||||
if(m_ShowUndo)
|
if(m_ShowUndo)
|
||||||
{
|
{
|
||||||
|
@ -4874,9 +4994,11 @@ void CEditor::Render()
|
||||||
|
|
||||||
RenderModebar(CModeBar);
|
RenderModebar(CModeBar);
|
||||||
if(m_ShowEnvelopeEditor && !m_ShowPicker)
|
if(m_ShowEnvelopeEditor && !m_ShowPicker)
|
||||||
RenderEnvelopeEditor(EnvelopeEditor);
|
RenderEnvelopeEditor(ExtraEditor);
|
||||||
if(m_ShowUndo)
|
if(m_ShowUndo)
|
||||||
RenderUndoList(UndoList);
|
RenderUndoList(UndoList);
|
||||||
|
if(m_ShowServerSettingsEditor)
|
||||||
|
RenderServerSettingsEditor(ExtraEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_Dialog == DIALOG_FILE)
|
if(m_Dialog == DIALOG_FILE)
|
||||||
|
@ -5098,6 +5220,8 @@ void CEditorMap::Clean()
|
||||||
|
|
||||||
m_MapInfo.Reset();
|
m_MapInfo.Reset();
|
||||||
|
|
||||||
|
m_lSettings.clear();
|
||||||
|
|
||||||
m_pGameLayer = 0x0;
|
m_pGameLayer = 0x0;
|
||||||
m_pGameGroup = 0x0;
|
m_pGameGroup = 0x0;
|
||||||
|
|
||||||
|
|
|
@ -376,6 +376,12 @@ public:
|
||||||
};
|
};
|
||||||
CMapInfo m_MapInfo;
|
CMapInfo m_MapInfo;
|
||||||
|
|
||||||
|
struct CSetting
|
||||||
|
{
|
||||||
|
char m_aCommand[64];
|
||||||
|
};
|
||||||
|
array<CSetting> m_lSettings;
|
||||||
|
|
||||||
class CLayerGame *m_pGameLayer;
|
class CLayerGame *m_pGameLayer;
|
||||||
CLayerGroup *m_pGameGroup;
|
CLayerGroup *m_pGameGroup;
|
||||||
|
|
||||||
|
@ -678,11 +684,15 @@ public:
|
||||||
m_ShowEnvelopeEditor = 0;
|
m_ShowEnvelopeEditor = 0;
|
||||||
m_ShowUndo = 0;
|
m_ShowUndo = 0;
|
||||||
m_UndoScrollValue = 0.0f;
|
m_UndoScrollValue = 0.0f;
|
||||||
|
m_ShowServerSettingsEditor = false;
|
||||||
|
|
||||||
m_ShowEnvelopePreview = 0;
|
m_ShowEnvelopePreview = 0;
|
||||||
m_SelectedQuadEnvelope = -1;
|
m_SelectedQuadEnvelope = -1;
|
||||||
m_SelectedEnvelopePoint = -1;
|
m_SelectedEnvelopePoint = -1;
|
||||||
|
|
||||||
|
m_CommandBox = 0.0f;
|
||||||
|
m_aSettingsCommand[0] = 0;
|
||||||
|
|
||||||
ms_CheckerTexture = 0;
|
ms_CheckerTexture = 0;
|
||||||
ms_BackgroundTexture = 0;
|
ms_BackgroundTexture = 0;
|
||||||
ms_CursorTexture = 0;
|
ms_CursorTexture = 0;
|
||||||
|
@ -842,6 +852,7 @@ public:
|
||||||
|
|
||||||
int m_ShowEnvelopeEditor;
|
int m_ShowEnvelopeEditor;
|
||||||
int m_ShowEnvelopePreview; //Values: 0-Off|1-Selected Envelope|2-All
|
int m_ShowEnvelopePreview; //Values: 0-Off|1-Selected Envelope|2-All
|
||||||
|
bool m_ShowServerSettingsEditor;
|
||||||
bool m_ShowPicker;
|
bool m_ShowPicker;
|
||||||
|
|
||||||
int m_SelectedLayer;
|
int m_SelectedLayer;
|
||||||
|
@ -871,6 +882,9 @@ public:
|
||||||
|
|
||||||
static void EnvelopeEval(float TimeOffset, int Env, float *pChannels, void *pUser);
|
static void EnvelopeEval(float TimeOffset, int Env, float *pChannels, void *pUser);
|
||||||
|
|
||||||
|
float m_CommandBox;
|
||||||
|
char m_aSettingsCommand[64];
|
||||||
|
|
||||||
void DoMapBorder();
|
void DoMapBorder();
|
||||||
int DoButton_Editor_Common(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
|
int DoButton_Editor_Common(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
|
||||||
int DoButton_Editor(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
|
int DoButton_Editor(const void *pID, const char *pText, int Checked, const CUIRect *pRect, int Flags, const char *pToolTip);
|
||||||
|
@ -954,6 +968,7 @@ public:
|
||||||
void RenderStatusbar(CUIRect View);
|
void RenderStatusbar(CUIRect View);
|
||||||
void RenderEnvelopeEditor(CUIRect View);
|
void RenderEnvelopeEditor(CUIRect View);
|
||||||
void RenderUndoList(CUIRect View);
|
void RenderUndoList(CUIRect View);
|
||||||
|
void RenderServerSettingsEditor(CUIRect View);
|
||||||
|
|
||||||
void RenderMenubar(CUIRect Menubar);
|
void RenderMenubar(CUIRect Menubar);
|
||||||
void RenderFileDialog();
|
void RenderFileDialog();
|
||||||
|
|
|
@ -238,7 +238,7 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName)
|
||||||
|
|
||||||
// save map info
|
// save map info
|
||||||
{
|
{
|
||||||
CMapItemInfo Item;
|
CMapItemInfoSettings Item;
|
||||||
Item.m_Version = 1;
|
Item.m_Version = 1;
|
||||||
|
|
||||||
if(m_MapInfo.m_aAuthor[0])
|
if(m_MapInfo.m_aAuthor[0])
|
||||||
|
@ -258,6 +258,26 @@ int CEditorMap::Save(class IStorage *pStorage, const char *pFileName)
|
||||||
else
|
else
|
||||||
Item.m_License = -1;
|
Item.m_License = -1;
|
||||||
|
|
||||||
|
Item.m_Settings = -1;
|
||||||
|
if(m_lSettings.size())
|
||||||
|
{
|
||||||
|
int Size = 0;
|
||||||
|
for(int i = 0; i < m_lSettings.size(); i++)
|
||||||
|
{
|
||||||
|
Size += str_length(m_lSettings[i].m_aCommand) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *pSettings = (char *)mem_alloc(Size, 1);
|
||||||
|
char *pNext = pSettings;
|
||||||
|
for(int i = 0; i < m_lSettings.size(); i++)
|
||||||
|
{
|
||||||
|
int Length = str_length(m_lSettings[i].m_aCommand) + 1;
|
||||||
|
mem_copy(pNext, m_lSettings[i].m_aCommand, Length);
|
||||||
|
}
|
||||||
|
Item.m_Settings = df.AddData(Size, pSettings);
|
||||||
|
mem_free(pSettings);
|
||||||
|
}
|
||||||
|
|
||||||
df.AddItem(MAPITEMTYPE_INFO, 0, sizeof(Item), &Item);
|
df.AddItem(MAPITEMTYPE_INFO, 0, sizeof(Item), &Item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,9 +609,16 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag
|
||||||
|
|
||||||
// load map info
|
// load map info
|
||||||
{
|
{
|
||||||
CMapItemInfo *pItem = (CMapItemInfo *)DataFile.FindItem(MAPITEMTYPE_INFO, 0);
|
int Start, Num;
|
||||||
if(pItem && pItem->m_Version == 1)
|
DataFile.GetType(MAPITEMTYPE_INFO, &Start, &Num);
|
||||||
|
for(int i = Start; i < Start + Num; i++)
|
||||||
{
|
{
|
||||||
|
int ItemSize = DataFile.GetItemSize(Start) - 8;
|
||||||
|
int ItemID;
|
||||||
|
CMapItemInfoSettings *pItem = (CMapItemInfoSettings *)DataFile.GetItem(i, 0, &ItemID);
|
||||||
|
if(!pItem || ItemID != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
if(pItem->m_Author > -1)
|
if(pItem->m_Author > -1)
|
||||||
str_copy(m_MapInfo.m_aAuthor, (char *)DataFile.GetData(pItem->m_Author), sizeof(m_MapInfo.m_aAuthor));
|
str_copy(m_MapInfo.m_aAuthor, (char *)DataFile.GetData(pItem->m_Author), sizeof(m_MapInfo.m_aAuthor));
|
||||||
if(pItem->m_MapVersion > -1)
|
if(pItem->m_MapVersion > -1)
|
||||||
|
@ -600,6 +627,24 @@ int CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Storag
|
||||||
str_copy(m_MapInfo.m_aCredits, (char *)DataFile.GetData(pItem->m_Credits), sizeof(m_MapInfo.m_aCredits));
|
str_copy(m_MapInfo.m_aCredits, (char *)DataFile.GetData(pItem->m_Credits), sizeof(m_MapInfo.m_aCredits));
|
||||||
if(pItem->m_License > -1)
|
if(pItem->m_License > -1)
|
||||||
str_copy(m_MapInfo.m_aLicense, (char *)DataFile.GetData(pItem->m_License), sizeof(m_MapInfo.m_aLicense));
|
str_copy(m_MapInfo.m_aLicense, (char *)DataFile.GetData(pItem->m_License), sizeof(m_MapInfo.m_aLicense));
|
||||||
|
|
||||||
|
if(pItem->m_Version != 1 || ItemSize < (int)sizeof(CMapItemInfoSettings))
|
||||||
|
break;
|
||||||
|
|
||||||
|
if(!(pItem->m_Settings > -1))
|
||||||
|
break;
|
||||||
|
|
||||||
|
int Size = DataFile.GetUncompressedDataSize(pItem->m_Settings);
|
||||||
|
char *pSettings = (char *)DataFile.GetData(pItem->m_Settings);
|
||||||
|
char *pNext = pSettings;
|
||||||
|
while(pNext < pSettings + Size)
|
||||||
|
{
|
||||||
|
int StrSize = str_length(pNext) + 1;
|
||||||
|
CSetting Setting;
|
||||||
|
str_copy(Setting.m_aCommand, pNext, sizeof(Setting.m_aCommand));
|
||||||
|
m_lSettings.add(Setting);
|
||||||
|
pNext += StrSize;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2281,6 +2281,8 @@ void CGameContext::OnInit(/*class IKernel *pKernel*/)
|
||||||
m_Layers.Init(Kernel());
|
m_Layers.Init(Kernel());
|
||||||
m_Collision.Init(&m_Layers);
|
m_Collision.Init(&m_Layers);
|
||||||
|
|
||||||
|
LoadMapSettings();
|
||||||
|
|
||||||
// reset everything here
|
// reset everything here
|
||||||
//world = new GAMEWORLD;
|
//world = new GAMEWORLD;
|
||||||
//players = new CPlayer[MAX_CLIENTS];
|
//players = new CPlayer[MAX_CLIENTS];
|
||||||
|
@ -2618,6 +2620,37 @@ void CGameContext::OnShutdown()
|
||||||
Clear();
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGameContext::LoadMapSettings()
|
||||||
|
{
|
||||||
|
IMap *pMap = Kernel()->RequestInterface<IMap>();
|
||||||
|
int Start, Num;
|
||||||
|
pMap->GetType(MAPITEMTYPE_INFO, &Start, &Num);
|
||||||
|
for(int i = Start; i < Start + Num; i++)
|
||||||
|
{
|
||||||
|
int ItemID;
|
||||||
|
CMapItemInfoSettings *pItem = (CMapItemInfoSettings *)pMap->GetItem(i, 0, &ItemID);
|
||||||
|
int ItemSize = pMap->GetItemSize(i) - 8;
|
||||||
|
if(!pItem || ItemID != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if(ItemSize < (int)sizeof(CMapItemInfoSettings))
|
||||||
|
break;
|
||||||
|
if(!(pItem->m_Settings > -1))
|
||||||
|
break;
|
||||||
|
|
||||||
|
int Size = pMap->GetUncompressedDataSize(pItem->m_Settings);
|
||||||
|
char *pSettings = (char *)pMap->GetData(pItem->m_Settings);
|
||||||
|
char *pNext = pSettings;
|
||||||
|
while(pNext < pSettings + Size)
|
||||||
|
{
|
||||||
|
int StrSize = str_length(pNext) + 1;
|
||||||
|
Console()->ExecuteLine(pNext);
|
||||||
|
pNext += StrSize;
|
||||||
|
}
|
||||||
|
pMap->UnloadData(pItem->m_Settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CGameContext::OnSnap(int ClientID)
|
void CGameContext::OnSnap(int ClientID)
|
||||||
{
|
{
|
||||||
// add tuning to demo
|
// add tuning to demo
|
||||||
|
|
|
@ -190,6 +190,8 @@ public:
|
||||||
//
|
//
|
||||||
//void SwapTeams();
|
//void SwapTeams();
|
||||||
|
|
||||||
|
void LoadMapSettings();
|
||||||
|
|
||||||
// engine events
|
// engine events
|
||||||
virtual void OnInit();
|
virtual void OnInit();
|
||||||
virtual void OnConsoleInit();
|
virtual void OnConsoleInit();
|
||||||
|
|
Loading…
Reference in a new issue