Skip to content

Commit 2b09307

Browse files
Merge branch 'develop'
2 parents 955176e + e674ad9 commit 2b09307

File tree

56 files changed

+676
-141
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+676
-141
lines changed

CHANGELOG.MD

+13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Change Log
22

3+
## v3.65.0 - Dec 13, 2024
4+
5+
* Allows using prefabs and user components from node modules.
6+
* Allows tagging folders as "copied" libraries, with the `library.txt` file.
7+
* Adds onWorldBounds property to the Arcade Physics Body.
8+
* The Add Script Node dialog groups scripts by folder and node modules.
9+
* The Blocks view groups the scripts by folder and node modules.
10+
* Allows custom display format of prefab instances, using ${} and #{} expressions.
11+
* Shows tooltip with prefab property info.
12+
* Allows setting a Scene Display Name for scenes.
13+
* Allows setting the Display Name of user components.
14+
* Migrates all project templates to the new script libraries.
15+
316
## v3.64.0 - Nov 10, 2023
417

518
* Fixes making thumbnails of single-layer prefabs.

package-lock.json

+2-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/make-all-help-files.js

+1
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ utils.makeHelpFile([
266266
"Phaser.Physics.Arcade.Body.pushable",
267267
"Phaser.Physics.Arcade.Body.immovable",
268268
"Phaser.Physics.Arcade.Body.collideWorldBounds",
269+
"Phaser.Physics.Arcade.Body.onWorldBounds",
269270
"Phaser.Physics.Arcade.Body.mass",
270271
"Phaser.Physics.Arcade.Body.bounce",
271272
"Phaser.Physics.Arcade.Body.friction",

source/editor/plugins/colibri/src/ui/controls/ToolbarManager.ts

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ namespace colibri.ui.controls {
8686
const keyString = action.getCommandKeyString();
8787

8888
if (tooltip) {
89+
8990
controls.Tooltip.tooltipWithKey(btnElement, keyString, tooltip);
9091
}
9192

source/editor/plugins/colibri/src/ui/controls/properties/FormBuilder.ts

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ namespace colibri.ui.controls.properties {
3636
label.innerText = text;
3737

3838
if (tooltip) {
39+
3940
Tooltip.tooltip(label, tooltip);
4041
}
4142

source/editor/plugins/phasereditor2d.files/src/FilesPlugin.ts

+6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ namespace phasereditor2d.files {
2626
return this._openFileAction;
2727
}
2828

29+
getFileStyledLabelExtensions(): ui.viewers.StyledFileLabelProviderExtension[] {
30+
31+
return colibri.Platform.getExtensions(
32+
ui.viewers.StyledFileLabelProviderExtension.POINT_ID);
33+
}
34+
2935
public registerExtensions(reg: colibri.ExtensionRegistry) {
3036

3137
// new files

source/editor/plugins/phasereditor2d.files/src/ui/actions/FilesViewCommands.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ namespace phasereditor2d.files.ui.actions {
7979

8080
const viewer = new controls.viewers.TreeViewer("phasereditor2d.files.ui.actions.GoToFile");
8181
viewer.setContentProvider(new controls.viewers.ArrayTreeContentProvider());
82-
viewer.setStyledLabelProvider(new viewers.FileStyledLabelProvider());
82+
viewer.setStyledLabelProvider(new viewers.OpenFileLabelProvider());
8383
viewer.setCellRendererProvider(new viewers.FileCellRendererProvider());
8484

8585
viewer.setInput(colibri.ui.ide.FileUtils.getAllFiles()

source/editor/plugins/phasereditor2d.files/src/ui/viewers/FileStyledLabelProvider.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ namespace phasereditor2d.files.ui.viewers {
33
import controls = colibri.ui.controls;
44
import io = colibri.core.io;
55

6-
export class FileStyledLabelProvider implements controls.viewers.IStyledLabelProvider {
6+
export class OpenFileLabelProvider implements controls.viewers.IStyledLabelProvider {
77

8-
getStyledTexts(obj: io.FilePath, dark: boolean): controls.viewers.IStyledText[] {
8+
getStyledTexts(file: io.FilePath, dark: boolean): controls.viewers.IStyledText[] {
99

1010
const theme = controls.Controls.getTheme();
1111

1212
const result = [
1313
{
14-
text: obj.getName(),
14+
text: file.getName(),
1515
color: theme.viewerForeground
1616
}
1717
];
1818

19-
if (obj.getParent()) {
19+
if (file.getParent()) {
2020

21-
let path = obj.getParent().getProjectRelativeName();
21+
let path = file.getParent().getProjectRelativeName();
2222

2323
if (path.startsWith("/")) {
2424

source/editor/plugins/phasereditor2d.files/src/ui/viewers/StyledFileLabelProvider.ts

+13
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,20 @@ namespace phasereditor2d.files.ui.viewers {
88

99
const theme = controls.Controls.getTheme();
1010

11+
const extensions = FilesPlugin.getInstance().getFileStyledLabelExtensions();
12+
13+
for(const ext of extensions) {
14+
15+
const styles = ext.getStyledText(file);
16+
17+
if (styles) {
18+
19+
return styles;
20+
}
21+
}
22+
1123
if (file.getName() === "publicroot") {
24+
1225
return [{
1326
text: file.getName(),
1427
color: dark ? "red" : "brown"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace phasereditor2d.files.ui.viewers {
2+
3+
import io = colibri.core.io;
4+
import controls = colibri.ui.controls;
5+
6+
export abstract class StyledFileLabelProviderExtension extends colibri.Extension {
7+
8+
static POINT_ID = "phasereditor2d.files.ui.views.FileStyledLabelProviderExtension";
9+
10+
constructor() {
11+
super(StyledFileLabelProviderExtension.POINT_ID);
12+
}
13+
14+
abstract getStyledText(file: io.FilePath): controls.viewers.IStyledText[] | null;
15+
}
16+
}

source/editor/plugins/phasereditor2d.ide/src/IDEPlugin.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ namespace phasereditor2d.ide {
7474
}));
7575
}
7676

77+
reg.addExtension(new ui.viewers.LibraryFileStyledLabelProviderExtension());
78+
7779
phasereditor2d.files.FilesPlugin.getInstance().setOpenFileAction(file => this.openFileFromFilesView(file));
7880
}
7981

@@ -95,7 +97,7 @@ namespace phasereditor2d.ide {
9597

9698
for (const ext of exts) {
9799

98-
await ext.preload(monitor);
100+
await ext.compile(monitor);
99101
}
100102

101103
dlg.close();

source/editor/plugins/phasereditor2d.ide/src/core/CompileProjectExtension.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ namespace phasereditor2d.ide.core {
1212

1313
abstract getTotal(): number;
1414

15-
abstract preload(monitor: controls.IProgressMonitor);
15+
abstract compile(monitor: controls.IProgressMonitor): Promise<void>;
1616
}
1717
}

source/editor/plugins/phasereditor2d.ide/src/core/code/CodeUtils.ts

+88-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,83 @@
1-
namespace phasereditor2d.ide.core.code {
1+
namespace phasereditor2d.ide.core.code {
22

33
import io = colibri.core.io;
44

5-
export function getImportPath(file: io.FilePath, importFile: io.FilePath): string {
5+
export function isCopiedLibraryFile(file: io.FilePath) {
6+
7+
if (file.isRoot()) {
8+
9+
return false;
10+
}
11+
12+
const name = "library.txt";
13+
14+
if (file.isFolder()) {
15+
16+
if (file.getFile(name)) {
17+
18+
return true;
19+
}
20+
21+
} else if (file.getName() === name || file.getSibling(name)) {
22+
23+
return true;
24+
}
25+
26+
return isCopiedLibraryFile(file.getParent());
27+
}
28+
29+
export function isNodeLibraryFile(file: io.FilePath) {
30+
31+
if (file.isFolder() && file.getName() === "node_modules") {
32+
33+
return true;
34+
}
35+
36+
if (file.isRoot()) {
37+
38+
return false;
39+
}
40+
41+
return isNodeLibraryFile(file.getParent());
42+
}
43+
44+
export function findNodeModuleName(file: io.FilePath): string {
45+
46+
if (file.isRoot() || file.getParent().isRoot()) {
47+
48+
return null;
49+
}
50+
51+
const parentName = file.getParent().getName();
52+
const fileName = file.getName();
53+
54+
// try case node_modules/<current-files>
55+
56+
if (parentName === "node_modules") {
57+
58+
return fileName;
59+
}
60+
61+
const parentParentName = file.getParent().getParent().getName();
62+
63+
// try case node_modules/@org/<current-file>
64+
65+
if (parentName.startsWith("@") && parentParentName === "node_modules") {
66+
67+
return parentName + "/" + fileName;
68+
}
69+
70+
return findNodeModuleName(file.getParent());
71+
}
72+
73+
export function getImportPath(file: io.FilePath, importFile: io.FilePath): { importPath: string, asDefault: boolean } {
74+
75+
const nodeModule = findNodeModuleName(importFile);
76+
77+
if (nodeModule) {
78+
79+
return { importPath: nodeModule, asDefault: false };
80+
}
681

782
const parent = file.getParent();
883
const parentPath = parent.getFullName();
@@ -12,15 +87,18 @@ namespace phasereditor2d.ide.core.code {
1287

1388
if (parent === importFile.getParent()) {
1489

15-
return "./" + importFile.getNameWithoutExtension();
90+
return { importPath: "./" + importFile.getNameWithoutExtension(), asDefault: true };
1691
}
1792

1893
if (importFilePath.startsWith(parentPath + "/")) {
1994

20-
return "./" + importFileElements.slice(parentElements.length).join("/");
95+
return {
96+
importPath: "./" + importFileElements.slice(parentElements.length).join("/"),
97+
asDefault: true
98+
};
2199
}
22100

23-
while(parentElements.length > 0) {
101+
while (parentElements.length > 0) {
24102

25103
const parentFirst = parentElements.shift();
26104
const importFileFirst = importFileElements.shift();
@@ -29,11 +107,14 @@ namespace phasereditor2d.ide.core.code {
29107

30108
importFileElements.unshift(importFileFirst);
31109

32-
return "../".repeat(parentElements.length + 1) + importFileElements.join("/");
110+
return {
111+
importPath: "../".repeat(parentElements.length + 1) + importFileElements.join("/"),
112+
asDefault: true
113+
};
33114
}
34115
}
35116

36-
return "";
117+
return { importPath: "", asDefault: true };
37118
}
38119

39120
function isAlphaNumeric(c: string) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace phasereditor2d.ide.ui.viewers {
2+
3+
import controls = colibri.ui.controls;
4+
5+
export class LibraryFileStyledLabelProviderExtension extends colibri.Extension {
6+
7+
constructor() {
8+
super(files.ui.viewers.StyledFileLabelProviderExtension.POINT_ID);
9+
}
10+
11+
getStyledText(file: colibri.core.io.FilePath): colibri.ui.controls.viewers.IStyledText[] {
12+
13+
if (core.code.isNodeLibraryFile(file) || core.code.isCopiedLibraryFile(file)) {
14+
15+
const theme = controls.Controls.getTheme();
16+
17+
return [{
18+
color: theme.viewerForeground + "90",
19+
text: file.getName()
20+
}];
21+
}
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)