/** * BoxCollider2D Inspector Provider * 2D 矩形碰撞体检视器 */ import React from 'react'; import { Component } from '@esengine/ecs-framework'; import type { IComponentInspector, ComponentInspectorContext } from '@esengine/editor-core'; import { BoxCollider2DComponent } from '../../components/BoxCollider2DComponent'; import { CollisionLayer2D } from '../../types/Physics2DTypes'; export class BoxCollider2DInspectorProvider implements IComponentInspector { readonly id = 'boxcollider2d-inspector'; readonly name = 'BoxCollider2D Inspector'; readonly priority = 100; readonly targetComponents = ['BoxCollider2D', 'BoxCollider2DComponent']; canHandle(component: Component): component is BoxCollider2DComponent { return component instanceof BoxCollider2DComponent || component.constructor.name === 'BoxCollider2DComponent'; } render(context: ComponentInspectorContext): React.ReactElement { const component = context.component as BoxCollider2DComponent; const onChange = context.onChange; const handleChange = (prop: string, value: unknown) => { onChange?.(prop, value); }; return (
Box Collider 2D
{/* Size */}
Size
handleChange('width', parseFloat(e.target.value) || 1)} className="property-input" />
handleChange('height', parseFloat(e.target.value) || 1)} 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" />
); } }