mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-12 19:18:20 +00:00
List all game layer entities images in directory
This commit is contained in:
parent
bee694a8cb
commit
fd52bc7a26
Before Width: | Height: | Size: 331 KiB After Width: | Height: | Size: 331 KiB |
|
@ -1,5 +1,8 @@
|
||||||
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
|
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
|
||||||
/* If you are missing that file, acquire a complete release at teeworlds.com. */
|
/* If you are missing that file, acquire a complete release at teeworlds.com. */
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include <base/tl/array.h>
|
#include <base/tl/array.h>
|
||||||
#include <base/system.h>
|
#include <base/system.h>
|
||||||
#include <base/color.h>
|
#include <base/color.h>
|
||||||
|
@ -1010,6 +1013,16 @@ void CEditor::CallbackSaveCopyMap(const char *pFileName, int StorageType, void *
|
||||||
pEditor->m_Dialog = DIALOG_NONE;
|
pEditor->m_Dialog = DIALOG_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int EntitiesListdirCallback(const char *pName, int IsDir, int StorageType, void *pUser) {
|
||||||
|
CEditor *pEditor = (CEditor*)pUser;
|
||||||
|
if (!IsDir && str_endswith(pName, ".png")) {
|
||||||
|
std::string Name = pName;
|
||||||
|
pEditor->m_SelectEntitiesFiles.push_back(Name.substr(0, Name.length() - 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void CEditor::DoToolbar(CUIRect ToolBar)
|
void CEditor::DoToolbar(CUIRect ToolBar)
|
||||||
{
|
{
|
||||||
CUIRect TB_Top, TB_Bottom;
|
CUIRect TB_Top, TB_Bottom;
|
||||||
|
@ -1142,8 +1155,18 @@ void CEditor::DoToolbar(CUIRect ToolBar)
|
||||||
|
|
||||||
TB_Top.VSplitLeft(45.0f, &Button, &TB_Top);
|
TB_Top.VSplitLeft(45.0f, &Button, &TB_Top);
|
||||||
if(DoButton_Editor(&Button, "Entities", 0, &Button, 0, "Choose game layer entities image for different gametypes")) {
|
if(DoButton_Editor(&Button, "Entities", 0, &Button, 0, "Choose game layer entities image for different gametypes")) {
|
||||||
|
m_SelectEntitiesFiles.clear();
|
||||||
|
Storage()->ListDirectory(IStorage::TYPE_ALL, "editor/entities", EntitiesListdirCallback, this);
|
||||||
|
std::sort(m_SelectEntitiesFiles.begin(), m_SelectEntitiesFiles.end());
|
||||||
|
|
||||||
|
for(int i = 0; i < (int)m_SelectEntitiesFiles.size(); i++) {
|
||||||
|
if (m_SelectEntitiesFiles[i] == "DDNet")
|
||||||
|
m_SelectEntitiesImage = i;
|
||||||
|
}
|
||||||
|
|
||||||
static int s_EntitiesPopupID = 0;
|
static int s_EntitiesPopupID = 0;
|
||||||
UiInvokePopupMenu(&s_EntitiesPopupID, 0, Button.x, Button.y+18.0f, 100, 100, PopupEntities);
|
UiInvokePopupMenu(&s_EntitiesPopupID, 0, Button.x, Button.y+18.0f,
|
||||||
|
250, m_SelectEntitiesFiles.size()*14 + 10, PopupEntities);
|
||||||
}
|
}
|
||||||
|
|
||||||
TB_Top.VSplitLeft(10.0f, 0, &TB_Top);
|
TB_Top.VSplitLeft(10.0f, 0, &TB_Top);
|
||||||
|
@ -5767,7 +5790,7 @@ void CEditor::Init()
|
||||||
ms_CheckerTexture = Graphics()->LoadTexture("editor/checker.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_CheckerTexture = Graphics()->LoadTexture("editor/checker.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
ms_BackgroundTexture = Graphics()->LoadTexture("editor/background.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_BackgroundTexture = Graphics()->LoadTexture("editor/background.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
ms_CursorTexture = Graphics()->LoadTexture("editor/cursor.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_CursorTexture = Graphics()->LoadTexture("editor/cursor.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
ms_EntitiesTexture = Graphics()->LoadTexture("editor/entities.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_EntitiesTexture = Graphics()->LoadTexture("editor/entities/DDNet.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
|
|
||||||
ms_FrontTexture = Graphics()->LoadTexture("editor/front.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_FrontTexture = Graphics()->LoadTexture("editor/front.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
ms_TeleTexture = Graphics()->LoadTexture("editor/tele.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_TeleTexture = Graphics()->LoadTexture("editor/tele.png", IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#ifndef GAME_EDITOR_EDITOR_H
|
#ifndef GAME_EDITOR_EDITOR_H
|
||||||
#define GAME_EDITOR_EDITOR_H
|
#define GAME_EDITOR_EDITOR_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include <base/math.h>
|
#include <base/math.h>
|
||||||
|
@ -856,6 +858,9 @@ public:
|
||||||
int m_FilesCur;
|
int m_FilesCur;
|
||||||
int m_FilesStopAt;
|
int m_FilesStopAt;
|
||||||
|
|
||||||
|
std::vector<std::string> m_SelectEntitiesFiles;
|
||||||
|
int m_SelectEntitiesImage;
|
||||||
|
|
||||||
float m_WorldOffsetX;
|
float m_WorldOffsetX;
|
||||||
float m_WorldOffsetY;
|
float m_WorldOffsetY;
|
||||||
float m_EditorOffsetX;
|
float m_EditorOffsetX;
|
||||||
|
|
|
@ -1655,28 +1655,24 @@ int CEditor::PopupColorPicker(CEditor *pEditor, CUIRect View)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int g_SelectEntitiesImage = 0;
|
|
||||||
|
|
||||||
int CEditor::PopupEntities(CEditor *pEditor, CUIRect View)
|
int CEditor::PopupEntities(CEditor *pEditor, CUIRect View)
|
||||||
{
|
{
|
||||||
const char *EntitiesChoices[][2] = {
|
for(int i = 0; i < (int)pEditor->m_SelectEntitiesFiles.size(); i++)
|
||||||
{"Standard", "editor/entities.png"},
|
|
||||||
{"Clear DDNet", "editor/entities_clear/ddnet.png"},
|
|
||||||
{"Clear DDrace", "editor/entities_clear/ddrace.png"},
|
|
||||||
{"Clear Race", "editor/entities_clear/race.png"},
|
|
||||||
{"Clear FNG", "editor/entities_clear/fng.png"},
|
|
||||||
{"Clear Vanilla", "editor/entities_clear/vanilla.png"}};
|
|
||||||
|
|
||||||
for(int i = 0; i < (int)(sizeof(EntitiesChoices)/sizeof(*EntitiesChoices)); i++)
|
|
||||||
{
|
{
|
||||||
CUIRect Button;
|
CUIRect Button;
|
||||||
View.HSplitTop(14.0f, &Button, &View);
|
View.HSplitTop(14.0f, &Button, &View);
|
||||||
|
|
||||||
if(pEditor->DoButton_MenuItem(EntitiesChoices[i], EntitiesChoices[i][0], i==g_SelectEntitiesImage, &Button)) {
|
const char *Name = pEditor->m_SelectEntitiesFiles[i].c_str();
|
||||||
if (i != g_SelectEntitiesImage) {
|
|
||||||
g_SelectEntitiesImage = i;
|
if(pEditor->DoButton_MenuItem(Name, Name, i==pEditor->m_SelectEntitiesImage, &Button)) {
|
||||||
|
if (i != pEditor->m_SelectEntitiesImage) {
|
||||||
|
pEditor->m_SelectEntitiesImage = i;
|
||||||
|
|
||||||
|
char aBuf[512];
|
||||||
|
str_format(aBuf, sizeof(aBuf), "editor/entities/%s.png", Name);
|
||||||
|
|
||||||
pEditor->Graphics()->UnloadTexture(ms_EntitiesTexture);
|
pEditor->Graphics()->UnloadTexture(ms_EntitiesTexture);
|
||||||
ms_EntitiesTexture = pEditor->Graphics()->LoadTexture(EntitiesChoices[i][1], IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
ms_EntitiesTexture = pEditor->Graphics()->LoadTexture(aBuf, IStorage::TYPE_ALL, CImageInfo::FORMAT_AUTO, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue