Add cilp model;

This commit is contained in:
MrKBear 2022-04-27 16:22:30 +08:00
parent d53acf0146
commit c923efcd99
2 changed files with 95 additions and 2 deletions

88
source/Model/Clip.ts Normal file
View File

@ -0,0 +1,88 @@
import { IAnyObject, Model } from "@Model/Model";
import { Group } from "@Model/Group";
import { Range } from "@Model/Range";
interface IDrawCommand {
type: "points" | "cube";
id: string;
data?: Float32Array;
position?: number[];
radius?: number[];
parameter?: IAnyObject;
}
interface IFrame {
commands: IDrawCommand[];
duration: number;
}
/**
*
*/
class Clip {
/**
*
*/
public name: string = "";
/**
*
*/
public model: Model;
/**
*
*/
public frames: IFrame[] = [];
/**
*
*/
public record(t: number): IFrame {
const commands: IDrawCommand[] = [];
for (let i = 0; i < this.model.objectPool.length; i++) {
let object = this.model.objectPool[i];
object.renderParameter.color = object.color;
if (object.display && object instanceof Group) {
commands.push({
type: "points",
id: object.id,
data: object.exportPositionData(),
parameter: object.renderParameter
});
}
if (object.display && object instanceof Range) {
commands.push({
type: "cube",
id: object.id,
position: object.position,
radius: object.radius,
parameter: object.renderParameter
});
}
}
const frame: IFrame = {
commands: commands,
duration: t
};
this.frames.push(frame);
return frame;
}
public constructor(model: Model) {
this.model = model;
}
}
export { Clip };

View File

@ -5,6 +5,7 @@ import { IParamValue } from "@Model/Parameter";
import { CtrlObject } from "@Model/CtrlObject";
import { Emitter } from "@Model/Emitter";
import { AbstractRenderer } from "@Model/Renderer";
import { Clip } from "@Model/Clip";
import { Behavior, IAnyBehavior, IAnyBehaviorRecorder } from "@Model/Behavior";
/**
@ -330,6 +331,8 @@ class Model extends Emitter<ModelEvent> {
}
}
public clipPool: Clip[] = [];
/**
*
*/
@ -347,7 +350,7 @@ class Model extends Emitter<ModelEvent> {
/**
*
*/
public update(t: number) {
public update(t: number, skipDraw: boolean = false) {
// 第一轮更新
for (let i = 0; i < this.objectPool.length; i++) {
@ -373,7 +376,9 @@ class Model extends Emitter<ModelEvent> {
}
}
this.draw();
if (!skipDraw) {
this.draw();
}
}
public draw() {