Architecture Requirements

Core Layers

1. Luny

Namespace: Luny Change frequency: Low - rarely changes once established

Design Notes

2. LunyScript

Namespace: LunyScript Change frequency: Medium - grows with API expansion, core logic stable

3. Engine Adapters (per engine)

Namespaces: LunyScript.Unity, LunyScript.Godot, .. Change frequency: High - evolves with engine API changes

Size Notes


Namespace Usage

using Luny;                    // Implementers extending core (abstractions only)
using LunyScript;              // Everyone - the main user-facing API
using LunyScript.Unity;        // Unity projects - bootstrap and setup only

// User code - just uses LunyScript
When.Collision.With("ball")
    .Begins(Audio.Play("sound"));

// Implementer code - uses Luny abstractions
class CustomScheduler : Luny.ICoroutineScheduler {
    // Custom implementation
}
LunyScript.Configure(new CustomScheduler());

Key Architectural Decisions

Abstraction Decoupling

Decision: Decouple low-level abstractions (interfaces/contracts) from concrete implementations (coroutines, FSMs, BTs)

Rationale:

Execution Model


Critical Architectural Concerns

1. Object/Node/Actor Registration System

Requirements:

Considerations:

2. Event Ordering Contract

Requirements:

Considerations:

3. Execution Tracing & Profiling Hooks

Requirements:

Design approaches:

Data to expose:

4. Memory Management Strategy

Requirements:

Diserable:

5. Error Handling & Recovery

Requirements:

6. Serialization & Hot Reload

Desirable:

7. Concurrency Model

Requirements:

Desirable:

8. API Versioning & Compatibility

Requirements:

Desirable:


Open Questions

See QUESTIONS.md for detailed list of unresolved design questions.


Design Principles

  1. Convention over configuration: Sane defaults, minimal boilerplate
  2. Explicit is better than implicit: Clear contracts over magic behavior
  3. Performance by default: Fast path should be the easy path
  4. Progressive disclosure: Simple things simple, complex things possible
  5. Engine parity: Feature set must work identically across all supported engines