Add root .gitignore for Unity Library/Temp/Logs, IDE folders, and node_modules. Include Assets, Needle TypeScript (MenuController, asset picker, WebXR), and project configuration. Made-with: Cursor
62 lines
3.3 KiB
JSON
62 lines
3.3 KiB
JSON
{
|
|
"skill_name": "needle-engine",
|
|
"evals": [
|
|
{
|
|
"id": 1,
|
|
"prompt": "I have a ball the player rolls with WASD. When keys are released the ball should stop quickly. Write a BallController component for Needle Engine.",
|
|
"expected_output": "Uses applyImpulse (not applyForce) for movement, uses getVelocity/setVelocity to brake on release (not _body internal access)",
|
|
"files": [],
|
|
"assertions": [
|
|
{"text": "Uses applyImpulse for movement input, not applyForce", "type": "output_check"},
|
|
{"text": "Uses rb.getVelocity() and rb.setVelocity() for braking, not (rb as any)._body", "type": "output_check"},
|
|
{"text": "Uses SphereCollider for the ball, not BoxCollider", "type": "output_check"}
|
|
]
|
|
},
|
|
{
|
|
"id": 2,
|
|
"prompt": "Add bloom and vignette post-processing to my Needle Engine scene from code, and let me toggle bloom on/off at runtime.",
|
|
"expected_output": "Uses this.context.postprocessing.addEffect(), not Volume component. Uses .enabled to toggle, not .active",
|
|
"files": [],
|
|
"assertions": [
|
|
{"text": "Uses this.context.postprocessing.addEffect() as the primary API", "type": "output_check"},
|
|
{"text": "Does not create a Volume component to add effects", "type": "output_check"},
|
|
{"text": "Uses bloom.enabled = false to toggle, not bloom.active", "type": "output_check"}
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"prompt": "I need physics for a bowling game in Needle Engine — pins are cylinder-shaped, ball is a sphere. Set up the colliders and rigidbodies from code.",
|
|
"expected_output": "Uses SphereCollider for ball, CapsuleCollider for pins, not BoxCollider for everything",
|
|
"files": [],
|
|
"assertions": [
|
|
{"text": "Uses SphereCollider for the bowling ball", "type": "output_check"},
|
|
{"text": "Uses CapsuleCollider for the bowling pins, not BoxCollider", "type": "output_check"},
|
|
{"text": "Adds Rigidbody components to dynamic objects", "type": "output_check"}
|
|
]
|
|
},
|
|
{
|
|
"id": 4,
|
|
"prompt": "Write a Needle Engine component that makes an object smoothly follow another object's position each frame. The target object is assigned as a field.",
|
|
"expected_output": "Uses worldPosition getter/setter directly or getTempVector, not .clone() or new Vector3() in update loop",
|
|
"files": [],
|
|
"assertions": [
|
|
{"text": "Does not call .clone() in the update loop", "type": "output_check"},
|
|
{"text": "Does not allocate new Vector3() in the update loop", "type": "output_check"},
|
|
{"text": "Uses worldPosition setter or getTempVector for position math", "type": "output_check"}
|
|
]
|
|
},
|
|
{
|
|
"id": 5,
|
|
"prompt": "Set up a GitHub Actions workflow to deploy my Needle Engine project on every push to main.",
|
|
"expected_output": "Uses needle-tools/deploy-to-needle-cloud-action@v1, not GitHub Pages, not npx needle-cloud deploy in a run step",
|
|
"files": [],
|
|
"assertions": [
|
|
{"text": "Uses needle-tools/deploy-to-needle-cloud-action@v1", "type": "output_check"},
|
|
{"text": "Does not use 'npx needle-cloud deploy' in a run step", "type": "output_check"},
|
|
{"text": "Does not use GitHub Pages deployment", "type": "output_check"},
|
|
{"text": "Includes a name parameter for the project", "type": "output_check"}
|
|
]
|
|
}
|
|
]
|
|
}
|