Polyphase Game Engine
Loading...
Searching...
No Matches
AddonCreator.h
Go to the documentation of this file.
1#pragma once
2
8#if EDITOR
9
10#include "NativeAddonManager.h"
11
12#include <string>
13#include <vector>
14
18struct AddonCreateInfo
19{
20 std::string mName;
21 std::string mId; // Auto-generated from name if empty
22 std::string mAuthor;
23 std::string mDescription;
24 std::string mVersion = "1.0.0";
25 std::string mType; // "template" or "addon"
26};
27
31struct PackageJsonData
32{
33 std::string mName;
34 std::string mAuthor;
35 std::string mDescription;
36 std::string mVersion;
37 std::string mUrl;
38 std::string mType; // "template", "addon", or empty
39 std::string mTags; // Comma-separated
40
41 // Native section
42 bool mHasNative = false;
43 std::string mNativeTarget; // "editor" or "engine"
44 std::string mSourceDir = "Source";
45 std::string mBinaryName;
46 std::string mEntrySymbol = "PolyphasePlugin_GetDesc";
47 int mApiVersion = 1;
48};
49
53struct UserAddonInfo
54{
55 std::string mId;
56 std::string mName;
57 std::string mPath;
58 std::string mType; // "template", "addon", "native", or empty
59};
60
64namespace AddonCreator
65{
66 // ===== Creation =====
67
71 bool CreateTemplate(const AddonCreateInfo& info, const std::string& targetDir, std::string& outError);
72
76 bool CreateAddon(const AddonCreateInfo& info, const std::string& targetDir, std::string& outError);
77
82 bool CreateNativeAddon(const NativeAddonCreateInfo& info, const std::string& targetDir,
83 std::string& outError, std::string* outPath = nullptr);
84
85 // ===== Initialization =====
86
90 bool InitializeAsTemplate(const std::string& projectDir, std::string& outError);
91
95 bool InitializeAsAddon(const std::string& projectDir, std::string& outError);
96
100 bool InitializeAsNativeAddon(const std::string& projectDir, std::string& outError);
101
102 // ===== Publishing =====
103
107 bool PublishViaGit(const std::string& addonDir, const std::string& commitMessage,
108 bool push, std::string& outError, std::string& outLog);
109
113 bool PublishAsZip(const std::string& addonDir, const std::string& outputPath, std::string& outError);
114
115 // ===== Package.json Operations =====
116
120 bool ReadPackageJson(const std::string& path, PackageJsonData& outData, std::string& outError);
121
125 bool WritePackageJson(const std::string& path, const PackageJsonData& data, std::string& outError);
126
130 void OpenInExternalEditor(const std::string& path);
131
132 // ===== Utilities =====
133
137 std::string GenerateIdFromName(const std::string& name);
138
145 std::vector<UserAddonInfo> GetUserCreatedAddons(const std::string& projectDir);
146
150 bool IsGitAvailable();
151
155 bool HasGitRepo(const std::string& dir);
156
160 bool InitGitRepo(const std::string& dir, std::string& outError);
161
165 bool HasGitRemote(const std::string& dir);
166};
167
168#endif // EDITOR
Manages native addon lifecycle including discovery, building, loading, and unloading.