新增tire。修改transform.Component为es.ComponentTransform

This commit is contained in:
yhh
2021-07-04 21:03:30 +08:00
parent dc3d639824
commit 77ad112f67
11 changed files with 6591 additions and 40 deletions
File diff suppressed because it is too large Load Diff
+12 -9
View File
@@ -193,7 +193,7 @@ declare module es {
* 当实体的位置改变时调用。这允许组件知道它们由于父实体的移动而移动了。 * 当实体的位置改变时调用。这允许组件知道它们由于父实体的移动而移动了。
* @param comp * @param comp
*/ */
onEntityTransformChanged(comp: transform.Component): void; onEntityTransformChanged(comp: ComponentTransform): void;
debugRender(batcher: IBatcher): void; debugRender(batcher: IBatcher): void;
/** /**
*当父实体或此组件启用时调用 *当父实体或此组件启用时调用
@@ -311,7 +311,7 @@ declare module es {
readonly worldInverseTransform: Matrix2D; readonly worldInverseTransform: Matrix2D;
readonly localToWorldTransform: Matrix2D; readonly localToWorldTransform: Matrix2D;
readonly worldToLocalTransform: Matrix2D; readonly worldToLocalTransform: Matrix2D;
onTransformChanged(comp: transform.Component): void; onTransformChanged(comp: ComponentTransform): void;
setParent(parent: Entity): any; setParent(parent: Entity): any;
setParent(parent: Transform): any; setParent(parent: Transform): any;
setPosition(x: number, y: number): this; setPosition(x: number, y: number): this;
@@ -760,14 +760,12 @@ declare module es {
getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T; getEntityProcessor<T extends EntitySystem>(type: new (...args: any[]) => T): T;
} }
} }
declare module transform { declare module es {
enum Component { enum ComponentTransform {
position = 0, position = 0,
scale = 1, scale = 1,
rotation = 2 rotation = 2
} }
}
declare module es {
enum DirtyType { enum DirtyType {
clean = 0, clean = 0,
positionDirty = 1, positionDirty = 1,
@@ -1390,7 +1388,7 @@ declare module es {
setShouldColliderScaleAndRotateWithTransform(shouldColliderScaleAndRotationWithTransform: boolean): Collider; setShouldColliderScaleAndRotateWithTransform(shouldColliderScaleAndRotationWithTransform: boolean): Collider;
onAddedToEntity(): void; onAddedToEntity(): void;
onRemovedFromEntity(): void; onRemovedFromEntity(): void;
onEntityTransformChanged(comp: transform.Component): void; onEntityTransformChanged(comp: ComponentTransform): void;
onEnabled(): void; onEnabled(): void;
onDisabled(): void; onDisabled(): void;
/** /**
@@ -1517,7 +1515,7 @@ declare module es {
color: Color; color: Color;
renderLayer: number; renderLayer: number;
protected _renderLayer: number; protected _renderLayer: number;
onEntityTransformChanged(comp: transform.Component): void; onEntityTransformChanged(comp: ComponentTransform): void;
localOffset: es.Vector2; localOffset: es.Vector2;
setLocalOffset(offset: es.Vector2): this; setLocalOffset(offset: es.Vector2): this;
isVisible: boolean; isVisible: boolean;
@@ -1878,7 +1876,7 @@ declare module es {
*/ */
getComponents(typeName: any, components?: any[]): any[]; getComponents(typeName: any, components?: any[]): any[];
update(): void; update(): void;
onEntityTransformChanged(comp: transform.Component): void; onEntityTransformChanged(comp: ComponentTransform): void;
onEntityEnabled(): void; onEntityEnabled(): void;
onEntityDisabled(): void; onEntityDisabled(): void;
debugRender(batcher: IBatcher): void; debugRender(batcher: IBatcher): void;
@@ -4191,6 +4189,11 @@ declare module es {
pinParticleAtIndex(index: number): LineSegments; 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 { declare module es {
abstract class Constraint { abstract class Constraint {
composite: Composite; composite: Composite;
+38 -15
View File
@@ -1762,17 +1762,14 @@ var es;
}()); }());
es.Scene = Scene; es.Scene = Scene;
})(es || (es = {})); })(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; var es;
(function (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; var DirtyType;
(function (DirtyType) { (function (DirtyType) {
DirtyType[DirtyType["clean"] = 0] = "clean"; DirtyType[DirtyType["clean"] = 0] = "clean";
@@ -2200,13 +2197,13 @@ var es;
this.hierarchyDirty |= dirtyFlagType; this.hierarchyDirty |= dirtyFlagType;
switch (dirtyFlagType) { switch (dirtyFlagType) {
case DirtyType.positionDirty: case DirtyType.positionDirty:
this.entity.onTransformChanged(transform.Component.position); this.entity.onTransformChanged(ComponentTransform.position);
break; break;
case DirtyType.rotationDirty: case DirtyType.rotationDirty:
this.entity.onTransformChanged(transform.Component.rotation); this.entity.onTransformChanged(ComponentTransform.rotation);
break; break;
case DirtyType.scaleDirty: case DirtyType.scaleDirty:
this.entity.onTransformChanged(transform.Component.scale); this.entity.onTransformChanged(ComponentTransform.scale);
break; break;
} }
// 告诉子项发生了变换 // 告诉子项发生了变换
@@ -3369,13 +3366,13 @@ var es;
}; };
Collider.prototype.onEntityTransformChanged = function (comp) { Collider.prototype.onEntityTransformChanged = function (comp) {
switch (comp) { switch (comp) {
case transform.Component.position: case es.ComponentTransform.position:
this._isPositionDirty = true; this._isPositionDirty = true;
break; break;
case transform.Component.scale: case es.ComponentTransform.scale:
this._isPositionDirty = true; this._isPositionDirty = true;
break; break;
case transform.Component.rotation: case es.ComponentTransform.rotation:
this._isRotationDirty = true; this._isRotationDirty = true;
break; break;
} }
@@ -10774,6 +10771,32 @@ var es;
es.LineSegments = LineSegments; es.LineSegments = LineSegments;
})(es || (es = {})); })(es || (es = {}));
var 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) { (function (es) {
var Constraint = /** @class */ (function () { var Constraint = /** @class */ (function () {
function Constraint() { function Constraint() {
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -80,7 +80,7 @@ module es {
* *
* @param comp * @param comp
*/ */
public onEntityTransformChanged(comp: transform.Component) { public onEntityTransformChanged(comp: ComponentTransform) {
} }
public debugRender(batcher: IBatcher) {} public debugRender(batcher: IBatcher) {}
@@ -152,15 +152,15 @@ module es {
this._isParentEntityAddedToScene = false; this._isParentEntityAddedToScene = false;
} }
public onEntityTransformChanged(comp: transform.Component) { public onEntityTransformChanged(comp: ComponentTransform) {
switch (comp) { switch (comp) {
case transform.Component.position: case ComponentTransform.position:
this._isPositionDirty = true; this._isPositionDirty = true;
break; break;
case transform.Component.scale: case ComponentTransform.scale:
this._isPositionDirty = true; this._isPositionDirty = true;
break; break;
case transform.Component.rotation: case ComponentTransform.rotation:
this._isRotationDirty = true; this._isRotationDirty = true;
break; break;
} }
@@ -32,7 +32,7 @@ module es {
protected _renderLayer: number = 0; protected _renderLayer: number = 0;
public onEntityTransformChanged(comp: transform.Component) { public onEntityTransformChanged(comp: ComponentTransform) {
this._areBoundsDirty = true; this._areBoundsDirty = true;
} }
+1 -1
View File
@@ -192,7 +192,7 @@ module es {
return this.transform.worldToLocalTransform; return this.transform.worldToLocalTransform;
} }
public onTransformChanged(comp: transform.Component) { public onTransformChanged(comp: ComponentTransform) {
// 通知我们的子项改变了位置 // 通知我们的子项改变了位置
this.components.onEntityTransformChanged(comp); this.components.onEntityTransformChanged(comp);
} }
+5 -7
View File
@@ -1,12 +1,10 @@
module transform { module es {
export enum Component { export enum ComponentTransform {
position, position,
scale, scale,
rotation, rotation,
} }
}
module es {
export enum DirtyType { export enum DirtyType {
clean = 0, clean = 0,
positionDirty = 1, positionDirty = 1,
@@ -458,13 +456,13 @@ module es {
switch (dirtyFlagType) { switch (dirtyFlagType) {
case DirtyType.positionDirty: case DirtyType.positionDirty:
this.entity.onTransformChanged(transform.Component.position); this.entity.onTransformChanged(ComponentTransform.position);
break; break;
case DirtyType.rotationDirty: case DirtyType.rotationDirty:
this.entity.onTransformChanged(transform.Component.rotation); this.entity.onTransformChanged(ComponentTransform.rotation);
break; break;
case DirtyType.scaleDirty: case DirtyType.scaleDirty:
this.entity.onTransformChanged(transform.Component.scale); this.entity.onTransformChanged(ComponentTransform.scale);
break; break;
} }
+1 -1
View File
@@ -294,7 +294,7 @@ module es {
} }
} }
public onEntityTransformChanged(comp: transform.Component) { public onEntityTransformChanged(comp: ComponentTransform) {
if (this._components.length > 0 ){ if (this._components.length > 0 ){
for (let i = 0, s = this._components.length; i < s; ++ i) { for (let i = 0, s = this._components.length; i < s; ++ i) {
let component = this._components[i]; let component = this._components[i];
@@ -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));
}
}
}
}