Compare commits
5 Commits
5c6acf9d60
...
13e6e640d3
| Author | SHA1 | Date | |
|---|---|---|---|
| 13e6e640d3 | |||
| db5ec99190 | |||
| 0a6f3bdaae | |||
| 5a0d74baf0 | |||
| 45f1db3b37 |
112
CLAUDE.md
112
CLAUDE.md
@@ -2,10 +2,30 @@
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Company
|
||||
|
||||
**OmixLab LTD** - Package namespace: `com.omixlab`
|
||||
|
||||
## Git Commit Guidelines
|
||||
|
||||
**IMPORTANT**: When creating git commits:
|
||||
- **DO NOT** add yourself as a co-author (no `Co-Authored-By` lines)
|
||||
- **Commit messages must be a single line** - keep it concise and descriptive
|
||||
|
||||
## Project Overview
|
||||
|
||||
Mosis is a **virtual smartphone OS** for VR games and applications. It provides a phone-like device that users can interact with inside VR environments, with real smartphone functionality.
|
||||
|
||||
### Current Status
|
||||
|
||||
| Component | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| MosisService | ✅ Working | RmlUi rendering, touch input, navigation |
|
||||
| Desktop Designer | ✅ Working | Hot-reload, hierarchy dump, recording |
|
||||
| Designer Tests | ✅ 5/5 Passing | Navigation tests automated |
|
||||
| MosisVR (Unity) | ✅ Building | OpenGL backend working, Vulkan in progress |
|
||||
| MosisUnreal | ✅ Working | Vulkan texture import via UE5 RHI, phone actor with mesh |
|
||||
|
||||
### Project Components
|
||||
|
||||
| Component | Location | Purpose |
|
||||
@@ -528,7 +548,7 @@ RMLUI: Back to: home
|
||||
|--------------|----------|
|
||||
| General concepts, architecture | `MosisService/CLAUDE.md` (this file) |
|
||||
| Unreal plugin docs | `MosisUnreal/Plugins/MosisSDK/README.md` |
|
||||
| Unity package docs | `MosisVR/Packages/com.omarator.mosissdk/README.md` |
|
||||
| Unity package docs | `MosisVR/Packages/com.omixlab.mosis_sdk/README.md` |
|
||||
| Project-specific build commands | Each project's own docs |
|
||||
|
||||
**DO NOT** put documentation in the root `D:\Dev\Mosis\` directory - it is not versioned.
|
||||
@@ -606,9 +626,95 @@ rmdir /s /q "Binaries"
|
||||
- Android Build Tools 36.1.0 (for AIDL compiler)
|
||||
- `ANDROID_HOME` environment variable set
|
||||
|
||||
#### VR Pointer Interaction
|
||||
|
||||
The MosisSDK includes `UMosisPointerComponent` for VR ray-based touch interaction.
|
||||
|
||||
**Key Files**:
|
||||
- `Public/MosisPointerComponent.h` - Component header
|
||||
- `Private/MosisPointerComponent.cpp` - Implementation
|
||||
|
||||
**Features**:
|
||||
- Raycast from component transform (attach as child of motion controller)
|
||||
- Automatic detection of `AMosisPhoneActor` hits
|
||||
- Touch state machine: Down/Move/Up events
|
||||
- Optional Enhanced Input binding via `TriggerAction` property
|
||||
- Manual control via `SetTriggerPressed(bool)`
|
||||
- Debug ray visualization
|
||||
|
||||
**Blueprint Setup**:
|
||||
1. Add `MosisPointerComponent` as child of `MotionControllerComponent`
|
||||
2. Set `TriggerAction` to your trigger input action (optional)
|
||||
3. Touch events are sent automatically when pointing at phone and triggering
|
||||
|
||||
**C++ Setup**:
|
||||
```cpp
|
||||
// In VR Pawn header
|
||||
UPROPERTY(VisibleAnywhere)
|
||||
UMosisPointerComponent* RightPointer;
|
||||
|
||||
// In constructor
|
||||
RightPointer = CreateDefaultSubobject<UMosisPointerComponent>(TEXT("RightPointer"));
|
||||
RightPointer->SetupAttachment(RightMotionController);
|
||||
|
||||
// In BeginPlay (if using Enhanced Input)
|
||||
RightPointer->TriggerAction = TriggerInputAction;
|
||||
```
|
||||
|
||||
**Manual Control (without Enhanced Input)**:
|
||||
```cpp
|
||||
// In your input handling code
|
||||
void AMyVRPawn::OnTriggerPressed()
|
||||
{
|
||||
RightPointer->SetTriggerPressed(true);
|
||||
}
|
||||
|
||||
void AMyVRPawn::OnTriggerReleased()
|
||||
{
|
||||
RightPointer->SetTriggerPressed(false);
|
||||
}
|
||||
```
|
||||
|
||||
**Component Properties**:
|
||||
|
||||
| Property | Type | Default | Description |
|
||||
|----------|------|---------|-------------|
|
||||
| `RayLength` | float | 500.0 | Maximum ray length in cm |
|
||||
| `bShowDebugRay` | bool | false | Draw debug visualization |
|
||||
| `DebugRayColor` | FLinearColor | Red | Ray color when not hitting |
|
||||
| `DebugRayHitColor` | FLinearColor | Green | Ray color when hitting phone |
|
||||
| `TraceChannel` | ECollisionChannel | Visibility | Collision channel for raycast |
|
||||
| `TriggerAction` | UInputAction* | nullptr | Enhanced Input action for trigger |
|
||||
|
||||
**Blueprint Functions**:
|
||||
|
||||
| Function | Returns | Description |
|
||||
|----------|---------|-------------|
|
||||
| `IsPointingAtPhone()` | bool | True if ray hits a phone actor |
|
||||
| `GetTargetPhone()` | AMosisPhoneActor* | Currently targeted phone (or nullptr) |
|
||||
| `GetHitLocation()` | FVector | World location of ray hit |
|
||||
| `GetRayOrigin()` | FVector | Ray start position |
|
||||
| `GetRayDirection()` | FVector | Ray direction vector |
|
||||
| `IsTriggerPressed()` | bool | Current trigger state |
|
||||
| `SetTriggerPressed(bool)` | void | Manual trigger control |
|
||||
|
||||
**Touch State Machine**:
|
||||
```
|
||||
Idle ──[raycast hit]──► Hover ──[trigger]──► Pressed
|
||||
▲ │ │
|
||||
│ │ raycast miss │ trigger release
|
||||
│ ▼ ▼
|
||||
└──────────────────── Idle ◄────────────────────
|
||||
|
||||
Events:
|
||||
- Idle → Pressed: SendTouch(Down)
|
||||
- Pressed + moving: SendTouch(Move)
|
||||
- Pressed → Idle: SendTouch(Up)
|
||||
```
|
||||
|
||||
### MosisVR (Unity 6000.3.2f1)
|
||||
|
||||
**Location**: `D:\Dev\Mosis\MosisVR\Packages\com.omarator.mosissdk\`
|
||||
**Location**: `D:\Dev\Mosis\MosisVR\Packages\com.omixlab.mosis_sdk\`
|
||||
|
||||
#### Direct APK Build (Recommended)
|
||||
|
||||
@@ -651,7 +757,7 @@ gradle assembleRelease
|
||||
The native plugin builds automatically via CMake during Unity's build. To rebuild manually:
|
||||
|
||||
```batch
|
||||
cd Packages/com.omarator.mosissdk/Plugins/Android/cpp
|
||||
cd Packages/com.omixlab.mosis_sdk/Plugins/Android/cpp
|
||||
cmake -B build -DCMAKE_TOOLCHAIN_FILE=%ANDROID_NDK_HOME%/build/cmake/android.toolchain.cmake ^
|
||||
-DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-29
|
||||
cmake --build build
|
||||
|
||||
Reference in New Issue
Block a user