Skip to content

Commit

Permalink
Merge pull request #43 from akashic-games/v2-proto
Browse files Browse the repository at this point in the history
conversion to V2
  • Loading branch information
kamakiri01 authored Oct 4, 2017
2 parents d7c1737 + 7ff1907 commit 57217ab
Show file tree
Hide file tree
Showing 78 changed files with 1,477 additions and 3,412 deletions.
124 changes: 124 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,129 @@
# ChangeLog

## 2.0.0

その他変更
* v1.12.3での非推奨機能を削除
* `g.Game#random` を配列でないように変更
* `g.Scene#setTimeout()`, `setInterval()` の引数順を変更。旧仕様を非推奨に
* `g.Trigger` のAPIを抜本的に見直し
* 一部ライブラリ分離済みクラスを削除
* ビルドツールからgulpを削除

### ゲーム開発者への影響

* v1.12.3において非推奨だった機能を削除
* `g.Label#bitmapFont`, `g.LabelParameterObject#bmpFont` を削除
* 利用している場合、 `g.Label#font` を使うよう変更する必要があります
* `g.Matrix#multplyPoint`, `g.PlainMatrix#multplyPoint` を削除
* 利用している場合、 `g.Matrix#multiplyPoint`, `g.PlainMatrix#multiplyPoint` を使うよう変更する必要があります
* `g.LoadingScene#_onTargetAssetLoad` を削除
* 利用している場合、 `g.LoadingScene#targetAssetLoaded` を使うよう変更する必要があります
* 一部クラスのコンストラクタのうち、引数がオブジェクト一つ (`g.〜ParameterObject`) でないものを削除
* 対象クラス:
* `g.BitmapFont`
* `g.CacheableE`
* `g.Camera2D`
* `g.DynamicFont`
* `g.E`
* `g.FilledRect`
* `g.FrameSprite`
* `g.Label`
* `g.MultiLineLabel`
* `g.Pane`
* `g.Scene`
* `g.Sprite`
* `g.Tile`
* 利用している場合、引数がオブジェクト一つのコンストラクタを使うよう変更する必要があります
* `PureVirtualError``ExceptionFactory#createPureVirtualError` を削除
* `PureVirtualError` を返していた箇所はビルドエラーで検知されるようになります
* `g.Game#random` を配列でないように変更
* 型を `g.RandomGenerator[]` から `g.RandomGenerator` に変更しました。
* 従来 `g.game.random[0]` で参照できた乱数生成器は、 `g.game.random` に置かれるようになりました。
(`random` は歴史的経緯から配列として定義されていましたが、第0要素以外は利用されていませんでした。)
* `g.game[0]` を非推奨機能にしました。
* `g.Scene#setTimeout()`, `g.Scene#setInterval()` の引数順を変更。
* DOM Level 0(Webブラウザの `window.setTimeout()` など)により近くなるよう、
引数を `(handler: () => void, milliseconds: number, owner?: any)` の順で与えるよう変更しました。
* なおDOMとの完全な互換性は意図していません。次の点で異なります。
* 第三引数以降に引数を与えることはできません(代わりに `this` が指定可能)
* 関数の代わりに文字列を与えることはできません
* 従来は `(milliseconds, handler)` または `(millicseconds, owner, handler)` の順でした。これらは非推奨にしました。
* `g.Trigger` を見直し
* `g.Scene#update``g.E#pointDown` などで利用している `g.Trigger` のAPIを抜本的に見直し、主な操作を `add()`, `remove()`, `removeAll()` に集約しました。
* 変更が大きいため、詳細は以下別項にまとめます。
* v1 から移行するゲームでは複数の追従作業が必要です。後述の新旧仕様の対応表もご参考ください。
* `g.ConditionalChainTrigger` を廃止
* `g.Trigger` から `chain` 機能そのものを分離したため、 `ConditionalChainTrigger``g.ChainTrigger` に一般化されました。
* 利用している場合、 `g.ChainTrigger` に変更してください。コンストラクタの引数順が変わっている (`this` が後になった) 点以外に違いはありません。
* 外部ライブラリに切り出されたクラスを削除
* `g.MultiLineLbel``g.Tile` を削除
* 利用している場合、 [@akashic-extension/akashic-label](https://github.com/akashic-games/akashic-label)
または [@akashic-extension/akashic-tile](https://github.com/akashic-games/akashic-tile) を利用してください。

`g.Trigger` の新旧記述の対応は概ね次のとおりです:

||旧仕様での記述|新仕様での記述|
|----|----|----|
|関数 `func` を登録|`trigger.handle(func)`|`trigger.add(func)`|
|関数 `func` を登録(`owner``this` に利用)|`trigger.handle(owner, func)`|`trigger.add(func, owner)`|
|関数 `f` を名前 `n` で登録|`trigger.handle(f, n)`|`trigger.add({ func: f, name: n })`|
|一度呼び出したら解除される関数 `f` を登録|N/A|`trigger.addOnce(f)`|
|`func``owner` の組み合わせが登録済みか確認|`trigger.isHandled(owner, func)`|`trigger.contains(func, owner)`|
|`func``owner` の組み合わせの登録を一つ解除|N/A|`trigger.remove(f, owner)`|
|全ハンドラを登録解除|N/A|`trigger.removeAll()`|
|`this` として `o` を使う全ハンドラを解除|`trigger.removeAll(o)`|`trigger.removeAll({ owner: o })`|
|関数 `f` を使う全ハンドラを解除|`trigger.removeAllByHandler(f)`|`trigger.removeAll({ func: f })`|
|ハンドラの有無を確認|`triger.hasHandler()`|`trigger.length > 0`|

#### `Trigger` の仕様変更詳細

##### `add()` を追加

従来の `Trigger#handle()` は、 `owner` (`this` として関数に渡される値) の有無によって引数順が変化する紛らわしい仕様になっていました。
引数順を変更して、常に関数を第一引数に取る `add()` を加えます。
`add()` はオブジェクト引数もとれるようにし、引数順に左右されない記述を可能にします。

##### `remove()` を「登録を一つ解除するメソッド」に変更

従来の `Trigger` には、 `handle()` と対になる「登録を一つ解除するメソッド」が存在しませんでした。
`remove()` は重複して登録されているハンドラを全部解除してしまうもので、 `handle()` と対称ではありませんでした。
"add" と "remove" で名前上対称になったことを鑑み、 `remove()` を「該当する登録を一つ解除する」メソッドに変更します。

##### 「登録を複数解除するメソッド」を `removeAll()` に統一

従来の `Trigger` には、 `removeAllByHandler()`, `removeByName()`, `removeAll()`, `remove()` が存在し、それぞれ登録解除の条件以外はほぼ同じ処理でした。
また「全ハンドラの登録を解除するメソッド」が存在しませんでした。
特に `removeAll()` は「特定のオーナーに紐づくハンドラすべて」が解除対象であり、名前と処理が一致していませんでした。

これらの「該当するハンドラをすべて登録解除するメソッド」を `removeAll()` に一本化します。
このメソッドは、解除の条件としてオブジェクト引数を一つとり、引数がない場合は全ハンドラを解除します。

##### `g.Trigger#isHandled()` 廃止、 `contains()` 追加

`handle` に代えて `add()` を導入した影響で名前を `contains()` に変更します。
引数順も `owner` が後になる(普通の省略引数になる)よう改めます。

##### `addOnce()` を追加

従来、一回だけ実行されるハンドラを明示的に登録することはできませんでした。
ハンドラ関数は自力で登録を解除するか、または `true` を戻り値として返す必要がありました。
`add()` と同じシグネチャの `addOnce()` を追加し、一度だけ実行されるハンドラを登録できるようにします。

### 非推奨機能の変更

* `g.game.random[0]` を非推奨に
* 利用している場合、 `g.game.random` を使うよう変更してください。
* `g.Trigger#handle()` を非推奨に
* 利用中のユーザは `add()` を使うようにしてください。
* `g.Scene#setTimeout()`, `g.Scene#setInterval()` のうち、第一引数が `milliseconds: number` であるものを非推奨に。
* 利用中のユーザは第一引数に関数を指定するものに移行してください。

### エンジン開発者への影響

* `g.Trigger` のAPI見直し
* ゲーム開発者同様に追従が必要です。

## 1.12.5

機能追加
Expand Down
3 changes: 1 addition & 2 deletions doc/misc/asset-recommended-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,5 @@ Akashic のゲームでは、複数の画像を一つの画像ファイルにま

キャラクタの右側に滲んだ不透明色が確認できます。

ビットマップフォント(`g.BitmapFont`)として使う画像や、タイル(`g.Tile`)に与えるマップチップ画像(`g.TileParameterObject#src`)などにも同様の注意が必要です
この現象は、ビットマップフォント(`g.BitmapFont`)として使う画像や、Akashic向けの拡張機能として提供されている [@akashic-extension/akashic-tile](https://github.com/akashic-games/akashic-tile) でも同様です
特にタイルは、その性質上間隔を空けずに使うことが多いと考えられます。従ってタイルの拡大縮小は推奨されません。

1 change: 0 additions & 1 deletion doc/tutorial/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,6 @@ Akashic Engine には次のエンティティが標準で用意されていま
|`FilledRect` |単色で塗りつぶした矩形を描画する。|
|`Sprite` |画像を描画する。|
|`FrameSprite` |画像を分割してそれらの一つを描画する。自動的にアニメーションさせることができる。|
|`Tile` |画像を分割してそれらをチップ画像として縦横に敷き詰めるて描画する。|
|`Label` |単一行テキストを描画する。|
|`SystemLabel` |システムフォントでテキストを描画する。|
|`E` |複数のエンティティをまとめる。|
Expand Down
129 changes: 0 additions & 129 deletions gulpfile.js

This file was deleted.

47 changes: 28 additions & 19 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,37 +1,46 @@
{
"name": "@akashic/akashic-engine",
"version": "1.12.5",
"version": "2.0.0",
"description": "The core library of Akashic Engine",
"main": "index.js",
"devDependencies": {
"concat": "^1.0.3",
"cpx": "^1.5.0",
"del": "~0.1.3",
"gulp": "~3.8.10",
"gulp-concat": "~2.4.1",
"gulp-istanbul": "~0.6.0",
"gulp-jasmine": "~2.0.0",
"gulp-order": "~1.1.1",
"gulp-rename": "^1.2.0",
"gulp-shell": "0.5.2",
"gulp-tslint": "~4.3.0",
"gulp-uglify": "~1.0.1",
"jasmine": "~2.1.1",
"istanbul": "^0.3.2",
"jasmine": "^2.1.1",
"jasmine-reporters": "~2.0.4",
"jasmine-terminal-reporter": "~0.9.1",
"renamer": "^0.6.1",
"rimraf": "^2.6.1",
"textlint": "^5.6.0",
"textlint-rule-max-ten": "^1.2.2",
"textlint-rule-no-mix-dearu-desumasu": "^1.4.0",
"textlint-rule-prh": "^2.4.0",
"tslint": "~3.7.4",
"tslint": "^5.4.3",
"typedoc": "^0.8.0",
"typescript": "~2.1.6"
"typescript": "~2.1.6",
"uglify-js": "^2.6.0"
},
"scripts": {
"prepublish": "gulp minify && npm run doc",
"build": "gulp",
"test": "gulp test && gulp lint && npm run textlint",
"prepublish": "npm run minify && npm run doc",
"prepare": "npm run prepublish",
"build": "npm run clean && tsc -p ./ && npm run compile:cp && npm run concat:define && npm run concat:node",
"clean": "rimraf tmp && rimraf lib",
"compile:cp": "cpx tmp/tmp.d.ts lib && cpx tmp/tmp.js lib && renamer --find tmp --replace main ./lib/*",
"concat:define": "concat scripts/conf/platforms/node/prefix.d.ts lib/main.d.ts scripts/conf/platforms/node/suffix.d.ts -o lib/main.node.d.ts",
"concat:node": "concat scripts/conf/platforms/node/prefix.js lib/main.js scripts/conf/platforms/node/suffix.js -o lib/main.node.js",
"test": "npm run build && npm run test:compile && npm run test:jasmine",
"test:compile": "tsc -p ./spec",
"test:jasmine": "istanbul cover --report text --report html --colors -i ./lib/main.node.js ./node_modules/jasmine/bin/jasmine.js",
"textlint": "textlint -f pretty-error doc/ && textlint -f pretty-error unreleased-changes/",
"doc": "npm run build && gulp typedoc",
"jasmine": "jasmine"
"minify": "npm run build && npm run minify:node && npm run minify:browser",
"minify:node": "uglifyjs -o ./lib/main.node.min.js --compress --mangle -- lib/main.node.js",
"minify:browser": "uglifyjs lib/main.js -o ./lib/main.min.js",
"lint": "tslint -c tslint.json src/**/*.ts spec/*.ts spec/helpers/**/*.ts",
"doc": "npm run doc:rename && npm run doc:build && npm run doc:restorename",
"doc:rename": "renamer --find @types --replace @types.bak ./node_modules/*",
"doc:build": "cd lib && typedoc --out ../doc/html/ --includeDeclarations ../lib/main.d.ts ../typings/console.d.ts ../typings/lib.core.d.ts && cd ../",
"doc:restorename": "renamer --find @types.bak --replace @types ./node_modules/*"
},
"files": [
"lib",
Expand Down
14 changes: 5 additions & 9 deletions spec/AudioSystemSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,10 @@ describe("test AudioPlayer", function() {
expect(function() { system.volume = 1 + 0.001}).toThrowError("AssertionError");
});

it("AudioSystem#PureVirtualError", function() {
it("AudioSystem#_destroyRequestedAssets", function() {
var game = new mock.Game({ width: 320, height: 320 });
var system = new g.AudioSystem("music", game);
var audio = new mock.ResourceFactory().createAudioAsset("testId", "testAssetPath");
expect(function() { system.stopAll() }).toThrowError("PureVirtualError");
expect(function() { system.findPlayers(audio) }).toThrowError("PureVirtualError");
expect(function() { system.createPlayer() }).toThrowError("PureVirtualError");
expect(function() { system._onVolumeChanged() }).toThrowError("PureVirtualError");
system.requestDestroy(audio);
expect(system._destroyRequestedAssets[audio.id]).toEqual(audio);
});
Expand Down Expand Up @@ -78,10 +74,10 @@ describe("test AudioPlayer", function() {
stoppedCalled = 0;
}

player1.played.handle(function () {
player1.played.add(function () {
++playedCalled;
});
player1.stopped.handle(function () {
player1.stopped.add(function () {
++stoppedCalled;
});

Expand Down Expand Up @@ -148,10 +144,10 @@ describe("test AudioPlayer", function() {
stoppedCalled = 0;
}

player1.played.handle(function () {
player1.played.add(function () {
++playedCalled;
});
player1.stopped.handle(function () {
player1.stopped.add(function () {
++stoppedCalled;
});

Expand Down
Loading

0 comments on commit 57217ab

Please sign in to comment.