initial commit
This commit is contained in:
@@ -0,0 +1,268 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user