This commit is contained in:
sli97 2023-10-08 01:23:11 +08:00
parent fa6639356a
commit 3ff8955095
14 changed files with 191 additions and 81 deletions

View File

@ -345,6 +345,9 @@ const component = lib_1.Vue.extend({
this.assets = assets.map(({ name, source, file }) => ({ name, url: source, file: file, content: "" }));
},
async initSelection() {
// 切换节点时清空全局数据
selectedBoxes = [];
SAVE_DEBOUNCE_TIMER = null;
// 找到当前选中的节点
const node = await Editor.Message.request("scene", "query-node", Editor.Selection.getSelected("node"));
// 未选中节点或者选中的是场景节点(场景节点不能添加组件)

View File

@ -0,0 +1,47 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const decorator_1 = require("../../core/decorator");
let RandomSelector = class RandomSelector extends index_1.Composite {
constructor() {
super(...arguments);
this.executionOrder = [];
}
get index() {
return this.executionOrder[this.executionOrder.length - 1];
}
onStart() {
super.onStart();
this.shuffle();
}
canExecute() {
return Boolean(this.executionOrder.length) && this.status !== index_1.NodeStatus.Success;
}
onChildExecuted(status, _) {
this.executionOrder.pop();
this.status = status;
}
onConditionalAbort() {
this.executionOrder = [];
this.status = index_1.NodeStatus.Inactive;
this.shuffle();
}
shuffle() {
this.executionOrder = [];
const indexList = Array.from({ length: this.children.length }, (e, i) => i);
for (let i = indexList.length - 1; i >= 0; i--) {
const num = Math.floor(Math.random() * indexList.length);
this.executionOrder.push(indexList.splice(num, 1)[0]);
}
}
};
RandomSelector = __decorate([
(0, decorator_1.btclass)("RandomSelector")
], RandomSelector);
exports.default = RandomSelector;

View File

@ -0,0 +1,64 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_1 = require("../index");
const decorator_1 = require("../../core/decorator");
let RandomSequence = class RandomSequence extends index_1.Composite {
constructor() {
super(...arguments);
this.executionOrder = [];
}
get index() {
return this.executionOrder[this.executionOrder.length - 1];
}
onStart() {
super.onStart();
this.shuffle();
}
canExecute() {
return Boolean(this.executionOrder.length) && this.status !== index_1.NodeStatus.Failure;
}
onChildExecuted(status, _) {
switch (status) {
case index_1.NodeStatus.Success:
this.executionOrder.pop();
if (this.executionOrder.length <= 0) {
this.status = index_1.NodeStatus.Success;
}
else {
this.status = index_1.NodeStatus.Running;
}
break;
case index_1.NodeStatus.Failure:
this.status = index_1.NodeStatus.Failure;
break;
case index_1.NodeStatus.Running:
this.status = index_1.NodeStatus.Running;
break;
default:
break;
}
}
onConditionalAbort() {
this.executionOrder = [];
this.status = index_1.NodeStatus.Inactive;
this.shuffle();
}
shuffle() {
this.executionOrder = [];
const indexList = Array.from({ length: this.children.length }, (e, i) => i);
for (let i = indexList.length - 1; i >= 0; i--) {
const num = Math.floor(Math.random() * indexList.length);
this.executionOrder.push(indexList.splice(num, 1)[0]);
}
}
};
RandomSequence = __decorate([
(0, decorator_1.btclass)("RandomSequence")
], RandomSequence);
exports.default = RandomSequence;

View File

@ -24,25 +24,8 @@ let RandomSequence = class RandomSequence extends index_1.Composite {
return Boolean(this.executionOrder.length) && this.status !== index_1.NodeStatus.Failure;
}
onChildExecuted(status, _) {
switch (status) {
case index_1.NodeStatus.Success:
this.executionOrder.pop();
if (this.executionOrder.length <= 0) {
this.status = index_1.NodeStatus.Success;
}
else {
this.status = index_1.NodeStatus.Running;
}
break;
case index_1.NodeStatus.Failure:
this.status = index_1.NodeStatus.Failure;
break;
case index_1.NodeStatus.Running:
this.status = index_1.NodeStatus.Running;
break;
default:
break;
}
this.status = status;
}
onConditionalAbort() {
this.executionOrder = [];

View File

@ -17,25 +17,8 @@ let Sequence = class Sequence extends index_1.Composite {
return this.index < this.children.length && this.status !== index_1.NodeStatus.Failure;
}
onChildExecuted(status, _) {
switch (status) {
case index_1.NodeStatus.Success:
this.index++;
if (this.index >= this.children.length) {
this.status = index_1.NodeStatus.Success;
}
else {
this.status = index_1.NodeStatus.Running;
}
break;
case index_1.NodeStatus.Failure:
this.status = index_1.NodeStatus.Failure;
break;
case index_1.NodeStatus.Running:
this.status = index_1.NodeStatus.Running;
break;
default:
break;
}
this.status = status;
}
onConditionalAbort(index) {
this.index = index;

View File

@ -18,3 +18,4 @@ __exportStar(require("./Sequence"), exports);
__exportStar(require("./Selector"), exports);
__exportStar(require("./Parallel"), exports);
__exportStar(require("./RandomSequence"), exports);
__exportStar(require("./RandomSelector"), exports);

View File

@ -377,6 +377,9 @@ const component = Vue.extend({
this.assets = assets.map(({ name, source, file }) => ({ name, url: source, file: file, content: "" }));
},
async initSelection() {
// 切换节点时清空全局数据
selectedBoxes = [];
SAVE_DEBOUNCE_TIMER = null;
// 找到当前选中的节点
const node = await Editor.Message.request("scene", "query-node", Editor.Selection.getSelected("node"));

View File

@ -50,7 +50,7 @@ ui-prop[no-label] {
overflow: auto;
}
.fix-left {
.fix-left-top {
position: absolute;
left: 14px;
top: 14px;
@ -58,21 +58,28 @@ ui-prop[no-label] {
display: flex;
}
.fix-right {
.fix-right-top {
position: absolute;
right: 14px;
right: 20px;
top: 14px;
z-index: 1;
display: flex;
}
.fix-bottom {
.fix-left-bottom {
position: absolute;
left: 14px;
bottom: 24px;
z-index: 1;
}
.fix-right-bottom {
position: absolute;
right: 20px;
bottom: 24px;
z-index: 1;
}
.fix-bottom ui-button {
padding: 0 12px;
}

View File

@ -4,23 +4,24 @@
<div class="scroll" ref="scroll">
<div id="tree" ref="tree" />
</div>
<div class="fix-left">
<div class="fix-left-top">
<div class="log">
<ui-section header="Logs" class="config" expand>
<div v-for="log of logs" :key="log.id">{{log.content}}</div>
</ui-section>
</div>
</div>
<div class="fix-right">
<div class="fix-right-top">
<div class="asset" v-if="currentAsset">
<ui-select :value="currentAsset.url" @change="handleSelectAsset($event.target.value)">
<option v-for="(asset,index) of assets" :value="asset.url" :key="asset.url">{{ asset.name }}</option>
</ui-select>
</div>
</div>
<div class="fix-bottom" @click="backRoot">
<div class="fix-left-bottom" @click="backRoot">
<ui-button>Root</ui-button>
</div>
<div class="fix-right-bottom" @click="backRoot">Version 1.0.2</div>
</div>
<div class="right">

View File

@ -0,0 +1,40 @@
import { Composite, NodeStatus } from "../index";
import { btclass } from "../../core/decorator";
@btclass("RandomSelector")
export default class RandomSelector extends Composite {
executionOrder: Array<number> = [];
get index() {
return this.executionOrder[this.executionOrder.length - 1];
}
onStart(): void {
super.onStart();
this.shuffle();
}
canExecute(): boolean {
return Boolean(this.executionOrder.length) && this.status !== NodeStatus.Success;
}
onChildExecuted(status: NodeStatus, _: number): void {
this.executionOrder.pop();
this.status = status;
}
onConditionalAbort() {
this.executionOrder = [];
this.status = NodeStatus.Inactive;
this.shuffle();
}
shuffle() {
this.executionOrder = [];
const indexList = Array.from({ length: this.children.length }, (e, i) => i);
for (let i = indexList.length - 1; i >= 0; i--) {
const num = Math.floor(Math.random() * indexList.length);
this.executionOrder.push(indexList.splice(num, 1)[0]);
}
}
}

View File

@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "ff11c9ef-38fb-430b-96c6-398bea66af98",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@ -19,24 +19,8 @@ export default class RandomSequence extends Composite {
}
onChildExecuted(status: NodeStatus, _: number): void {
switch (status) {
case NodeStatus.Success:
this.executionOrder.pop();
if (this.executionOrder.length <= 0) {
this.status = NodeStatus.Success;
} else {
this.status = NodeStatus.Running;
}
break;
case NodeStatus.Failure:
this.status = NodeStatus.Failure;
break;
case NodeStatus.Running:
this.status = NodeStatus.Running;
break;
default:
break;
}
this.status = status;
}
onConditionalAbort() {

View File

@ -13,24 +13,8 @@ export default class Sequence extends Composite {
}
onChildExecuted(status: NodeStatus, _: number): void {
switch (status) {
case NodeStatus.Success:
this.index++;
if (this.index >= this.children.length) {
this.status = NodeStatus.Success;
} else {
this.status = NodeStatus.Running;
}
break;
case NodeStatus.Failure:
this.status = NodeStatus.Failure;
break;
case NodeStatus.Running:
this.status = NodeStatus.Running;
break;
default:
break;
}
this.status = status;
}
onConditionalAbort(index: number) {

View File

@ -2,3 +2,4 @@ export * from "./Sequence";
export * from "./Selector";
export * from "./Parallel";
export * from "./RandomSequence";
export * from "./RandomSelector";