加入碰撞和粒子发射路径
This commit is contained in:
1 parent
026ee74d48
commit
72d8daa283
12 files changed
+1365
-1276
No files matched your search
@@ -325,8 +325,9 @@ export interface EmitterConfig {
|
||||
/** 蒙皮网格拓扑尺寸 */
|
||||
trailGridRows: number
|
||||
trailGridCols: number
|
||||
/** 开启碰撞(预留) */
|
||||
/** 开启碰撞;仅 collisionColliderIds 中显式选中的场景碰撞体参与计算。 */
|
||||
collision: boolean
|
||||
collisionColliderIds: number[]
|
||||
/** 开启路径跟随(预留) */
|
||||
pathFollow: boolean
|
||||
emitterFollow: boolean
|
||||
@@ -609,6 +610,7 @@ export function defaultConfig(): EmitterConfig {
|
||||
trailGridRows: 4,
|
||||
trailGridCols: 4,
|
||||
collision: false,
|
||||
collisionColliderIds: [],
|
||||
pathFollow: false,
|
||||
emitterFollow: false,
|
||||
emitterFollowMode: 'none',
|
||||
@@ -685,6 +687,15 @@ export function ensureEmitterConfig(config: EmitterConfig): EmitterConfig {
|
||||
config.innerRectH = Math.max(0, Number(config.innerRectH) || 0)
|
||||
config.outerRectW = Math.max(config.innerRectW, Number(config.outerRectW) || 0)
|
||||
config.outerRectH = Math.max(config.innerRectH, Number(config.outerRectH) || 0)
|
||||
const normalizedCollisionColliderIds = Array.from(new Set(
|
||||
(Array.isArray(config.collisionColliderIds) ? config.collisionColliderIds : [])
|
||||
.map((id) => Math.round(Number(id)))
|
||||
.filter((id) => Number.isFinite(id) && id > 0),
|
||||
))
|
||||
if (normalizedCollisionColliderIds.length !== config.collisionColliderIds.length
|
||||
|| normalizedCollisionColliderIds.some((id, index) => id !== config.collisionColliderIds[index])) {
|
||||
config.collisionColliderIds = normalizedCollisionColliderIds
|
||||
}
|
||||
if (config.streamBehavior !== 'normal' && config.streamBehavior !== 'loop') config.streamBehavior = 'normal'
|
||||
if (needsLoopDurationMigration || !Number.isFinite(config.loopDurationFrames)) config.loopDurationFrames = Math.ceil(Math.max(1 / 30, Number(config.duration) || 1) * 30)
|
||||
config.loopDurationFrames = Math.min(1800, Math.max(1, Math.ceil(config.loopDurationFrames)))
|
||||
@@ -1013,7 +1024,7 @@ export class ParticleEmitter extends Container {
|
||||
}
|
||||
|
||||
private applyColliders(p: Particle, particleIndex: number) {
|
||||
if (!this.colliders.length) return false
|
||||
if (!this.cfg.collision || !this.colliders.length) return false
|
||||
const cfg = this.cfg
|
||||
let world = localToWorldMath(cfg, p.x, p.y, this.simulationTransform)
|
||||
let velocity = localVelocityToWorldMath(cfg, p.vx, p.vy, this.simulationTransform)
|
||||
|
||||
Reference in new issue
Block a user