First commit

This commit is contained in:
Luan Nico
2017-10-22 00:58:04 -02:00
commit 2756b35721
10 changed files with 200 additions and 0 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
.DS_Store
.atom/
.idea
*.iml
.packages
.pub/
packages
pubspec.lock

2
CHANGELOG.md Normal file
View File

@ -0,0 +1,2 @@
## [0.1.0]
- First release, basic utilities

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# flame
A new flutter package project.
## Getting Started
For help getting started with Flutter, view our online [documentation](http://flutter.io/).
For help on editing package code, view the [documentation](https://flutter.io/developing-packages/).

30
lib/audio.dart Normal file
View File

@ -0,0 +1,30 @@
import 'package:flutter/services.dart' show rootBundle;
import 'dart:async';
import 'dart:typed_data';
import 'dart:io';
import 'package:audioplayers/audioplayer.dart';
import 'package:path_provider/path_provider.dart';
class Audio {
Map<String, File> loadedFiles = new Map();
Future<ByteData> _loadAsset(String fileName) async {
return await rootBundle.load('assets/audio/' + fileName);
}
Future<File> load(String fileName) async {
final file = new File('${(await getTemporaryDirectory()).path}/${fileName}');
return await file.writeAsBytes((await _loadAsset(fileName)).buffer.asUint8List());
}
Future<int> play(String fileName) async {
if (!loadedFiles.containsKey(fileName)) {
loadedFiles[fileName] = await load(fileName);
}
AudioPlayer audioPlayer = new AudioPlayer();
return await audioPlayer.play(loadedFiles[fileName].path, isLocal: true);
}
}

38
lib/component.dart Normal file
View File

@ -0,0 +1,38 @@
import 'dart:ui';
import 'dart:math';
import 'flame.dart';
abstract class Component {
void update(double t);
void render(Canvas c);
}
abstract class SpriteComponent extends Component {
double x, y, angle;
double size;
Image image;
final Paint paint = new Paint()..color = new Color(0xffffffff);
SpriteComponent(this.size, String imagePath) {
Flame.images.load(imagePath).then((image) { this.image = image; });
}
render(Canvas canvas) {
canvas.translate(x, y);
canvas.rotate(PI /2 + angle);
canvas.translate(-size/2, -size/2);
if (image != null) {
Rect src = new Rect.fromLTWH(0.0, 0.0, image.width.toDouble(), image.height.toDouble());
Rect dst = new Rect.fromLTWH(0.0, 0.0, size, size);
canvas.drawImageRect(image, src, dst, paint);
}
}
update(double t) {}
}

13
lib/flame.dart Normal file
View File

@ -0,0 +1,13 @@
library flame;
import 'audio.dart';
import 'images.dart';
import 'util.dart';
class Flame {
static Audio audio = new Audio();
static Images images = new Images();
static Util util = new Util();
}

46
lib/game.dart Normal file
View File

@ -0,0 +1,46 @@
import 'dart:ui';
import 'dart:typed_data';
abstract class Game {
void update(double t);
void render(Canvas canvas);
start() {
var previous = Duration.ZERO;
window.onBeginFrame = (now) {
var recorder = new PictureRecorder();
var canvas = new Canvas(recorder, new Rect.fromLTWH(
0.0, 0.0, window.physicalSize.width, window.physicalSize.height));
Duration delta = now - previous;
if (previous == Duration.ZERO) {
delta = Duration.ZERO;
}
previous = now;
var t = delta.inMicroseconds / Duration.MICROSECONDS_PER_SECOND;
update(t);
render(canvas);
var deviceTransform = new Float64List(16)
..[0] = 1.0 // window.devicePixelRatio
..[5] = 1.0 // window.devicePixelRatio
..[10] = 1.0
..[15] = 1.0;
var builder = new SceneBuilder()
..pushTransform(deviceTransform)
..addPicture(Offset.zero, recorder.endRecording())
..pop();
window.render(builder.build());
window.scheduleFrame();
};
window.scheduleFrame();
}
}

17
lib/images.dart Normal file
View File

@ -0,0 +1,17 @@
import 'package:flutter/services.dart' show rootBundle;
import 'dart:typed_data';
import 'dart:ui';
import 'dart:async';
class Images {
Future<Image> load(String name) async {
ByteData data = await rootBundle.load('assets/images/' + name);
Uint8List bytes = new Uint8List.view(data.buffer);
Completer<Image> completer = new Completer();
decodeImageFromList(bytes, (image) {
completer.complete(image);
});
return completer.future;
}
}

24
lib/util.dart Normal file
View File

@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:ui';
class Util {
Future<Size> initialDimensions() async {
// https://github.com/flutter/flutter/issues/5259
// "In release mode we start off at 0x0 but we don't in debug mode"
return await new Future<Size>(() {
if (window.physicalSize.isEmpty) {
var completer = new Completer<Size>();
window.onMetricsChanged = () {
if (!window.physicalSize.isEmpty) {
completer.complete(window.physicalSize);
}
};
return completer.future;
}
return window.physicalSize;
});
}
}

13
pubspec.yaml Normal file
View File

@ -0,0 +1,13 @@
name: flame
description: A minimalist Flutter game engine
version: 0.1.0
author: Luan Nico <luannico27@gmail.com>
homepage: https://github.com/luanpotter/flame
flutter:
dependencies:
flutter:
sdk: flutter
audioplayers:
path_provider: