アプリ本体は
トップページに置いてあります。
ここにはソースファイルだけ置いておきます。
import 'dart:html';
import 'package:stagexl/stagexl.dart';
import 'package:stagexl/stagexl.dart' as xl;
import 'disp_file_info.dart';
void main() {
new OneVoice();
}
/** 一言生成器 */
class OneVoice {
/** キャンパス */
CanvasElement _canvas;
/** ステージ */
Stage _stage;
/** レンダー(描くく人) */
RenderLoop _renderLoop;
/** ファイル情報 */
DispFileInfo _fileInfo;
/** コンストラクタ */
OneVoice() {
// キャンパス作成
Element parent = querySelector("#one_voice");
_canvas = new CanvasElement(width: 600, height: 500);
_canvas.id = "one_voice_canvas";
_canvas.style.border = "solid";
_canvas.style.cursor = "pointer";
parent.append(_canvas);
// ステージ作成
_stage = new Stage(_canvas);
_renderLoop = new RenderLoop();
_renderLoop.addStage(_stage);
// XMLファイル読み込み
_fileInfo = new DispFileInfo();
_getXmlFile();
// クリックハンドラ設定
_stage.onMouseDown.listen(_stageMouseDown);
}
/** XMLファイル取得 */
void _getXmlFile() {
HttpRequest request = new HttpRequest();
request.open('GET', "file_info.xml");
request.onLoad.listen((event) => _onXmlLoad(request));
request.send();
}
/** XMLファイルロードハンドラ */
void _onXmlLoad(HttpRequest request) {
_fileInfo.readXml(request.responseXml);
_fileInfo.bitmapLoad(_show);
}
/** 表示 */
void _show(List<Bitmap> bitmapList) {
// ステージ初期化
_stage.removeChildren();
// 画像データリスト取得
for (int ii = 0; ii < bitmapList.length; ii++) {
// 画像表示
_stage.addChild(bitmapList[ii]);
}
}
/** クリックハンドラ */
_stageMouseDown(xl.MouseEvent ev) {
_fileInfo.bitmapLoad(_show);
}
}
disp_file_info.dart
library DispFileInfo;
import 'dart:html';
import 'directory_info.dart';
import 'package:stagexl/stagexl.dart';
import 'package:stagexl/stagexl.dart' as xl;
/** 表示ファイル情報 */
class DispFileInfo {
/** パーツごとのディレクトリ情報 */
List<DirectoryInfo> _dicInfoArray;
/** リソースマネージャー */
ResourceManager _resourceManager;
/** ビットマップ画像データリスト */
List<List<Bitmap>> _bitmapListArray;
/** onProgressハンドラ */
Function _onProgress;
/** コンストラクタ */
DispFileInfo() {
this._dicInfoArray = new List<DirectoryInfo>();
}
/** XMLファイル読み込み */
void readXml(Document doc) {
List<Element> docList = doc.querySelectorAll("directory_info");
for (int ii = 0; ii < docList.length; ii++) {
Element ele = docList.elementAt(ii);
DirectoryInfo dicInfo = new DirectoryInfo(ele);
this._dicInfoArray.add(dicInfo);
}
}
/** 読み込みファイルパス取得(ランダム) */
List<String> getFilePathArray() {
List<String> filePathArray = new List<String>();
// パーツごとの画像を取得する
for (int ii = 0; ii < this._dicInfoArray.length; ii++) {
DirectoryInfo dicInfo = this._dicInfoArray[ii];
String path = dicInfo.getFilePath();
if (path.length >= 1) {
filePathArray.add(path);
}
}
return filePathArray;
}
/** ディレクトリ数取得 */
int getDirectoryLength() {
return _dicInfoArray.length;
}
/** 画像ロード */
void bitmapLoad(Function show){
// ファイルパスリスト取得
List<String> filePathArray = getFilePathArray();
_resourceManager = new ResourceManager();
for(int ii = 0; ii < filePathArray.length; ii++){
// 読み込みファイルパスを設定
_resourceManager.addBitmapData(ii.toString(), filePathArray[ii]);
}
// 読み込み完了ハンドラ
_resourceManager.load().then((result) {
List<Bitmap> bitmapList = new List<Bitmap>();
for(int ii = 0; ii < filePathArray.length; ii++){
// ビットマップデータ取得
BitmapData data = _resourceManager.getBitmapData(ii.toString());
Bitmap bitmap = new Bitmap(data);
bitmapList.add(bitmap);
}
// 表示
show(bitmapList);
});
}
}
directory_info.dart
library DirectoryInfo;
import 'dart:html';
import 'dart:math';
import 'file_info.dart';
/** ディレクトリ情報(1パーツ1ディレクトリに格納されている) */
class DirectoryInfo {
/** ディレクトリ名 */
String _name;
/** ファイル情報リスト */
List<FileInfo> _fileInfoList;
/** 乱数 */
Random _rng;
/** コンストラクタ */
DirectoryInfo(Element ele) {
_rng = new Random();
_name = ele.attributes['dic_name'];
_fileInfoList = new List<FileInfo>();
for (int ii = 0; ii < ele.childNodes.length; ii++) {
Node fileEle = ele.childNodes[ii];
if (fileEle.nodeName == "file_info") {
_fileInfoList.add(new FileInfo(fileEle));
}
}
}
/** ファイルパス取得(ランダム) */
String getFilePath() {
String path = "";
int index = _rng.nextInt(this._fileInfoList.length);
path = this.getFilePathIndex(index);
return path;
}
/** ファイルパス取得(インデックス指定) */
String getFilePathIndex(int index) {
String path = "img/" + this._name + "/" + this._fileInfoList[index].getFileName();
return path;
}
/** ファイルパスリスト取得 */
List<String> getFilePathList() {
List<String> pathList = new List<String>();
for (int ii = 0; ii < _fileInfoList.length; ii++) {
pathList.add(getFilePathIndex(ii));
}
return pathList;
}
/** ファイルインデックス取得(ランダム) */
int getFileIndexRandom() {
return _rng.nextInt(_fileInfoList.length);
}
/** ファイル数取得 */
int getFileLength() {
return _fileInfoList.length;
}
}
file_info.dart
library FileInfo;
import 'dart:html';
/** ファイル情報 */
class FileInfo {
/** ファイル名 */
String _name;
/** コンストラクタ */
FileInfo(Element ele) {
_name = ele.attributes["name"];
}
/** ファイル名取得 */
String getFileName() {
return _name;
}
}