feat(effects): вода, облако яда, луч света; пульт и окна демонстрации
- Поле: вода (сплошная заливка по штриху, превью кистью), туман/огонь/дождь без изменений логики. - Действия: облако яда (частицы, круглая текстура, звук oblako-yada.mp3, длительность как у трека), луч света и заморозка со звуками из public/. - Пульт: инструменты воды и яда, синхрон SFX, тесты панели и ластика. - Окно управления: дочернее от окна просмотра (Z-order). - Типы эффектов, effectsStore prune, hit-test ластика. Made-with: Cursor
This commit is contained in:
@@ -30,7 +30,8 @@ export function minDistSqEffectToPoint(inst: EffectInstance, p: { x: number; y:
|
||||
switch (inst.type) {
|
||||
case 'fog':
|
||||
case 'fire':
|
||||
case 'rain': {
|
||||
case 'rain':
|
||||
case 'water': {
|
||||
let best = Number.POSITIVE_INFINITY;
|
||||
for (const q of inst.points) {
|
||||
const dx = q.x - p.x;
|
||||
@@ -40,6 +41,7 @@ export function minDistSqEffectToPoint(inst: EffectInstance, p: { x: number; y:
|
||||
return best;
|
||||
}
|
||||
case 'lightning':
|
||||
case 'sunbeam':
|
||||
return distSqPointToSegment(p.x, p.y, inst.start.x, inst.start.y, inst.end.x, inst.end.y);
|
||||
case 'freeze': {
|
||||
const dx = inst.at.x - p.x;
|
||||
@@ -47,7 +49,8 @@ export function minDistSqEffectToPoint(inst: EffectInstance, p: { x: number; y:
|
||||
return dx * dx + dy * dy;
|
||||
}
|
||||
case 'scorch':
|
||||
case 'ice': {
|
||||
case 'ice':
|
||||
case 'poisonCloud': {
|
||||
const dx = inst.at.x - p.x;
|
||||
const dy = inst.at.y - p.y;
|
||||
return dx * dx + dy * dy;
|
||||
@@ -58,7 +61,7 @@ export function minDistSqEffectToPoint(inst: EffectInstance, p: { x: number; y:
|
||||
}
|
||||
|
||||
function eraseHitThresholdSq(inst: EffectInstance, toolRadiusN: number): number {
|
||||
if (inst.type === 'scorch' || inst.type === 'ice') {
|
||||
if (inst.type === 'scorch' || inst.type === 'ice' || inst.type === 'poisonCloud') {
|
||||
const r = toolRadiusN + inst.radiusN;
|
||||
return r * r;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user