npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@tsmugen/core

v3.1.0

Published

ts-mugen运行的核心模块

Downloads

3

Readme

@tsmugen/core 使用文档

目录

介绍

@tsmugen/corets-mugen 框架的核心包,也是您必须要安装的包。

安装

npm:

npm install @tsmugen/core

yarn:

yarn add @tsmugen/core

使用方法

// 实例化 State
const letsStart = new State({
    id: 1000,
    describe: 'Hello World!',
    type: 'S',
    movetype: 'I',
    physics: 'S',
    anim: 0
});

// 为 State 追加控制器
letsStart.appendControllers(function () {
    Null({ triggers: time.equal(0) });
});

// 实例化人物
const character = new Character();

// 人物注入 State
character.injectStates([letsStart]);

// 实例化 mugen 引擎
const mugen = new Mugen();

// mugen 引擎注入人物
mugen.injectCharacter(character);

// 开始构建人物包
mugen.build();

注意:需将所有实例化的 State 合并到同一个数组中,不在该数组中存在的 State 不参与构建。

构建后输出到 bundle.cns 文件中的内容为:

; Hello World!
[Statedef 1000]
type = S
movetype = I
physics = S
anim = 0

[State 1000, ]
type = Null
trigger1 = time = 0

API

Statedef

state 通过钩子函数 useStatedef 在函数内声名。 注意:若您在一个函数多次调用 useStatedef,则后面的声名会覆盖前面的声名。

import { useStatedef, Null, time } from '@tsmugen/core';

function Start() {
    useStatedef({
        // id 为状态号真实值
        id: 1000,
        describe: 'Hello World!',
        type: 'S',
        movetype: 'I',
        physics: 'S',
        anim: 0
    });

    Null({ triggers: time.equal(0) });
}

useStatedef 中可以传入 version 属性。当传入 version 属性时,当且仅当构建时的版本号与 version 一致时,该 State 才会参与构建。

例如:

import { useStatedef, Null, time } from '@tsmugen/core';

function Start() {
    useStatedef({
        id: 1000,
        version: '1.1',
        describe: 'Hello World!',
        type: 'S',
        movetype: 'I',
        physics: 'S',
        anim: 0
    });

    Null({ triggers: time.equal(0) });
}

上述 State 输出的代码仅会出现在 1.1 版本的人物包中。 通过该属性可轻松对 State 进行版本控制。

Helper

const helper = new Helper(1300);
// 输出 helper(1300), animelem = 0
helper.animelem.equal(0);

通过实例化 Helper 声名一个 helper,helper对象内置了所有 MUGEN 全局变量。

Helper 属性

|名称|说明|类型| |---|---|---| |id|helper 的 id|BaseValue| |Create|创建一个 helper,params 为除 id 以外的所有参数集合(您已在实例化时声名了 id,因此无需再次传入)|(params) => void|

Var 与 FVar

ts-mugen 内置了四中变量类:VarFVarHelperVarHelperFVar

其中 HelperVarHelperFVar 为自定义 helper 中使用的变量。

