/** * CircleCollider2D Inspector Provider * 2D 圆形碰撞体检视器 */ import React from 'react'; import { Component } from '@esengine/ecs-framework'; import type { IComponentInspector, ComponentInspectorContext } from '@esengine/editor-core'; import { CircleCollider2DComponent } from '../../components/CircleCollider2DComponent'; import { CollisionLayer2D } from '../../types/Physics2DTypes'; export class CircleCollider2DInspectorProvider implements IComponentInspector { readonly id = 'circlecollider2d-inspector'; readonly name = 'CircleCollider2D Inspector'; readonly priority = 100; readonly targetComponents = ['CircleCollider2D', 'CircleCollider2DComponent']; canHandle(component: Component): component is CircleCollider2DComponent { return component instanceof CircleCollider2DComponent || component.constructor.name === 'CircleCollider2DComponent'; } render(context: ComponentInspectorContext): React.ReactElement { const component = context.component as CircleCollider2DComponent; const onChange = context.onChange; const handleChange = (prop: string, value: unknown) => { onChange?.(prop, value); }; return (
Circle Collider 2D
{/* Radius */}
handleChange('radius', parseFloat(e.target.value) || 0.5)} className="property-input" />
{/* Offset */}
Offset
handleChange('offset', { ...component.offset, x: parseFloat(e.target.value) || 0 })} className="property-input" />
handleChange('offset', { ...component.offset, y: parseFloat(e.target.value) || 0 })} className="property-input" />
{/* Material */}
Material
handleChange('friction', parseFloat(e.target.value) || 0)} className="property-input" />
handleChange('restitution', parseFloat(e.target.value) || 0)} className="property-input" />
handleChange('density', parseFloat(e.target.value) || 1)} className="property-input" />
{/* Collision */}
Collision
handleChange('isTrigger', e.target.checked)} className="property-checkbox" />
); } }