Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
racerun
TypeScript
提交
8f3260bb
T
TypeScript
项目概览
racerun
/
TypeScript
与 Fork 源项目一致
Fork自
inscode / TypeScript
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TypeScript
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8f3260bb
编写于
8月 13, 2024
作者:
R
racerun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Auto Commit
上级
8abd2472
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
106 addition
and
1 deletion
+106
-1
.inscode
.inscode
+4
-0
index.ts
index.ts
+102
-1
未找到文件。
.inscode
浏览文件 @
8f3260bb
run = "node --enable-source-maps .build/index.js"
run = "node --enable-source-maps .build/index.js"
language = "node"
[env]
[env]
PATH = "/root/${PROJECT_DIR}/.config/npm/node_global/bin:/root/${PROJECT_DIR}/node_modules/.bin:${PATH}"
PATH = "/root/${PROJECT_DIR}/.config/npm/node_global/bin:/root/${PROJECT_DIR}/node_modules/.bin:${PATH}"
XDG_CONFIG_HOME = "/root/.config"
XDG_CONFIG_HOME = "/root/.config"
npm_config_prefix = "/root/${PROJECT_DIR}/.config/npm/node_global"
npm_config_prefix = "/root/${PROJECT_DIR}/.config/npm/node_global"
[debugger]
program = "main.js"
index.ts
浏览文件 @
8f3260bb
const
s
:
string
=
"
欢迎来到 InsCode
"
;
const
s
:
string
=
"
欢迎来到 InsCode
"
;
console
.
log
(
s
);
interface
FSMNode
{
enter
():
void
;
exit
():
void
;
tick
(
interval
:
number
):
void
;
release
?():
void
;
// 可选方法,用于释放资源
}
class
StateA
implements
FSMNode
{
enter
()
{
console
.
log
(
"
Entered State A
"
);
}
exit
()
{
console
.
log
(
"
Exited State A
"
);
}
tick
(
interval
:
number
)
{
console
.
log
(
`State A ticked with interval
${
interval
}
`
);
}
// 假设StateA不需要释放资源
}
class
StateB
implements
FSMNode
{
enter
()
{
console
.
log
(
"
Entered State B
"
);
}
exit
()
{
console
.
log
(
"
Exited State B
"
);
}
tick
(
interval
:
number
)
{
console
.
log
(
`State B ticked with interval
${
interval
}
`
);
}
// 假设StateB也不需要释放资源
}
class
FSMMachine
{
private
currentState
:
FSMNode
|
null
=
null
;
private
states
:
{
[
id
:
string
]:
FSMNode
}
=
{};
addState
(
id
:
string
,
state
:
FSMNode
):
void
{
if
(
this
.
states
[
id
])
{
throw
new
Error
(
`State with ID '
${
id
}
' already exists.`
);
}
this
.
states
[
id
]
=
state
;
}
setInitialState
(
id
:
string
):
void
{
if
(
!
this
.
states
[
id
])
{
throw
new
Error
(
`State with ID '
${
id
}
' does not exist.`
);
}
if
(
this
.
currentState
)
{
this
.
currentState
.
exit
();
}
this
.
currentState
=
this
.
states
[
id
];
this
.
currentState
.
enter
();
}
changeState
(
newId
:
string
):
void
{
if
(
!
this
.
states
[
newId
])
{
throw
new
Error
(
`State with ID '
${
newId
}
' does not exist.`
);
}
if
(
this
.
currentState
)
{
this
.
currentState
.
exit
();
}
this
.
currentState
=
this
.
states
[
newId
];
this
.
currentState
.
enter
();
}
tick
(
interval
:
number
):
void
{
if
(
this
.
currentState
)
{
this
.
currentState
.
tick
(
interval
);
}
}
// 假设FSMMachine不需要一个单独的release方法,因为状态可以在需要时单独释放
}
// 创建状态实例
const
stateA
=
new
StateA
();
const
stateB
=
new
StateB
();
// 创建FSMMachine实例并添加状态
const
fsm
=
new
FSMMachine
();
fsm
.
addState
(
"
A
"
,
stateA
);
fsm
.
addState
(
"
B
"
,
stateB
);
// 设置初始状态
fsm
.
setInitialState
(
"
A
"
);
// 更改状态
fsm
.
changeState
(
"
A
"
);
// 调用tick方法
fsm
.
tick
(
1000
);
// 假设这是以毫秒为单位的间隔
// 如果需要,可以回到状态A
fsm
.
changeState
(
"
A
"
);
fsm
.
tick
(
500
);
// 再次调用tick,这次是在状态A中
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录