sapdon 3.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/cli/build.d.ts +7 -0
- package/dist/cli/build.js +236 -0
- package/dist/cli/dev-server/client.d.ts +2 -0
- package/dist/cli/dev-server/client.js +21 -0
- package/dist/cli/dev-server/config.d.ts +3 -0
- package/dist/cli/dev-server/config.js +3 -0
- package/dist/cli/dev-server/handles.d.ts +4 -0
- package/dist/cli/dev-server/handles.js +5 -0
- package/dist/cli/dev-server/hmr.d.ts +1 -0
- package/dist/cli/dev-server/hmr.js +13 -0
- package/dist/cli/dev-server/index.d.ts +4 -0
- package/dist/cli/dev-server/index.js +17 -0
- package/dist/cli/dev-server/server.d.ts +14 -0
- package/dist/cli/dev-server/server.js +59 -0
- package/dist/cli/dev-server/syncFiles.d.ts +3 -0
- package/dist/cli/dev-server/syncFiles.js +45 -0
- package/dist/cli/index.d.ts +20 -0
- package/dist/cli/index.js +90 -0
- package/dist/cli/init.d.ts +9 -0
- package/dist/cli/init.js +80 -0
- package/dist/cli/load.d.ts +3 -0
- package/dist/cli/load.js +94 -0
- package/dist/cli/start.d.ts +2 -0
- package/dist/cli/start.js +1398 -0
- package/dist/cli/tools/textureSet.d.ts +13 -0
- package/dist/cli/tools/textureSet.js +103 -0
- package/dist/cli/utils.d.ts +13 -0
- package/dist/cli/utils.js +89 -0
- package/dist/core/addon/biome.d.ts +22 -0
- package/dist/core/addon/biome.js +27 -0
- package/dist/core/addon/block/block.d.ts +41 -0
- package/dist/core/addon/block/block.js +46 -0
- package/dist/core/addon/controllers/animationController.d.ts +43 -0
- package/dist/core/addon/controllers/animationController.js +73 -0
- package/dist/core/addon/controllers/render_controllers.js +162 -0
- package/dist/core/addon/entity/clientEntity.d.ts +107 -0
- package/dist/core/addon/entity/clientEntity.js +149 -0
- package/dist/core/addon/entity/entity.d.ts +42 -0
- package/dist/core/addon/entity/entity.js +50 -0
- package/dist/core/addon/feature/oreFeature.d.ts +19 -0
- package/dist/core/addon/feature/oreFeature.js +24 -0
- package/dist/core/addon/featureRule.d.ts +20 -0
- package/dist/core/addon/featureRule.js +25 -0
- package/dist/core/addon/item/attachable.d.ts +94 -0
- package/dist/core/addon/item/attachable.js +134 -0
- package/dist/core/addon/item/item.d.ts +19 -0
- package/dist/core/addon/item/item.js +26 -0
- package/dist/core/addon/manifest.d.ts +49 -0
- package/dist/core/addon/manifest.js +65 -0
- package/dist/core/addon/menuCategory.d.ts +6 -0
- package/dist/core/addon/menuCategory.js +7 -0
- package/dist/core/addon/recipe/baseRecipe.d.ts +12 -0
- package/dist/core/addon/recipe/baseRecipe.js +23 -0
- package/dist/core/addon/recipe/data.d.ts +66 -0
- package/dist/core/addon/recipe/data.js +74 -0
- package/dist/core/addon/recipe/furnace.d.ts +17 -0
- package/dist/core/addon/recipe/furnace.js +43 -0
- package/dist/core/addon/recipe/shaped.d.ts +26 -0
- package/dist/core/addon/recipe/shaped.js +53 -0
- package/dist/core/addon/recipe/shapeless.d.ts +18 -0
- package/dist/core/addon/recipe/shapeless.js +36 -0
- package/dist/core/biome/biome.d.ts +14 -0
- package/dist/core/biome/biome.js +23 -0
- package/dist/core/biome/biomeComponent.d.ts +46 -0
- package/dist/core/biome/biomeComponent.js +77 -0
- package/dist/core/block/basicBlock.d.ts +48 -0
- package/dist/core/block/basicBlock.js +105 -0
- package/dist/core/block/block.d.ts +32 -0
- package/dist/core/block/block.js +92 -0
- package/dist/core/block/blockComponent.d.ts +187 -0
- package/dist/core/block/blockComponent.js +500 -0
- package/dist/core/block/cropBlock.d.ts +4 -0
- package/dist/core/block/cropBlock.js +27 -0
- package/dist/core/block/geometryBlock.d.ts +12 -0
- package/dist/core/block/geometryBlock.js +16 -0
- package/dist/core/block/oreBlock.d.ts +9 -0
- package/dist/core/block/oreBlock.js +25 -0
- package/dist/core/block/rotatableBlock.d.ts +27 -0
- package/dist/core/block/rotatableBlock.js +107 -0
- package/dist/core/block/tileBlock.d.ts +17 -0
- package/dist/core/block/tileBlock.js +125 -0
- package/dist/core/entity/basicEntity.d.ts +111 -0
- package/dist/core/entity/basicEntity.js +170 -0
- package/dist/core/entity/behavior/followMob.d.ts +12 -0
- package/dist/core/entity/behavior/followMob.js +35 -0
- package/dist/core/entity/behavior/followParent.d.ts +7 -0
- package/dist/core/entity/behavior/followParent.js +15 -0
- package/dist/core/entity/behavior/randomStroll.d.ts +31 -0
- package/dist/core/entity/behavior/randomStroll.js +63 -0
- package/dist/core/entity/behavior/tempt.d.ts +73 -0
- package/dist/core/entity/behavior/tempt.js +134 -0
- package/dist/core/entity/bundles/BasicMoveBundle.js +8 -0
- package/dist/core/entity/bundles/basicBundle.d.ts +13 -0
- package/dist/core/entity/bundles/basicBundle.js +38 -0
- package/dist/core/entity/clientEntity.d.ts +20 -0
- package/dist/core/entity/clientEntity.js +37 -0
- package/dist/core/entity/componets/entityComponet.d.ts +202 -0
- package/dist/core/entity/componets/entityComponet.js +354 -0
- package/dist/core/entity/data/nativeEntityData.d.ts +9 -0
- package/dist/core/entity/data/nativeEntityData.js +38 -0
- package/dist/core/entity/dummyEntity.js +14 -0
- package/dist/core/entity/entity.d.ts +15 -0
- package/dist/core/entity/entity.js +11 -0
- package/dist/core/entity/nativeEntity.d.ts +8 -0
- package/dist/core/entity/nativeEntity.js +28 -0
- package/dist/core/entity/navigation/walk.d.ts +23 -0
- package/dist/core/entity/navigation/walk.js +56 -0
- package/dist/core/entity/projectile.d.ts +3 -0
- package/dist/core/entity/projectile.js +7 -0
- package/dist/core/factory/biomeFactory.d.ts +4 -0
- package/dist/core/factory/biomeFactory.js +13 -0
- package/dist/core/factory/blockFactory.d.ts +34 -0
- package/dist/core/factory/blockFactory.js +143 -0
- package/dist/core/factory/entityFactory.d.ts +17 -0
- package/dist/core/factory/entityFactory.js +75 -0
- package/dist/core/factory/featureFactory.d.ts +6 -0
- package/dist/core/factory/featureFactory.js +23 -0
- package/dist/core/factory/itemExtra.d.ts +8 -0
- package/dist/core/factory/itemExtra.js +9 -0
- package/dist/core/factory/itemFactory.d.ts +27 -0
- package/dist/core/factory/itemFactory.js +112 -0
- package/dist/core/factory/recipeFactory.d.ts +18 -0
- package/dist/core/factory/recipeFactory.js +39 -0
- package/dist/core/factory/uiFactory.d.ts +12 -0
- package/dist/core/factory/uiFactory.js +32 -0
- package/dist/core/feature/oreFeature.d.ts +10 -0
- package/dist/core/feature/oreFeature.js +11 -0
- package/dist/core/feature-rule/condition/biomeFilter.d.ts +26 -0
- package/dist/core/feature-rule/condition/biomeFilter.js +36 -0
- package/dist/core/feature-rule/condition/featureConditions.d.ts +27 -0
- package/dist/core/feature-rule/condition/featureConditions.js +37 -0
- package/dist/core/feature-rule/distribution/coordinateDistribution.d.ts +17 -0
- package/dist/core/feature-rule/distribution/coordinateDistribution.js +23 -0
- package/dist/core/feature-rule/distribution/featureDistribution.d.ts +31 -0
- package/dist/core/feature-rule/distribution/featureDistribution.js +41 -0
- package/dist/core/feature-rule/featureRule.d.ts +17 -0
- package/dist/core/feature-rule/featureRule.js +26 -0
- package/dist/core/index.d.ts +2241 -0
- package/dist/core/index.js +1 -0
- package/dist/core/item/armor.d.ts +21 -0
- package/dist/core/item/armor.js +90 -0
- package/dist/core/item/attachable.d.ts +6 -0
- package/dist/core/item/attachable.js +26 -0
- package/dist/core/item/food.d.ts +24 -0
- package/dist/core/item/food.js +38 -0
- package/dist/core/item/item.d.ts +36 -0
- package/dist/core/item/item.js +69 -0
- package/dist/core/item/itemComponents.d.ts +113 -0
- package/dist/core/item/itemComponents.js +225 -0
- package/dist/core/registry.d.ts +12 -0
- package/dist/core/registry.js +17 -0
- package/dist/core/texture.d.ts +18 -0
- package/dist/core/texture.js +38 -0
- package/dist/core/ui/buttonMapping.d.ts +97 -0
- package/dist/core/ui/buttonMapping.js +132 -0
- package/dist/core/ui/dataBindingObject.d.ts +97 -0
- package/dist/core/ui/dataBindingObject.js +134 -0
- package/dist/core/ui/elements/button.d.ts +21 -0
- package/dist/core/ui/elements/button.js +101 -0
- package/dist/core/ui/elements/collectionPanel.d.ts +12 -0
- package/dist/core/ui/elements/collectionPanel.js +53 -0
- package/dist/core/ui/elements/grid.d.ts +8 -0
- package/dist/core/ui/elements/grid.js +33 -0
- package/dist/core/ui/elements/image.d.ts +13 -0
- package/dist/core/ui/elements/image.js +55 -0
- package/dist/core/ui/elements/label.d.ts +14 -0
- package/dist/core/ui/elements/label.js +61 -0
- package/dist/core/ui/elements/panel.d.ts +11 -0
- package/dist/core/ui/elements/panel.js +49 -0
- package/dist/core/ui/elements/scrollingPanel.d.ts +14 -0
- package/dist/core/ui/elements/scrollingPanel.js +59 -0
- package/dist/core/ui/elements/stackPanel.d.ts +14 -0
- package/dist/core/ui/elements/stackPanel.js +37 -0
- package/dist/core/ui/elements/uiElement.d.ts +53 -0
- package/dist/core/ui/elements/uiElement.js +129 -0
- package/dist/core/ui/properties/control.d.ts +214 -0
- package/dist/core/ui/properties/control.js +286 -0
- package/dist/core/ui/properties/dataBinding.d.ts +6 -0
- package/dist/core/ui/properties/dataBinding.js +16 -0
- package/dist/core/ui/properties/factory.d.ts +37 -0
- package/dist/core/ui/properties/factory.js +62 -0
- package/dist/core/ui/properties/gridProp.d.ts +65 -0
- package/dist/core/ui/properties/gridProp.js +90 -0
- package/dist/core/ui/properties/input.d.ts +97 -0
- package/dist/core/ui/properties/input.js +134 -0
- package/dist/core/ui/properties/layout.d.ts +105 -0
- package/dist/core/ui/properties/layout.js +145 -0
- package/dist/core/ui/properties/scrollView.d.ts +105 -0
- package/dist/core/ui/properties/scrollView.js +145 -0
- package/dist/core/ui/properties/sound.d.ts +47 -0
- package/dist/core/ui/properties/sound.js +66 -0
- package/dist/core/ui/properties/sprite.d.ts +161 -0
- package/dist/core/ui/properties/sprite.js +222 -0
- package/dist/core/ui/properties/text.d.ts +135 -0
- package/dist/core/ui/properties/text.js +187 -0
- package/dist/core/ui/registry/uiSystemRegistry.d.ts +8 -0
- package/dist/core/ui/registry/uiSystemRegistry.js +26 -0
- package/dist/core/ui/systems/chest.d.ts +5 -0
- package/dist/core/ui/systems/chest.js +21 -0
- package/dist/core/ui/systems/containerUISystem.d.ts +67 -0
- package/dist/core/ui/systems/containerUISystem.js +214 -0
- package/dist/core/ui/systems/guidebook.d.ts +9 -0
- package/dist/core/ui/systems/guidebook.js +206 -0
- package/dist/core/ui/systems/serverForm.d.ts +13 -0
- package/dist/core/ui/systems/serverForm.js +116 -0
- package/dist/core/ui/systems/system.d.ts +16 -0
- package/dist/core/ui/systems/system.js +37 -0
- package/dist/oc/actor.js +44 -0
- package/dist/oc/core.js +201 -0
- package/dist/oc/index.d.ts +142 -0
- package/dist/oc/index.js +1 -0
- package/dist/oc/input.js +67 -0
- package/dist/oc/optional.js +31 -0
- package/doc/oc/index.md +0 -0
- package/doc/sapdon-ts.md +41 -5
- package/package.json +6 -8
- package/doc/cli.md +0 -24
- /package/doc/hello_sapdon/{sapdon/344/275/277/347/224/250/346/225/231/347/250/213.md" → hello_sapdon.md} +0 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { ButtonMapping } from "../buttonMapping.js";
|
|
2
|
+
import { DataBindingObject } from "../dataBindingObject.js";
|
|
3
|
+
import { Button } from "../elements/button.js";
|
|
4
|
+
import { Image } from "../elements/image.js";
|
|
5
|
+
import { Label } from "../elements/label.js";
|
|
6
|
+
import { Panel } from "../elements/panel.js";
|
|
7
|
+
import { StackPanel } from "../elements/stackPanel.js";
|
|
8
|
+
import { UIElement } from "../elements/uiElement.js";
|
|
9
|
+
import { Control } from "../properties/control.js";
|
|
10
|
+
import { Input } from "../properties/input.js";
|
|
11
|
+
import { Layout } from "../properties/layout.js";
|
|
12
|
+
import { Sprite } from "../properties/sprite.js";
|
|
13
|
+
import { Text } from "../properties/text.js";
|
|
14
|
+
import { ServerUISystem } from "./serverForm.js";
|
|
15
|
+
import { UISystem } from "./system.js";
|
|
16
|
+
//表单按钮模板
|
|
17
|
+
const form_button_template = new Button("form_button_template", "common.button");
|
|
18
|
+
form_button_template.addVariable("default_texture|default", "");
|
|
19
|
+
form_button_template.addVariable("hover_texture|default", "");
|
|
20
|
+
form_button_template.addVariable("pressed_texture|default", "");
|
|
21
|
+
form_button_template.addVariable("binding_button_text|default", "");
|
|
22
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection_details")
|
|
23
|
+
.setBindingCollectionName("form_buttons"));
|
|
24
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection")
|
|
25
|
+
.setBindingCollectionName("form_buttons")
|
|
26
|
+
.setBindingName("#form_button_text"));
|
|
27
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
|
|
28
|
+
.setSourcePropertyName("($binding_button_text = #form_button_text)")
|
|
29
|
+
.setTargetPropertyName("#visible"));
|
|
30
|
+
form_button_template.addControls([
|
|
31
|
+
new Image("default").setSprite(new Sprite().setTexture("$default_texture")),
|
|
32
|
+
new Image("hover").setSprite(new Sprite().setTexture("$hover_texture")),
|
|
33
|
+
new Image("pressed").setSprite(new Sprite().setTexture("$pressed_texture"))
|
|
34
|
+
]);
|
|
35
|
+
//f
|
|
36
|
+
const form_button_panel = new Panel("form_button_factory").enableDebug();
|
|
37
|
+
form_button_panel.addProp("type", "collection_panel");
|
|
38
|
+
form_button_panel.factory.setName("buttons").setControlName("$button_control");
|
|
39
|
+
form_button_panel.addProp("collection_name", "form_buttons");
|
|
40
|
+
form_button_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#form_button_length")
|
|
41
|
+
.setBindingNameOverride("#collection_length"));
|
|
42
|
+
const page_template = new StackPanel("page_template").setOrientation("horizontal")
|
|
43
|
+
.addVariable("page_left_content | default", "")
|
|
44
|
+
.addVariable("page_right_content | default", "")
|
|
45
|
+
.setLayout(new Layout().setSize(["90%", "90%"]))
|
|
46
|
+
.addStack(["50%", "100%"], new UIElement("page_left", undefined, "$page_left_content").serialize())
|
|
47
|
+
.addStack(["50%", "100%"], new UIElement("page_right", undefined, "$page_right_content").serialize());
|
|
48
|
+
page_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
|
|
49
|
+
.setSourcePropertyName("($binding_text = #form_text)")
|
|
50
|
+
.setTargetPropertyName("#visible"));
|
|
51
|
+
export class Guidebook {
|
|
52
|
+
#bindingList = [];
|
|
53
|
+
constructor(identifier, path) {
|
|
54
|
+
this.system = new UISystem(identifier, path);
|
|
55
|
+
//init
|
|
56
|
+
this.#binding();
|
|
57
|
+
this.#addTemplate();
|
|
58
|
+
this.#updateSystem();
|
|
59
|
+
}
|
|
60
|
+
addPageBinding(page_name, left_control_name, right_control_name) {
|
|
61
|
+
this.#bindingList.push({
|
|
62
|
+
page_name: page_name,
|
|
63
|
+
left_control_name: left_control_name,
|
|
64
|
+
right_control_name: right_control_name
|
|
65
|
+
});
|
|
66
|
+
//更新系统
|
|
67
|
+
this.#updateSystem();
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
addPage(page_name, left_control, right_control) {
|
|
71
|
+
this.addPageBinding(page_name, left_control.name, right_control.name);
|
|
72
|
+
//添加元素
|
|
73
|
+
this.addElement(left_control);
|
|
74
|
+
this.addElement(right_control);
|
|
75
|
+
//更新系统
|
|
76
|
+
this.#updateSystem();
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
addElement(element) {
|
|
80
|
+
this.system.addElement(element);
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
#binding() {
|
|
84
|
+
ServerUISystem.bindingTitlewithContent(this.system.name, `${this.system.namespace}.guidebook_root_panel`);
|
|
85
|
+
}
|
|
86
|
+
#addTemplate() {
|
|
87
|
+
this.addElement(form_button_template);
|
|
88
|
+
this.addElement(form_button_panel);
|
|
89
|
+
this.addElement(page_template);
|
|
90
|
+
//
|
|
91
|
+
this.#updateSystem();
|
|
92
|
+
}
|
|
93
|
+
#updateSystem() {
|
|
94
|
+
const guidebook_root_panel = new Panel("guidebook_root_panel");
|
|
95
|
+
//开启调试框
|
|
96
|
+
//guidebook_root_panel.enableDebug()
|
|
97
|
+
//设置布局属性
|
|
98
|
+
guidebook_root_panel.setLayout(new Layout().setSize([320, 207]));
|
|
99
|
+
//添加子元素
|
|
100
|
+
guidebook_root_panel.addControls([
|
|
101
|
+
//添加背景
|
|
102
|
+
new UIElement("book_background", undefined, "book.book_background"),
|
|
103
|
+
//添加书页
|
|
104
|
+
new StackPanel("book_page_stack_panel").setOrientation("horizontal")
|
|
105
|
+
.setLayout(new Layout().setSize([320, 207]))
|
|
106
|
+
.addVariable("page_size", [160, 207])
|
|
107
|
+
.addStack("$page_size", new Panel("book_left_panel").addControls([
|
|
108
|
+
{
|
|
109
|
+
"page_crease_image@book.page_crease_left_image": {
|
|
110
|
+
"size": ["100% - 40px", "100% - 14px"],
|
|
111
|
+
"offset": [0, -2]
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"page_edge_image@book.page_edge_left_image": {
|
|
116
|
+
"size": ["100% - 7px", "100% - 16px"],
|
|
117
|
+
"offset": [7, -1]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
]).serialize())
|
|
121
|
+
.addStack("$page_size", new Panel("book_right_panel").addControls([
|
|
122
|
+
{
|
|
123
|
+
"page_crease_image@book.page_crease_right_image": {
|
|
124
|
+
"size": ["100% - 40px", "100% - 14px"],
|
|
125
|
+
"offset": [0, -2]
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"page_edge_image@book.page_edge_right_image": {
|
|
130
|
+
"size": ["100% - 7px", "100% - 16px"],
|
|
131
|
+
"offset": [-7, -1]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
]).serialize()),
|
|
135
|
+
//添加书页内容
|
|
136
|
+
new Panel("page_content_root")
|
|
137
|
+
.setControl(new Control().setLayer(5))
|
|
138
|
+
.setLayout(new Layout().setSize(["90%", "90%"]))
|
|
139
|
+
.addControls([
|
|
140
|
+
new Panel("label_text_panel").setLayout(new Layout().setSize([32, 8]).setAnchorFrom("bottom_middle")
|
|
141
|
+
.setAnchorTo("bottom_middle")).addControl(new Label("page_content").setText(new Text().setText("#form_text").setColor([0, 0, 0]))),
|
|
142
|
+
...this.#bindingList.map(({ page_name, left_control_name, right_control_name }, index) => {
|
|
143
|
+
return new UIElement(`page_index_${index}`, undefined, "page_template")
|
|
144
|
+
.addVariable("binding_text", page_name)
|
|
145
|
+
.addVariable("page_left_content", left_control_name)
|
|
146
|
+
.addVariable("page_right_content", right_control_name);
|
|
147
|
+
})
|
|
148
|
+
/*
|
|
149
|
+
new UIElement("page_1",undefined,"page_template")
|
|
150
|
+
.addVariable("binding_text","page_index1")
|
|
151
|
+
.addVariable("page_left_content","page_left_content")
|
|
152
|
+
.addVariable("page_right_content","page_right_content"),
|
|
153
|
+
new UIElement("page_2",undefined,"page_template")
|
|
154
|
+
.addVariable("binding_text","page_index2")
|
|
155
|
+
.addVariable("page_left_content","page_left_content")
|
|
156
|
+
.addVariable("page_right_content","page_right_content"),
|
|
157
|
+
new UIElement("page_3",undefined,"page_template")
|
|
158
|
+
.addVariable("binding_text","page_index3")
|
|
159
|
+
.addVariable("page_left_content","page_left_content")
|
|
160
|
+
.addVariable("page_right_content","page_right_content")*/
|
|
161
|
+
]),
|
|
162
|
+
//添加关闭按钮
|
|
163
|
+
new Button("close_button").setLayout(new Layout().setSize([14, 14])
|
|
164
|
+
.setAnchorFrom("top_right")
|
|
165
|
+
.setAnchorTo("top_right"))
|
|
166
|
+
.setInput(new Input().setButtonMappings([
|
|
167
|
+
new ButtonMapping().setMappingType("pressed")
|
|
168
|
+
.setFromButtonId("button.menu_select")
|
|
169
|
+
.setToButtonId("button.menu_exit")
|
|
170
|
+
]))
|
|
171
|
+
.addControls([
|
|
172
|
+
new UIElement("default", undefined, "book.close_button_default"),
|
|
173
|
+
new UIElement("hover", undefined, "book.close_button_hover"),
|
|
174
|
+
new UIElement("pressed", undefined, "book.close_button_pressed"),
|
|
175
|
+
]),
|
|
176
|
+
//添加下一页按钮
|
|
177
|
+
new Panel("prev_button_panel").enableDebug()
|
|
178
|
+
.setControl(new Control().setLayer(5))
|
|
179
|
+
.setLayout(new Layout().setSize([24, 24])
|
|
180
|
+
.setOffset([7, -9])
|
|
181
|
+
.setAnchorFrom("bottom_left")
|
|
182
|
+
.setAnchorTo("bottom_left"))
|
|
183
|
+
.addControl(new UIElement("prev_button", undefined, "form_button_factory")
|
|
184
|
+
.addVariable("binding_button_text", "test1")
|
|
185
|
+
.addVariable("button_control", `${this.system.namespace}.form_button_template`)
|
|
186
|
+
.addVariable("pressed_button_name", "button.form_button_click")
|
|
187
|
+
.addVariable("default_texture", "textures/ui/book_pageleft_default")
|
|
188
|
+
.addVariable("hover_texture", "textures/ui/book_pageleft_hover")
|
|
189
|
+
.addVariable("pressed_texture", "textures/ui/book_pageleft_pressed")),
|
|
190
|
+
new Panel("next_button_panel").enableDebug()
|
|
191
|
+
.setControl(new Control().setLayer(5))
|
|
192
|
+
.setLayout(new Layout().setSize([24, 24])
|
|
193
|
+
.setOffset([-7, -9])
|
|
194
|
+
.setAnchorFrom("bottom_right")
|
|
195
|
+
.setAnchorTo("bottom_right"))
|
|
196
|
+
.addControl(new UIElement("next_button", undefined, "form_button_factory")
|
|
197
|
+
.addVariable("binding_button_text", "test2")
|
|
198
|
+
.addVariable("button_control", "sapdon_guidebook.form_button_template")
|
|
199
|
+
.addVariable("pressed_button_name", "button.form_button_click")
|
|
200
|
+
.addVariable("default_texture", "textures/ui/book_pageright_default")
|
|
201
|
+
.addVariable("hover_texture", "textures/ui/book_pageright_hover")
|
|
202
|
+
.addVariable("pressed_texture", "textures/ui/book_pageright_pressed"))
|
|
203
|
+
]);
|
|
204
|
+
this.addElement(guidebook_root_panel);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const ServerFormSystem: UISystem;
|
|
2
|
+
export const form_button_panel: Panel;
|
|
3
|
+
export class ServerUISystem {
|
|
4
|
+
static "__#4@#binding_map": Map<any, any>;
|
|
5
|
+
static "__#4@#binding_title_list": any[];
|
|
6
|
+
static addBindingTitle(title_name: any): void;
|
|
7
|
+
static getBindingTitleList(): any[];
|
|
8
|
+
static getBindingContentList(): any[];
|
|
9
|
+
static bindingTitlewithContent(title_name: any, content: any): void;
|
|
10
|
+
static "__#4@#updateServerFormSystem"(): void;
|
|
11
|
+
}
|
|
12
|
+
import { UISystem } from "./system.js";
|
|
13
|
+
import { Panel } from "../elements/panel.js";
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { Modifications, UIElement } from "../elements/uiElement.js";
|
|
2
|
+
import { DataBindingObject } from "../dataBindingObject.js";
|
|
3
|
+
import { UISystem } from "./system.js";
|
|
4
|
+
import { Panel } from "../elements/panel.js";
|
|
5
|
+
import { Button } from "../elements/button.js";
|
|
6
|
+
import { Image } from "../elements/image.js";
|
|
7
|
+
import { Sprite } from "../properties/sprite.js";
|
|
8
|
+
export const ServerFormSystem = new UISystem("server_form:server_form", "ui/");
|
|
9
|
+
//表单按钮模板
|
|
10
|
+
const form_button_template = new Button("sapdon_form_button_template", "common.button");
|
|
11
|
+
form_button_template.addVariable("pressed_button_name", "button.form_button_click");
|
|
12
|
+
form_button_template.addVariable("default_texture|default", "textures/gui/newgui/buttons/borderless/light");
|
|
13
|
+
form_button_template.addVariable("hover_texture|default", "textures/gui/newgui/buttons/borderless/lighthover");
|
|
14
|
+
form_button_template.addVariable("pressed_texture|default", "textures/gui/newgui/buttons/borderless/lightpressed");
|
|
15
|
+
form_button_template.addVariable("binding_button_text|default", "");
|
|
16
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection_details")
|
|
17
|
+
.setBindingCollectionName("form_buttons"));
|
|
18
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection")
|
|
19
|
+
.setBindingCollectionName("form_buttons")
|
|
20
|
+
.setBindingName("#form_button_text"));
|
|
21
|
+
form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
|
|
22
|
+
.setSourcePropertyName("($binding_button_text = #form_button_text)")
|
|
23
|
+
.setTargetPropertyName("#visible"));
|
|
24
|
+
form_button_template.addControls([
|
|
25
|
+
new Image("default").setSprite(new Sprite().setTexture("$default_texture")),
|
|
26
|
+
new Image("hover").setSprite(new Sprite().setTexture("$hover_texture")),
|
|
27
|
+
new Image("pressed").setSprite(new Sprite().setTexture("$pressed_texture"))
|
|
28
|
+
]);
|
|
29
|
+
//f
|
|
30
|
+
export const form_button_panel = new Panel("sapdon_form_button_factory");
|
|
31
|
+
form_button_panel.addProp("type", "collection_panel");
|
|
32
|
+
form_button_panel.factory.setName("buttons").setControlName("sapdon_form_button_template");
|
|
33
|
+
form_button_panel.addProp("collection_name", "form_buttons");
|
|
34
|
+
form_button_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#form_button_length")
|
|
35
|
+
.setBindingNameOverride("#collection_length"));
|
|
36
|
+
ServerFormSystem.addElement(form_button_template);
|
|
37
|
+
ServerFormSystem.addElement(form_button_panel);
|
|
38
|
+
export class ServerUISystem {
|
|
39
|
+
static #binding_map = new Map();
|
|
40
|
+
static #binding_title_list = [];
|
|
41
|
+
static addBindingTitle(title_name) {
|
|
42
|
+
this.#binding_title_list.push(title_name);
|
|
43
|
+
}
|
|
44
|
+
static getBindingTitleList() {
|
|
45
|
+
//console.log("arrr:",Array.from(this.#binding_map.keys()))
|
|
46
|
+
return this.#binding_title_list.concat(Array.from(this.#binding_map.keys()));
|
|
47
|
+
}
|
|
48
|
+
static getBindingContentList() {
|
|
49
|
+
return Array.from(this.#binding_map.values());
|
|
50
|
+
}
|
|
51
|
+
static bindingTitlewithContent(title_name, content) {
|
|
52
|
+
//添加绑定
|
|
53
|
+
this.#binding_map.set(title_name, content);
|
|
54
|
+
this.#updateServerFormSystem();
|
|
55
|
+
}
|
|
56
|
+
static #updateServerFormSystem() {
|
|
57
|
+
//文本化处理
|
|
58
|
+
//console.log("ttttt:",this.getBindingTitleList())
|
|
59
|
+
const user_custom_ui_text = this.getBindingTitleList().map((title_name) => {
|
|
60
|
+
console.log("title_name", title_name);
|
|
61
|
+
return `'${title_name}'`;
|
|
62
|
+
}).join('-');
|
|
63
|
+
const long_form = new UIElement("long_form")
|
|
64
|
+
.addModification({
|
|
65
|
+
array_name: "bindings",
|
|
66
|
+
operation: Modifications.OPERATION.INSERT_BACK,
|
|
67
|
+
value: [
|
|
68
|
+
new DataBindingObject().setBindingName("#title_text"),
|
|
69
|
+
new DataBindingObject().setBindingType("view")
|
|
70
|
+
.setSourcePropertyName(`((#title_text - ${user_custom_ui_text}) = #title_text)`)
|
|
71
|
+
.setTargetPropertyName("#visible")
|
|
72
|
+
]
|
|
73
|
+
});
|
|
74
|
+
const custom_server_form_factory = new Panel("custom_server_form_factory");
|
|
75
|
+
custom_server_form_factory.factory.setName("server_form_factory") //工程名被绑定至表单,不可改动
|
|
76
|
+
.setControlIds({ "long_form": "@server_form.custom_root_panel" });
|
|
77
|
+
//加入自定义表单内容
|
|
78
|
+
const main_screen_content = new UIElement("main_screen_content")
|
|
79
|
+
.addModification({
|
|
80
|
+
array_name: "controls",
|
|
81
|
+
operation: Modifications.OPERATION.INSERT_BACK,
|
|
82
|
+
value: [
|
|
83
|
+
custom_server_form_factory.serialize()
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
//自定义ui模板
|
|
87
|
+
const custom_ui_template = new Panel("custom_ui_template");
|
|
88
|
+
custom_ui_template.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#title_text")).addDataBinding(new DataBindingObject().setBindingType("view")
|
|
89
|
+
.setSourcePropertyName("(#title_text = $binding_text)")
|
|
90
|
+
.setTargetPropertyName("#visible"));
|
|
91
|
+
custom_ui_template.control.addControl(new UIElement("main", undefined, "$main_content").serialize());
|
|
92
|
+
//类似于 root ,决定什么时候加载自定义界面 ,不可改动
|
|
93
|
+
const custom_form_root = new Panel("custom_form_root");
|
|
94
|
+
//custom_form_root.addVariable("title_needs_to_contain",user_custom_ui_text)
|
|
95
|
+
custom_form_root.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
|
|
96
|
+
.setSourceControlName("custom_root_panel")
|
|
97
|
+
.setSourcePropertyName(`(not ((#title_text - ${user_custom_ui_text}) = #title_text))`)
|
|
98
|
+
.setTargetPropertyName("#visible"));
|
|
99
|
+
//用户自定义ui内容绑定
|
|
100
|
+
this.#binding_map.forEach((content, key) => {
|
|
101
|
+
//加入 root
|
|
102
|
+
custom_form_root.control.addControl(new UIElement("custom_ui_" + key, undefined, "custom_ui_template")
|
|
103
|
+
.addVariable("main_content", content)
|
|
104
|
+
.addVariable("binding_text", key).serialize());
|
|
105
|
+
});
|
|
106
|
+
//类似于 sreen,必要,不可改动
|
|
107
|
+
const custom_root_panel = new Panel("custom_root_panel");
|
|
108
|
+
custom_root_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#title_text"));
|
|
109
|
+
custom_root_panel.control.addControl(custom_form_root.serialize());
|
|
110
|
+
ServerFormSystem
|
|
111
|
+
.addElement(custom_ui_template)
|
|
112
|
+
.addElement(long_form)
|
|
113
|
+
.addElement(custom_root_panel)
|
|
114
|
+
.addElement(main_screen_content);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class UISystem {
|
|
2
|
+
constructor(identifier: any, path: any);
|
|
3
|
+
identifier: any;
|
|
4
|
+
namespace: any;
|
|
5
|
+
name: any;
|
|
6
|
+
path: any;
|
|
7
|
+
elements: Map<any, any>;
|
|
8
|
+
animations: Map<any, any>;
|
|
9
|
+
addElement(element: any): this;
|
|
10
|
+
getElement(element_name: any): any;
|
|
11
|
+
addAnimation(name: any, value: any): void;
|
|
12
|
+
getAnimation(animation_name: any): any;
|
|
13
|
+
toJson(): {
|
|
14
|
+
namespace: any;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { UISystemRegistry } from "../registry/uiSystemRegistry.js";
|
|
2
|
+
// UI 文件核心类
|
|
3
|
+
export class UISystem {
|
|
4
|
+
constructor(identifier, path) {
|
|
5
|
+
this.identifier = identifier;
|
|
6
|
+
this.namespace = identifier.split(':')[0];
|
|
7
|
+
this.name = identifier.split(':')[1];
|
|
8
|
+
this.path = path;
|
|
9
|
+
this.elements = new Map();
|
|
10
|
+
this.animations = new Map();
|
|
11
|
+
UISystemRegistry.registerUISystem(this);
|
|
12
|
+
}
|
|
13
|
+
addElement(element) {
|
|
14
|
+
this.elements.set(element.id, element);
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
getElement(element_name) {
|
|
18
|
+
return this.elements.get(element_name);
|
|
19
|
+
}
|
|
20
|
+
addAnimation(name, value) {
|
|
21
|
+
this.animations.set(name, value);
|
|
22
|
+
}
|
|
23
|
+
getAnimation(animation_name) {
|
|
24
|
+
return this.animations.get(animation_name);
|
|
25
|
+
}
|
|
26
|
+
toJson() {
|
|
27
|
+
const ui = { namespace: this.namespace };
|
|
28
|
+
//序列化
|
|
29
|
+
this.elements.forEach((value, key) => {
|
|
30
|
+
//console.log("elements key:",key)
|
|
31
|
+
//console.log("elements value:",value);
|
|
32
|
+
ui[key] = value.serialize()[value.id];
|
|
33
|
+
});
|
|
34
|
+
//console.log("ui:",ui)
|
|
35
|
+
return ui;
|
|
36
|
+
}
|
|
37
|
+
}
|
package/dist/oc/actor.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export class Actor {
|
|
2
|
+
target;
|
|
3
|
+
manager;
|
|
4
|
+
constructor(target, manager) {
|
|
5
|
+
this.target = target;
|
|
6
|
+
this.manager = manager;
|
|
7
|
+
}
|
|
8
|
+
static from(target, manager) {
|
|
9
|
+
return new Actor(target, manager);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 优先使用 `Actor.getComponent`
|
|
13
|
+
* @param ctors
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
getMinecraftComponent(...ids) {
|
|
17
|
+
return ids.map(id => this.target.getComponent(id));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 优先使用 `Actor.getComponent`
|
|
21
|
+
* @param ctors
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
getCustomComponent(...ctors) {
|
|
25
|
+
return this.manager.getComponents(...ctors);
|
|
26
|
+
}
|
|
27
|
+
getComponent(...descs) {
|
|
28
|
+
return descs.map(desc => {
|
|
29
|
+
if (typeof desc === 'string') {
|
|
30
|
+
return this.target.getComponent(desc);
|
|
31
|
+
}
|
|
32
|
+
return this.manager.getComponentUnsafe(desc);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
addComponent(...components) {
|
|
36
|
+
return this.manager.attachComponent(...components);
|
|
37
|
+
}
|
|
38
|
+
removeComponent(ctor) {
|
|
39
|
+
return this.manager.detachComponent(ctor);
|
|
40
|
+
}
|
|
41
|
+
updateComponent(ctor, fn) {
|
|
42
|
+
return this.manager.update(ctor, fn);
|
|
43
|
+
}
|
|
44
|
+
}
|
package/dist/oc/core.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { system, world } from '@minecraft/server';
|
|
2
|
+
import { Optional } from './optional.js';
|
|
3
|
+
const REFLECT_MANAGER = Symbol('reflect-manager');
|
|
4
|
+
const REFLECT_ENTITY = Symbol('reflect-entity');
|
|
5
|
+
export class CustomComponent {
|
|
6
|
+
[REFLECT_MANAGER];
|
|
7
|
+
[REFLECT_ENTITY] = Optional.none();
|
|
8
|
+
onTick(manager, en) { }
|
|
9
|
+
detach(manager) {
|
|
10
|
+
const ctor = Object.getPrototypeOf(this).constructor;
|
|
11
|
+
return manager.detachComponent(ctor);
|
|
12
|
+
}
|
|
13
|
+
getManager() {
|
|
14
|
+
return this[REFLECT_MANAGER];
|
|
15
|
+
}
|
|
16
|
+
getEntity() {
|
|
17
|
+
return this[REFLECT_ENTITY];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class BaseComponent extends CustomComponent {
|
|
21
|
+
onAttach(manager) { }
|
|
22
|
+
onDetach(manager) { }
|
|
23
|
+
}
|
|
24
|
+
export class ComponentManager {
|
|
25
|
+
static profilerEnable = false;
|
|
26
|
+
static global = new ComponentManager();
|
|
27
|
+
#components = new Map();
|
|
28
|
+
#prependTicks = [];
|
|
29
|
+
#nextTicks = [];
|
|
30
|
+
getComponentUnsafe(ctor) {
|
|
31
|
+
return this.#components.get(ctor);
|
|
32
|
+
}
|
|
33
|
+
getComponent(ctor) {
|
|
34
|
+
return Optional.some(this.#components.get(ctor));
|
|
35
|
+
}
|
|
36
|
+
getComponents(...ctor) {
|
|
37
|
+
return ctor.map(c => this.#components.get(c));
|
|
38
|
+
}
|
|
39
|
+
async #attachComponent(ctor, component, shouldRebuild = true) {
|
|
40
|
+
let init = !this.#components.get(ctor);
|
|
41
|
+
if (!init && shouldRebuild) {
|
|
42
|
+
await this.detachComponent(ctor);
|
|
43
|
+
init = true;
|
|
44
|
+
}
|
|
45
|
+
if (REQUIRED_COMPONENTS in component) {
|
|
46
|
+
//@ts-ignore
|
|
47
|
+
for (const [ctor, comp] of component[REQUIRED_COMPONENTS]) {
|
|
48
|
+
this.#attachComponent(ctor, comp, false);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (init && 'onAttach' in component) {
|
|
52
|
+
await component.onAttach(this);
|
|
53
|
+
}
|
|
54
|
+
this.#components.set(ctor, component);
|
|
55
|
+
return Optional.some(component);
|
|
56
|
+
}
|
|
57
|
+
async attachComponent(...component) {
|
|
58
|
+
const components = [];
|
|
59
|
+
for (const obj of component) {
|
|
60
|
+
components.push(await this.#attachComponent(Object.getPrototypeOf(obj).constructor, obj));
|
|
61
|
+
}
|
|
62
|
+
return components;
|
|
63
|
+
}
|
|
64
|
+
async getOrCreate(ctor, ...args) {
|
|
65
|
+
let component = this.#components.get(ctor);
|
|
66
|
+
if (component) {
|
|
67
|
+
return Optional.some(component);
|
|
68
|
+
}
|
|
69
|
+
return this.#attachComponent(ctor, new ctor(...args));
|
|
70
|
+
}
|
|
71
|
+
async detachComponent(ctor) {
|
|
72
|
+
const component = this.#components.get(ctor);
|
|
73
|
+
if (component && 'onDetach' in component) {
|
|
74
|
+
await component.onDetach(this);
|
|
75
|
+
}
|
|
76
|
+
return this.#components.delete(ctor);
|
|
77
|
+
}
|
|
78
|
+
clear() {
|
|
79
|
+
this.#components.clear();
|
|
80
|
+
}
|
|
81
|
+
getComponentKeys() {
|
|
82
|
+
return this.#components.keys();
|
|
83
|
+
}
|
|
84
|
+
has(ctor) {
|
|
85
|
+
return this.#components.has(ctor);
|
|
86
|
+
}
|
|
87
|
+
afterTick(fn) {
|
|
88
|
+
this.#nextTicks.push(fn);
|
|
89
|
+
}
|
|
90
|
+
beforeTick(fn) {
|
|
91
|
+
this.#prependTicks.unshift(fn);
|
|
92
|
+
}
|
|
93
|
+
handleTicks(en) {
|
|
94
|
+
for (const prependTick of this.#prependTicks) {
|
|
95
|
+
this.profiler(() => prependTick.call(null, Optional.some(en)));
|
|
96
|
+
// prependTick.call(null, Optional.some(en))
|
|
97
|
+
}
|
|
98
|
+
this.#prependTicks.length = 0;
|
|
99
|
+
for (const component of this.#components.values()) {
|
|
100
|
+
//@ts-ignore
|
|
101
|
+
if (!component[REFLECT_ENTITY]) {
|
|
102
|
+
//@ts-ignore
|
|
103
|
+
component[REFLECT_ENTITY] = Optional.some(en);
|
|
104
|
+
}
|
|
105
|
+
//@ts-ignore
|
|
106
|
+
if (!component[REFLECT_MANAGER]) {
|
|
107
|
+
//@ts-ignore
|
|
108
|
+
component[REFLECT_MANAGER] = this;
|
|
109
|
+
}
|
|
110
|
+
const { onTick } = component;
|
|
111
|
+
if (onTick) {
|
|
112
|
+
this.profiler(() => onTick.call(component, this, Optional.some(en)), component);
|
|
113
|
+
// onTick.call(component, this, Optional.some(en))
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (const afterTick of this.#nextTicks) {
|
|
117
|
+
this.profiler(() => afterTick.call(null, Optional.some(en)));
|
|
118
|
+
// afterTick.call(null, Optional.some(en))
|
|
119
|
+
}
|
|
120
|
+
this.#nextTicks.length = 0;
|
|
121
|
+
}
|
|
122
|
+
update(ctor, fn) {
|
|
123
|
+
const component = this.#components.get(ctor);
|
|
124
|
+
if (component) {
|
|
125
|
+
fn(component);
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
profiler(fn, component, name) {
|
|
131
|
+
if (!ComponentManager.profilerEnable) {
|
|
132
|
+
return fn();
|
|
133
|
+
}
|
|
134
|
+
const conponentName = component ? Object.getPrototypeOf(component).constructor.name : '';
|
|
135
|
+
const profileName = name ? name
|
|
136
|
+
: conponentName ? (`${conponentName}.${fn.name}`)
|
|
137
|
+
: fn.name;
|
|
138
|
+
const now = performance.now();
|
|
139
|
+
const val = fn();
|
|
140
|
+
console.log(`[Profiler] ${profileName} took ${performance.now() - now}ms`);
|
|
141
|
+
return val;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const REQUIRED_COMPONENTS = Symbol('REQUIRED_COMPONENTS');
|
|
145
|
+
export function RequireComponents(...params) {
|
|
146
|
+
return class CRequiredComponent extends BaseComponent {
|
|
147
|
+
[REQUIRED_COMPONENTS] = new Map();
|
|
148
|
+
constructor() {
|
|
149
|
+
super();
|
|
150
|
+
for (const param of params) {
|
|
151
|
+
if (Array.isArray(param)) {
|
|
152
|
+
const [Ctor, ...args] = param;
|
|
153
|
+
this[REQUIRED_COMPONENTS].set(Ctor, Reflect.construct(Ctor, args));
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
this[REQUIRED_COMPONENTS].set(param, Reflect.construct(param, []));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
getComponent(ctor) {
|
|
160
|
+
return this[REQUIRED_COMPONENTS].get(ctor);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export var oc;
|
|
165
|
+
(function (oc) {
|
|
166
|
+
const table = new Map();
|
|
167
|
+
function addEntity(entityId) {
|
|
168
|
+
const manager = new ComponentManager();
|
|
169
|
+
table.set(entityId, manager);
|
|
170
|
+
return manager;
|
|
171
|
+
}
|
|
172
|
+
oc.addEntity = addEntity;
|
|
173
|
+
function removeEntity(entityId) {
|
|
174
|
+
const uid = entityId;
|
|
175
|
+
const manager = table.get(uid);
|
|
176
|
+
manager?.clear();
|
|
177
|
+
table.delete(uid);
|
|
178
|
+
}
|
|
179
|
+
oc.removeEntity = removeEntity;
|
|
180
|
+
function getManager(entityId) {
|
|
181
|
+
return table.get(entityId) ?? addEntity(entityId);
|
|
182
|
+
}
|
|
183
|
+
oc.getManager = getManager;
|
|
184
|
+
function tick() {
|
|
185
|
+
for (const [id, manager] of table.entries()) {
|
|
186
|
+
const entity = world.getEntity(id);
|
|
187
|
+
if (entity) {
|
|
188
|
+
manager.handleTicks(entity);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
oc.tick = tick;
|
|
193
|
+
function start() {
|
|
194
|
+
system.runInterval(tick);
|
|
195
|
+
}
|
|
196
|
+
oc.start = start;
|
|
197
|
+
function toPlayer(entity) {
|
|
198
|
+
return Optional.some(world.getAllPlayers().find(p => p.id === entity.id));
|
|
199
|
+
}
|
|
200
|
+
oc.toPlayer = toPlayer;
|
|
201
|
+
})(oc || (oc = {}));
|