新增事件发送接收器
This commit is contained in:
21
demo/libs/framework/framework.d.ts
vendored
21
demo/libs/framework/framework.d.ts
vendored
@@ -576,7 +576,7 @@ declare class Rectangle {
|
||||
declare class Vector2 {
|
||||
x: number;
|
||||
y: number;
|
||||
constructor(x: number, y?: number);
|
||||
constructor(x?: number, y?: number);
|
||||
static add(value1: Vector2, value2: Vector2): Vector2;
|
||||
static divide(value1: Vector2, value2: Vector2): Vector2;
|
||||
static multiply(value1: Vector2, value2: Vector2): Vector2;
|
||||
@@ -675,18 +675,6 @@ declare class ShapeCollisions {
|
||||
static closestPointOnLine(lineA: Vector2, lineB: Vector2, closestTo: Vector2): Vector2;
|
||||
static pointToPoly(point: Vector2, poly: Polygon): CollisionResult;
|
||||
}
|
||||
declare class Particle {
|
||||
position: Vector2;
|
||||
lastPosition: Vector2;
|
||||
isPinned: boolean;
|
||||
pinnedPosition: any;
|
||||
acceleration: Vector2;
|
||||
mass: number;
|
||||
radius: number;
|
||||
collidesWithColliders: boolean;
|
||||
constructor(position: Vector2);
|
||||
applyForce(force: Vector2): void;
|
||||
}
|
||||
declare class SpatialHash {
|
||||
gridBounds: Rectangle;
|
||||
private _raycastParser;
|
||||
@@ -714,6 +702,13 @@ declare class NumberDictionary {
|
||||
getAllObjects(): Collider[];
|
||||
clear(): void;
|
||||
}
|
||||
declare class Emitter<T> {
|
||||
private _messageTable;
|
||||
constructor();
|
||||
addObserver(eventType: T, handler: Function): void;
|
||||
removeObserver(eventType: T, handler: Function): void;
|
||||
emit(eventType: T, data: any): void;
|
||||
}
|
||||
declare class Triangulator {
|
||||
triangleIndices: number[];
|
||||
private _triPrev;
|
||||
|
||||
@@ -2719,8 +2719,8 @@ var Vector2 = (function () {
|
||||
function Vector2(x, y) {
|
||||
this.x = 0;
|
||||
this.y = 0;
|
||||
this.x = x;
|
||||
this.y = y ? y : x;
|
||||
this.x = x ? x : 0;
|
||||
this.y = y ? y : this.x;
|
||||
}
|
||||
Vector2.add = function (value1, value2) {
|
||||
var result = new Vector2(0, 0);
|
||||
@@ -3026,7 +3026,7 @@ var Polygon = (function (_super) {
|
||||
var verts = new Vector2[vertCount];
|
||||
for (var i = 0; i < vertCount; i++) {
|
||||
var a = 2 * Math.PI * (i / vertCount);
|
||||
verts[i] = new Vector2(Math.cos(a), Math.sign(a) * radius);
|
||||
verts[i] = new Vector2(Math.cos(a), Math.sin(a) * radius);
|
||||
}
|
||||
return verts;
|
||||
};
|
||||
@@ -3086,6 +3086,12 @@ var ShapeCollisions = (function () {
|
||||
ShapeCollisions.polygonToPolygon = function (first, second) {
|
||||
var result = new CollisionResult();
|
||||
var isIntersecting = true;
|
||||
var firstEdges = first.edgeNormals;
|
||||
var secondEdges = second.edgeNormals;
|
||||
var minIntervalDistance = Number.POSITIVE_INFINITY;
|
||||
var translationAxis = new Vector2();
|
||||
var polygonOffset = Vector2.subtract(first.position, second.position);
|
||||
var axis;
|
||||
};
|
||||
ShapeCollisions.circleToPolygon = function (circle, polygon) {
|
||||
var result = new CollisionResult();
|
||||
@@ -3156,22 +3162,6 @@ var ShapeCollisions = (function () {
|
||||
};
|
||||
return ShapeCollisions;
|
||||
}());
|
||||
var Particle = (function () {
|
||||
function Particle(position) {
|
||||
this.position = new Vector2(0, 0);
|
||||
this.lastPosition = new Vector2(0, 0);
|
||||
this.acceleration = new Vector2(0, 0);
|
||||
this.mass = 1;
|
||||
this.radius = 0;
|
||||
this.collidesWithColliders = true;
|
||||
this.position = position;
|
||||
this.lastPosition = position;
|
||||
}
|
||||
Particle.prototype.applyForce = function (force) {
|
||||
this.acceleration = Vector2.add(this.acceleration, new Vector2(force.x / this.mass, force.y / this.mass));
|
||||
};
|
||||
return Particle;
|
||||
}());
|
||||
var SpatialHash = (function () {
|
||||
function SpatialHash(cellSize) {
|
||||
if (cellSize === void 0) { cellSize = 100; }
|
||||
@@ -3284,6 +3274,30 @@ var NumberDictionary = (function () {
|
||||
};
|
||||
return NumberDictionary;
|
||||
}());
|
||||
var Emitter = (function () {
|
||||
function Emitter() {
|
||||
this._messageTable = new Map();
|
||||
}
|
||||
Emitter.prototype.addObserver = function (eventType, handler) {
|
||||
var list = this._messageTable.get(eventType);
|
||||
if (!list) {
|
||||
list = [];
|
||||
this._messageTable.set(eventType, list);
|
||||
}
|
||||
if (list.contains(handler))
|
||||
console.warn("您试图添加相同的观察者两次");
|
||||
list.push(handler);
|
||||
};
|
||||
Emitter.prototype.removeObserver = function (eventType, handler) {
|
||||
this._messageTable.get(eventType).remove(handler);
|
||||
};
|
||||
Emitter.prototype.emit = function (eventType, data) {
|
||||
var list = this._messageTable.get(eventType);
|
||||
for (var i = list.length - 1; i >= 0; i--)
|
||||
list[i](data);
|
||||
};
|
||||
return Emitter;
|
||||
}());
|
||||
var Triangulator = (function () {
|
||||
function Triangulator() {
|
||||
this.triangleIndices = [];
|
||||
|
||||
2
demo/libs/framework/framework.min.js
vendored
2
demo/libs/framework/framework.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -15,9 +15,9 @@
|
||||
"bin-debug/Main.js",
|
||||
"bin-debug/Platform.js",
|
||||
"bin-debug/ThemeAdapter.js",
|
||||
"bin-debug/game/CoreEmitterType.js",
|
||||
"bin-debug/game/MainScene.js",
|
||||
"bin-debug/game/SpawnerComponent.js",
|
||||
"bin-debug/game/SpawnerSystem.js",
|
||||
"bin-debug/game/VerletDemo.js"
|
||||
"bin-debug/game/SpawnerSystem.js"
|
||||
]
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
|
||||
class Main extends eui.UILayer {
|
||||
public static emitter: Emitter<CoreEmitterType>;
|
||||
|
||||
protected createChildren(): void {
|
||||
super.createChildren();
|
||||
@@ -51,10 +52,15 @@ class Main extends eui.UILayer {
|
||||
egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
|
||||
egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());
|
||||
|
||||
|
||||
Main.emitter = new Emitter<CoreEmitterType>();
|
||||
this.addEventListener(egret.Event.ENTER_FRAME, this.updateFrame, this);
|
||||
this.runGame();
|
||||
}
|
||||
|
||||
private updateFrame(evt: egret.Event){
|
||||
Main.emitter.emit(CoreEmitterType.Update, evt);
|
||||
}
|
||||
|
||||
private async runGame() {
|
||||
await this.loadResource();
|
||||
this.createGameScene();
|
||||
@@ -98,8 +104,11 @@ class Main extends eui.UILayer {
|
||||
new Vector2(10, 10),
|
||||
new Vector2(0, 10),
|
||||
new Vector2(0, 0)]));
|
||||
player.addComponent(new VerletDemo());
|
||||
player.addComponent(new SpawnComponent(EnemyType.worm));
|
||||
// console.log(player.transform.position);
|
||||
|
||||
Main.emitter.addObserver(CoreEmitterType.Update, ()=>{
|
||||
console.log("update emitter");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
3
demo/src/game/CoreEmitterType.ts
Normal file
3
demo/src/game/CoreEmitterType.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
enum CoreEmitterType {
|
||||
Update,
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
class VerletDemo extends RenderableComponent {
|
||||
private _world: VerletWorld;
|
||||
private _stage: egret.Stage;
|
||||
|
||||
protected getWidth(){
|
||||
return this.entity.scene.stage.stageWidth;
|
||||
}
|
||||
|
||||
protected getHeight(){
|
||||
return this.entity.scene.stage.stageHeight;
|
||||
}
|
||||
|
||||
public onAddedToEntity(){
|
||||
this._stage = this.entity.scene.stage;
|
||||
this._world = new VerletWorld(new Rectangle(0, 0, this.width, this.height));
|
||||
|
||||
this._world.addComposite(new Box(new Vector2(100, 100), 50, 20));
|
||||
this._world.addComposite(new Box(new Vector2(10, 10), 200, 100));
|
||||
}
|
||||
|
||||
public update(){
|
||||
this._world.update();
|
||||
this._world.debugRender(this._stage);
|
||||
}
|
||||
|
||||
initialize() {
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user