Files
2026-07-23 21:23:01 +00:00

269 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Cat Haven - README
## Testing
Cat Haven includes a comprehensive test suite using a custom testing framework with TAP-style output and XML report generation.
### Test Structure
```
test/
├── test_helper.lua # LOVR mocks and test utilities
├── run_tests.lua # Test runner script
├── spec/ # Unit tests (per module)
│ ├── core_spec.lua
│ ├── json_spec.lua
│ ├── voxel_spec.lua
│ ├── cat_spec.lua
│ ├── house_spec.lua
│ ├── ui_spec.lua
│ └── audio_spec.lua
├── integration/ # Integration tests
│ └── game_flow_spec.lua
└── e2e/ # End-to-end tests
└── edge_cases_spec.lua
```
### Test Coverage
#### Unit Tests (spec/)
- **JSON Module**: Encoding/decoding, edge cases, round-trip validation
- **Voxel Module**: Texture generation, mesh creation, rendering, raycast
- **Cat Module**: Creation, AI behavior, needs, serialization, animation
- **House Module**: Furniture placement, collision detection, upgrades
- **UI Module**: HUD rendering, interaction, state management
- **Audio Module**: Sound generation, playback, properties
- **Core Module**: Game state, spawn, save/load, happiness calculation
#### Integration Tests (integration/)
- Full game flow initialization
- Module interactions
- Save/load round-trip
- Cat-house interactions
- UI-cat interactions
- Voxel-cat interactions
- JSON serialization round-trips
#### End-to-End Tests (e2e/)
- Empty cat list handling
- Zero distance edge cases
- Nil value handling
- Invalid JSON handling
- Max capacity limits
- Furniture at bounds
- Low happiness departures
- Furniture upgrades
- Personality compatibility
- Audio generation
- Serialization edge cases
- Stress tests (many cats, many furniture)
- Complete game session simulation
### Running Tests
```bash
# Run all tests
lua test/run_tests.lua
# Run tests with LuaJIT (faster)
luajit test/run_tests.lua
# Run specific test file
lua test/spec/json_spec.lua
```
### Test Output
Tests output TAP (Test Anything Protocol) format to stdout and generate an XML report:
```
cat_game/
├── test-report.xml # JUnit-compatible XML report
```
The XML report can be used with CI/CD tools like Jenkins, GitHub Actions, etc.
### Writing Tests
Use the `describe` and `it` functions for test organization:
```lua
describe('Module Name', function()
it('should do something', function()
-- Test code here
assert.equals(expected, actual)
assert_truthy(value)
assert_falsy(value)
end)
end)
```
### Mocking LOVR
The test helper provides a complete LOVR mock:
```lua
local helper = require('test.test_helper')
local lovr = helper.lovr
-- Use lovr in tests
lovr.graphics.box('fill', 0, 0, 0, 1, 1, 1, { 1, 0, 0 })
```
### Assertions
- `assert.equals(a, b)` - Check equality
- `assert_truthy(val)` - Check truthiness
- `assert_falsy(val)` - Check falsiness
- `assert_matches(str, pattern)` - Check regex match
- `assertDeepEqual(a, b)` - Deep table comparison
## Project Overview
Cat Haven is a cozy voxel-styled management game for LOVR (Lua Open Virtual Reality). Players manage a virtual cat shelter, placing furniture, welcoming new cats, and maintaining their happiness.
## Features
### Core Gameplay
- **Cat Management**: Welcome new cats with 5 unique personalities (Lone Wolf, Social Butterfly, Playful Clown, Greedy Eater, Lazy Sleeper)
- **Furniture System**: Place and upgrade furniture (Cat Tree, Scratching Post, Cozy Bed, Window Seat, Food Bowl)
- **Happiness System**: Monitor cat happiness based on comfort, social needs, hunger, and fun
- **Save/Load**: JSON-based save system to preserve game state
### Technical Features
- **Voxel Rendering**: Procedural textures for all game objects
- **Procedural Audio**: Generated sounds for purring, meowing, ambient room noise
- **Grid-based Placement**: Collision detection for furniture placement
- **AI Behavior**: Cats seek comfort, social interaction, and entertainment
- **Headless Environment**: Designed for VR but functional in 2D mode
## Project Structure
```
cat_game/
├── main.lua # LOVR entry point
├── README.md # This file
├── BUILD_NOTES.md # Implementation status
├── src/
│ ├── core.lua # Game state, configuration, save/load
│ ├── json.lua # Custom JSON encoder/decoder
│ ├── voxel/init.lua # Voxel rendering, procedural textures
│ ├── cat/init.lua # Cat AI, behavior, state machine
│ ├── house/init.lua # Grid system, furniture placement
│ ├── ui/init.lua # HUD, inventory, cat log
│ └── audio/init.lua # Procedural audio generation
├── test/ # Test suite
│ ├── test_helper.lua # LOVR mocks and utilities
│ ├── run_tests.lua # Test runner
│ ├── spec/ # Unit tests
│ ├── integration/ # Integration tests
│ └── e2e/ # End-to-end tests
```
## Testing
### Running Tests
```bash
# Run all tests
lua test/run_tests.lua
# Run tests with LuaJIT (faster)
luajit test/run_tests.lua
```
### Test Coverage
- **JSON Encoding/Decoding**: All data types, edge cases, round-trip validation
- **Cat Creation**: All 5 personalities, AI behavior, serialization
- **Furniture Placement**: Grid system, collision detection, upgrades
- **Happiness Calculation**: All weights, edge cases, empty lists
- **Save/Load Round-trip**: Complete state preservation
- **UI Rendering**: HUD, inventory, cat log, interaction
- **Audio Generation**: Purr, meow, click, ambient sounds
### Test Structure
```
test/
├── test_helper.lua # LOVR mocks and utilities
├── run_tests.lua # Test runner
├── spec/ # Unit tests (per module)
│ ├── core_spec.lua
│ ├── json_spec.lua
│ ├── voxel_spec.lua
│ ├── cat_spec.lua
│ ├── house_spec.lua
│ ├── ui_spec.lua
│ └── audio_spec.lua
├── integration/ # Integration tests
│ └── game_flow_spec.lua
└── e2e/ # End-to-end tests
└── edge_cases_spec.lua
```
## Controls
- **RThumb + S**: Save game
- **RThumb + L**: Load game
- **ESC**: Pause game
- **Mouse**: Interact with UI elements
## Game Mechanics
### Cat Spawn
- New cats arrive every 30 seconds (if under max capacity)
- Each cat has a random personality affecting behavior and compatibility
### Happiness Formula
```
Total Happiness =
(Avg Comfort × 0.3) +
(Avg Social × 0.2) +
(Avg Hunger × 0.2) +
(Avg Fun × 0.3)
```
### Cat Departure
Cats leave automatically when:
- Comfort drops below 10%
- Hunger drops below 10%
### Furniture Upgrades
- Furniture can be upgraded 3 levels
- Each upgrade increases happiness contribution by 80%
## Technical Details
### Dependencies
- LOVR 2023 (v1.4)
- Lua 5.4
### Audio Format
Audio is generated procedurally using `lovr.audio.newSource()` with 'static' buffer type.
### Texture Generation
Textures are created at runtime using `lovr.graphics.newImage()` with RGBA8 format.
## Building
The game runs directly in LOVR. No compilation required.
```bash
lovr ./
```
## Status
All phases complete:
- ✅ MVP setup
- ✅ Core systems
- ✅ Polish
- ✅ Neverending loop
See BUILD_NOTES.md for implementation details.
## License
MIT License