class SuperHelper extends Helper {
    public jiasudu: HelperVar;
    constructor(id: AttrValue) {
        super(id);
        /**
         * @param id helper 的 id
         * @param index 变量索引
         * /
        this.jiasudu = new HelperVar(id, 1);
    }
}

如上您可以通过继承 Helper 类来自定义您自己的 Helper 类,而 HelperVarHelperFVar 便是在这里方便您对变量进行语义化调用的 API。 HelperVarHelperFVar 也仅应用于该场景。

所有变量属性

|名称|说明|类型| |---|---|---| |getIndex|获取变量索引|() => AttrValue| |Set|设置玩家(起作用的)变量(var/fvar)数值|(params) => void| |Add|增加玩家一个(起作用的)变量(var/fvar)数值|(params) => void| |Random|设定指定整型变量为随机数(该方法仅在 VarHelperVar 中存在)|(params) => void|

/**
 * @param index 变量索引
 * @param describe 变量描述
 * /
const AISwitch = new Var(59, 'AI 开关');

实例化 VarFVar 时需要两个参数,必选参数 index (变量索引)与可选参数 describe (变量描述)。 若有 describe 属性,且在 tsmugen.config.js 文件中配置了 buildVariableTable: true,则该变量会在构建人物时输出到变量表中。

Triggers

控制器的触发器。

const triggers = new Triggers();
triggers.appendAnd(time.over(0), time.less(10));
triggers.appendAnd(animelem.equal(5).over(0));

Null({ triggers });
/**
 * 输出以下内容
 * [State 1000, ]
 * type = Null
 * trigger1 = time > 0
 * trigger1 = time < 10
 * trigger2 = animelem = 5, > 0
 * /

Triggers 属性

|名称|说明|类型| |---|---|---| |clear|清空 triggers 内容,便于公用同一变量|() => void| |append|追加【与】关系触发器,同一方法中所有条件均为与运算|(...triggers: AttrValue[]) => this| |add|追加指定索引触发器,同一方法中所有条件均为与运算|(index: number, ...triggers: AttrValue[]) => this| |appendAll|追加 TriggerAll 触发器|(...triggers: AttrValue[]) => this|

Triggers 的钩子函数

|名称|说明|类型| |---|---|---| |useTriggers|创建一个 triggers 实例,仅为对 new Triggers() 的一层封装。|() => Triggers| |createTriggers|牺牲灵活性使编码更加接近原生编码风格的 triggers 实例化函数。|(params: CreateTriggersParams) => Triggers|

原生代码注入

或许你会因为习惯了原生代码的编写方式而对这种编写方式感到厌烦。 不用担心,我为你准备了原生代码注入的功能。 注入方式有两种:

  • 在 state.appendControllers 的函数中随控制器一同注入(主要用于追加原生代码编写的控制器)。
  • 随 states 一同注入(主要用于追加原生代码编写的大量 state)。

在 state.appendControllers 的函数中随控制器一同注入

; 同目录下的 native.cns 文件
[State 1300, 原生注入测试]
type = Null
trigger1 = 1
import { State, Null, time, readFile, NativeCode } from '@tsmugen/core';
import path from 'path';

// 读取原生代码
const code = readFile(path.join(__dirname, './native.cns'));

const state = new State({ id: 1000 });

state.appendControllers(function () {
    Null({ triggers: time.equal(0) });

    // 注入原生代码
    NativeCode(code);
});

随 states 一同注入

; 同目录下的 native.cns 文件
[State 1300, 原生注入测试]
type = Null
trigger1 = 1
import { State, Null, time, readFile, Character, Mugen, NativeStates } from '@tsmugen/core';
import path from 'path';

const letsStart = new State({ id: 1000 });

letsStart.appendControllers(function () {
    Null({ triggers: time.equal(0) });
});

const character = new Character();

// 读取原生代码
const code = readFile(path.join(__dirname, './native.cns'));

character.injectStates([
    letsStart,
    // 在此处随 state 一同注入
    NativeStates(code)
]);

const mugen = new Mugen();
mugen.injectCharacter(character);
mugen.build();

注入 API

NativeCodeNativeStates 的第二个can顺均为可选属性 version,用于区分原生代码参与构建的人物包版本。 若未传 version 则原生代码会参与所有版本的构建。

|名称|说明|类型| |---|---|---| |NativeCode|在 state.appendControllers 中使用的注入函数|(code: string, version?: '1.0' | '1.1') => void| |NativeStates|随 state 一同注入的助手函数|(code: string, version?: '1.0' | '1.1') => void|

其它

除以上特殊类以外,

  • 所有控制器均为函数,且与官方文档命名保持一致。
  • 所有控制器均有额外可选属性 describe,用于在构建的代码中为控制器附加注释。
  • 所有控制器均有额外可选属性 version,用于区分控制器参与构建的人物包版本。(若未传 version 则控制器会参与所有版本的构建)
  • 所有全局变量均为对象,且与官方文档命名保持一致。

其余具体参数请参阅 MUGEN 官方文档。

Interface

CallbackFun

type CallbackFun = (stateInfo: Statedef) => void;

BaseValue

type BaseValue = string | number;

CreateTriggersParams

interface CreateTriggersParams {
    All?: AttrValue;
    [x: number]: AttrValue;
}