新增tire。修改transform.Component为es.ComponentTransform
This commit is contained in:
6504
extensions/ecs-tween/lib/framework.d.ts
vendored
Normal file
6504
extensions/ecs-tween/lib/framework.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
21
source/bin/framework.d.ts
vendored
21
source/bin/framework.d.ts
vendored
@@ -193,7 +193,7 @@ declare module es {
|
||||
* 当实体的位置改变时调用。这允许组件知道它们由于父实体的移动而移动了。
|
||||
* @param comp
|
||||
*/
|
||||
onEntityTransformChanged(comp: transform.Component): void;
|
||||
onEntityTransformChanged(comp: ComponentTransform): void;
|
||||
debugRender(batcher: IBatcher): void;
|
||||
/**
|
||||
*当父实体或此组件启用时调用
|
||||
@@ -311,7 +311,7 @@ declare module es {
|
||||
readonly worldInverseTransform: Matrix2D;
|
||||
readonly localToWorldTransform: Matrix2D;
|
||||
readonly worldToLocalTransform: Matrix2D;
|
||||
onTransformChanged(comp: transform.Component): void;
|
||||
onTransformChanged(comp: ComponentTransform): void;
|
||||
setParent(parent: Entity): any;
|
||||
setParent(parent: Transform): any;
|
||||
setPosition(x: number, y: number): this;
|
||||
@@ -760,14 +760,12 @@ declare module es {
|
||||
getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
|
||||
}
|
||||
}
|
||||
declare module transform {
|
||||
enum Component {
|
||||
declare module es {
|
||||
enum ComponentTransform {
|
||||
position = 0,
|
||||
scale = 1,
|
||||
rotation = 2
|
||||
}
|
||||
}
|
||||
declare module es {
|
||||
enum DirtyType {
|
||||
clean = 0,
|
||||
positionDirty = 1,
|
||||
@@ -1390,7 +1388,7 @@ declare module es {
|
||||
setShouldColliderScaleAndRotateWithTransform(shouldColliderScaleAndRotationWithTransform: boolean): Collider;
|
||||
onAddedToEntity(): void;
|
||||
onRemovedFromEntity(): void;
|
||||
onEntityTransformChanged(comp: transform.Component): void;
|
||||
onEntityTransformChanged(comp: ComponentTransform): void;
|
||||
onEnabled(): void;
|
||||
onDisabled(): void;
|
||||
/**
|
||||
@@ -1517,7 +1515,7 @@ declare module es {
|
||||
color: Color;
|
||||
renderLayer: number;
|
||||
protected _renderLayer: number;
|
||||
onEntityTransformChanged(comp: transform.Component): void;
|
||||
onEntityTransformChanged(comp: ComponentTransform): void;
|
||||
localOffset: es.Vector2;
|
||||
setLocalOffset(offset: es.Vector2): this;
|
||||
isVisible: boolean;
|
||||
@@ -1878,7 +1876,7 @@ declare module es {
|
||||
*/
|
||||
getComponents(typeName: any, components?: any[]): any[];
|
||||
update(): void;
|
||||
onEntityTransformChanged(comp: transform.Component): void;
|
||||
onEntityTransformChanged(comp: ComponentTransform): void;
|
||||
onEntityEnabled(): void;
|
||||
onEntityDisabled(): void;
|
||||
debugRender(batcher: IBatcher): void;
|
||||
@@ -4191,6 +4189,11 @@ declare module es {
|
||||
pinParticleAtIndex(index: number): LineSegments;
|
||||
}
|
||||
}
|
||||
declare module es {
|
||||
class Tire extends Composite {
|
||||
constructor(origin: Vector2, radius: number, segments: number, spokeStiffness?: number, treadStiffness?: number);
|
||||
}
|
||||
}
|
||||
declare module es {
|
||||
abstract class Constraint {
|
||||
composite: Composite;
|
||||
|
||||
@@ -1762,17 +1762,14 @@ var es;
|
||||
}());
|
||||
es.Scene = Scene;
|
||||
})(es || (es = {}));
|
||||
var transform;
|
||||
(function (transform) {
|
||||
var Component;
|
||||
(function (Component) {
|
||||
Component[Component["position"] = 0] = "position";
|
||||
Component[Component["scale"] = 1] = "scale";
|
||||
Component[Component["rotation"] = 2] = "rotation";
|
||||
})(Component = transform.Component || (transform.Component = {}));
|
||||
})(transform || (transform = {}));
|
||||
var es;
|
||||
(function (es) {
|
||||
var ComponentTransform;
|
||||
(function (ComponentTransform) {
|
||||
ComponentTransform[ComponentTransform["position"] = 0] = "position";
|
||||
ComponentTransform[ComponentTransform["scale"] = 1] = "scale";
|
||||
ComponentTransform[ComponentTransform["rotation"] = 2] = "rotation";
|
||||
})(ComponentTransform = es.ComponentTransform || (es.ComponentTransform = {}));
|
||||
var DirtyType;
|
||||
(function (DirtyType) {
|
||||
DirtyType[DirtyType["clean"] = 0] = "clean";
|
||||
@@ -2200,13 +2197,13 @@ var es;
|
||||
this.hierarchyDirty |= dirtyFlagType;
|
||||
switch (dirtyFlagType) {
|
||||
case DirtyType.positionDirty:
|
||||
this.entity.onTransformChanged(transform.Component.position);
|
||||
this.entity.onTransformChanged(ComponentTransform.position);
|
||||
break;
|
||||
case DirtyType.rotationDirty:
|
||||
this.entity.onTransformChanged(transform.Component.rotation);
|
||||
this.entity.onTransformChanged(ComponentTransform.rotation);
|
||||
break;
|
||||
case DirtyType.scaleDirty:
|
||||
this.entity.onTransformChanged(transform.Component.scale);
|
||||
this.entity.onTransformChanged(ComponentTransform.scale);
|
||||
break;
|
||||
}
|
||||
// 告诉子项发生了变换
|
||||
@@ -3369,13 +3366,13 @@ var es;
|
||||
};
|
||||
Collider.prototype.onEntityTransformChanged = function (comp) {
|
||||
switch (comp) {
|
||||
case transform.Component.position:
|
||||
case es.ComponentTransform.position:
|
||||
this._isPositionDirty = true;
|
||||
break;
|
||||
case transform.Component.scale:
|
||||
case es.ComponentTransform.scale:
|
||||
this._isPositionDirty = true;
|
||||
break;
|
||||
case transform.Component.rotation:
|
||||
case es.ComponentTransform.rotation:
|
||||
this._isRotationDirty = true;
|
||||
break;
|
||||
}
|
||||
@@ -10774,6 +10771,32 @@ var es;
|
||||
es.LineSegments = LineSegments;
|
||||
})(es || (es = {}));
|
||||
var es;
|
||||
(function (es) {
|
||||
var Tire = /** @class */ (function (_super) {
|
||||
__extends(Tire, _super);
|
||||
function Tire(origin, radius, segments, spokeStiffness, treadStiffness) {
|
||||
if (spokeStiffness === void 0) { spokeStiffness = 1; }
|
||||
if (treadStiffness === void 0) { treadStiffness = 1; }
|
||||
var _this = _super.call(this) || this;
|
||||
var stride = 2 * Math.PI / segments;
|
||||
for (var i = 0; i < segments; i++) {
|
||||
var theta = i * stride;
|
||||
_this.addParticle(new es.Particle(new es.Vector2(origin.x + Math.cos(theta) * radius, origin.y + Math.sin(theta) * radius)));
|
||||
}
|
||||
var centerParticle = _this.addParticle(new es.Particle(origin));
|
||||
for (var i = 0; i < segments; i++) {
|
||||
_this.addConstraint(new es.DistanceConstraint(_this.particles[i], _this.particles[(i + 1) % segments], treadStiffness));
|
||||
_this.addConstraint(new es.DistanceConstraint(_this.particles[i], centerParticle, spokeStiffness))
|
||||
.setCollidesWithColliders(false);
|
||||
_this.addConstraint(new es.DistanceConstraint(_this.particles[i], _this.particles[(i + 5) % segments], treadStiffness));
|
||||
}
|
||||
return _this;
|
||||
}
|
||||
return Tire;
|
||||
}(es.Composite));
|
||||
es.Tire = Tire;
|
||||
})(es || (es = {}));
|
||||
var es;
|
||||
(function (es) {
|
||||
var Constraint = /** @class */ (function () {
|
||||
function Constraint() {
|
||||
|
||||
2
source/bin/framework.min.js
vendored
2
source/bin/framework.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -80,7 +80,7 @@ module es {
|
||||
* 当实体的位置改变时调用。这允许组件知道它们由于父实体的移动而移动了。
|
||||
* @param comp
|
||||
*/
|
||||
public onEntityTransformChanged(comp: transform.Component) {
|
||||
public onEntityTransformChanged(comp: ComponentTransform) {
|
||||
}
|
||||
|
||||
public debugRender(batcher: IBatcher) {}
|
||||
|
||||
@@ -152,15 +152,15 @@ module es {
|
||||
this._isParentEntityAddedToScene = false;
|
||||
}
|
||||
|
||||
public onEntityTransformChanged(comp: transform.Component) {
|
||||
public onEntityTransformChanged(comp: ComponentTransform) {
|
||||
switch (comp) {
|
||||
case transform.Component.position:
|
||||
case ComponentTransform.position:
|
||||
this._isPositionDirty = true;
|
||||
break;
|
||||
case transform.Component.scale:
|
||||
case ComponentTransform.scale:
|
||||
this._isPositionDirty = true;
|
||||
break;
|
||||
case transform.Component.rotation:
|
||||
case ComponentTransform.rotation:
|
||||
this._isRotationDirty = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ module es {
|
||||
|
||||
protected _renderLayer: number = 0;
|
||||
|
||||
public onEntityTransformChanged(comp: transform.Component) {
|
||||
public onEntityTransformChanged(comp: ComponentTransform) {
|
||||
this._areBoundsDirty = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ module es {
|
||||
return this.transform.worldToLocalTransform;
|
||||
}
|
||||
|
||||
public onTransformChanged(comp: transform.Component) {
|
||||
public onTransformChanged(comp: ComponentTransform) {
|
||||
// 通知我们的子项改变了位置
|
||||
this.components.onEntityTransformChanged(comp);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
module transform {
|
||||
export enum Component {
|
||||
module es {
|
||||
export enum ComponentTransform {
|
||||
position,
|
||||
scale,
|
||||
rotation,
|
||||
}
|
||||
}
|
||||
|
||||
module es {
|
||||
export enum DirtyType {
|
||||
clean = 0,
|
||||
positionDirty = 1,
|
||||
@@ -458,13 +456,13 @@ module es {
|
||||
|
||||
switch (dirtyFlagType) {
|
||||
case DirtyType.positionDirty:
|
||||
this.entity.onTransformChanged(transform.Component.position);
|
||||
this.entity.onTransformChanged(ComponentTransform.position);
|
||||
break;
|
||||
case DirtyType.rotationDirty:
|
||||
this.entity.onTransformChanged(transform.Component.rotation);
|
||||
this.entity.onTransformChanged(ComponentTransform.rotation);
|
||||
break;
|
||||
case DirtyType.scaleDirty:
|
||||
this.entity.onTransformChanged(transform.Component.scale);
|
||||
this.entity.onTransformChanged(ComponentTransform.scale);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@ module es {
|
||||
}
|
||||
}
|
||||
|
||||
public onEntityTransformChanged(comp: transform.Component) {
|
||||
public onEntityTransformChanged(comp: ComponentTransform) {
|
||||
if (this._components.length > 0 ){
|
||||
for (let i = 0, s = this._components.length; i < s; ++ i) {
|
||||
let component = this._components[i];
|
||||
|
||||
23
source/src/Physics/Verlet/Composites/Tire.ts
Normal file
23
source/src/Physics/Verlet/Composites/Tire.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
module es {
|
||||
export class Tire extends Composite {
|
||||
constructor(origin: Vector2, radius: number, segments: number, spokeStiffness: number = 1, treadStiffness: number = 1) {
|
||||
super();
|
||||
|
||||
const stride = 2 * Math.PI / segments;
|
||||
for (let i = 0; i < segments; i ++) {
|
||||
const theta = i * stride;
|
||||
this.addParticle(new Particle(new Vector2(origin.x + Math.cos(theta) * radius,
|
||||
origin.y + Math.sin(theta) * radius)));
|
||||
}
|
||||
|
||||
const centerParticle = this.addParticle(new Particle(origin));
|
||||
|
||||
for (let i = 0; i < segments; i ++) {
|
||||
this.addConstraint(new DistanceConstraint(this.particles[i], this.particles[(i + 1) % segments], treadStiffness));
|
||||
this.addConstraint(new DistanceConstraint(this.particles[i], centerParticle, spokeStiffness))
|
||||
.setCollidesWithColliders(false);
|
||||
this.addConstraint(new DistanceConstraint(this.particles[i], this.particles[(i + 5) % segments], treadStiffness));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user