Files
novafarma/backup_faza11_extracted/backup_faza11_2025-12-11/ANTIGRAVITY_NAMESPACE_REFACTOR.md
2025-12-11 11:34:23 +01:00

11 KiB

🔧 ANTIGRAVITY NAMESPACE REFACTOR

Unifying All Systems Under Single Namespace

Date: 10.12.2025
Status: 📋 PLANNED (Future)
Priority: 🟢 LOW (Post-1.0)


🎯 Goal:

Poenotiti vse sisteme v enoten Antigravity namespace za:

  • Better code organization
  • Avoid global namespace pollution
  • Easier debugging
  • Clearer dependencies
  • Professional code structure

📊 Current State Analysis:

Problem:

Currently systems are scattered:

// Global classes
class Player { }
class TerrainSystem { }
class FarmingSystem { }
class WeatherSystem { }
// ... 30+ more classes

// Global variables
let gameScene;
let uiScene;
let player;

// Mix of patterns

Issues:

  • Global namespace pollution (40+ global classes)
  • No clear structure
  • Hard to track dependencies
  • Potential naming conflicts
  • Difficult to refactor

Proposed Structure:

Antigravity Namespace:

const Antigravity = {
    // Core Engine
    Core: {
        Engine: { ... },
        GameLoop: { ... },
        EventBus: { ... },
        StateManager: { ... }
    },
    
    // Systems
    Systems: {
        Terrain: TerrainSystem,
        Farming: FarmingSystem,
        Weather: WeatherSystem,
        Inventory: InventorySystem,
        Combat: CombatSystem,
        Building: BuildingSystem,
        Quest: QuestSystem,
        Save: SaveSystem,
        Sound: SoundManager,
        Particle: ParticleEffects,
        // ... all 33 systems
    },
    
    // Entities
    Entities: {
        Player: Player,
        NPC: NPC,
        Zombie: Zombie,
        Boss: Boss,
        LootChest: LootChest,
        ZombieSpawner: ZombieSpawner
    },
    
    // Utilities
    Utils: {
        Isometric: IsometricUtils,
        PerlinNoise: PerlinNoise,
        Pathfinding: Pathfinding,
        SpatialGrid: SpatialGrid,
        ObjectPool: ObjectPool,
        Compression: Compression
    },
    
    // Data
    Data: {
        Items: ITEMS_DATA,
        Recipes: CRAFTING_RECIPES,
        NPCs: NPC_DATA,
        Quests: QUEST_DATA,
        Localization: TRANSLATIONS
    },
    
    // Constants
    Constants: {
        TILE_SIZE: 48,
        GRID_WIDTH: 100,
        GRID_HEIGHT: 100,
        PLAYER_SPEED: 200,
        // ... all constants
    }
};

🔄 Migration Strategy:

Phase 1: Create Namespace Structure

Step 1.1: Create Antigravity.js Core

// src/core/Antigravity.js
window.Antigravity = {
    version: '1.0.0',
    Core: {},
    Systems: {},
    Entities: {},
    Utils: {},
    Data: {},
    Constants: {}
};

// Helper methods
Antigravity.registerSystem = function(name, system) {
    this.Systems[name] = system;
    console.log(`✅ Registered system: ${name}`);
};

Antigravity.getSystem = function(name) {
    return this.Systems[name];
};

Time: 2 hours


Phase 2: Migrate Systems (33 files)

Example Migration:

Before:

// TerrainSystem.js
class TerrainSystem {
    constructor(scene) {
        this.scene = scene;
    }
}

After:

// TerrainSystem.js
(function(Antigravity) {
    'use strict';
    
    class TerrainSystem {
        constructor(scene) {
            this.scene = scene;
        }
    }
    
    // Register to namespace
    Antigravity.Systems.Terrain = TerrainSystem;
    
})(window.Antigravity);

Priority Order:

  1. Core systems (5 files) - 1 day
  2. Game systems (15 files) - 2 days
  3. Utility systems (8 files) - 1 day
  4. Optional systems (5 files) - 1 day

Total Time: 5 days


Phase 3: Update Usage

Before:

// GameScene.js
this.terrainSystem = new TerrainSystem(this);
this.farmingSystem = new FarmingSystem(this);

After:

// GameScene.js
this.terrainSystem = new Antigravity.Systems.Terrain(this);
this.farmingSystem = new Antigravity.Systems.Farming(this);

// Or with helper:
this.terrainSystem = Antigravity.createSystem('Terrain', this);

Files to Update:

  • GameScene.js
  • UIScene.js
  • StoryScene.js
  • Player.js
  • All entity files

Time: 2 days


Phase 4: Migrate Constants

Before:

// Scattered across files
const TILE_SIZE = 48;
const GRID_WIDTH = 100;

After:

// constants.js
Antigravity.Constants = {
    World: {
        TILE_SIZE: 48,
        GRID_WIDTH: 100,
        GRID_HEIGHT: 100
    },
    Player: {
        SPEED: 200,
        MAX_HEALTH: 100,
        MAX_ENERGY: 100
    },
    Game: {
        FPS_TARGET: 60,
        SAVE_INTERVAL: 300000 // 5 min
    }
};

Time: 1 day


Phase 5: Create Data Registry

Antigravity.Data = {
    Items: {
        get(id) {
            return ITEMS_DATA[id];
        },
        getAll() {
            return ITEMS_DATA;
        }
    },
    Recipes: {
        get(id) {
            return CRAFTING_RECIPES.find(r => r.id === id);
        },
        getCraftable(inventory) {
            // Logic to check craftable recipes
        }
    }
};

Time: 2 days


📁 File Structure After Refactor:

src/
├── core/
│   ├── Antigravity.js          # Main namespace
│   ├── Engine.js               # Core engine
│   ├── EventBus.js             # Event system
│   └── StateManager.js         # State management
│
├── systems/
│   ├── TerrainSystem.js        # Antigravity.Systems.Terrain
│   ├── FarmingSystem.js        # Antigravity.Systems.Farming
│   └── ...                     # All systems
│
├── entities/
│   ├── Player.js               # Antigravity.Entities.Player
│   ├── NPC.js                  # Antigravity.Entities.NPC
│   └── ...
│
├── utils/
│   ├── IsometricUtils.js       # Antigravity.Utils.Isometric
│   └── ...
│
├── data/
│   ├── items.js                # Antigravity.Data.Items
│   ├── recipes.js              # Antigravity.Data.Recipes
│   └── constants.js            # Antigravity.Constants
│
└── scenes/
    ├── GameScene.js
    ├── UIScene.js
    └── ...

Benefits:

Code Organization:

  • Clear structure (Systems, Entities, Utils, Data)
  • Easy to find files
  • Logical grouping
  • Better IDE autocomplete

Namespace Management:

  • Only 1 global variable (Antigravity)
  • No naming conflicts
  • Clear dependencies
  • Easy to debug

Developer Experience:

  • Consistent API
  • Better documentation
  • Easier onboarding
  • Professional structure

Performance:

  • No global lookup overhead
  • Easier to optimize
  • Better minification

⚠️ Risks & Mitigation:

Risk 1: Breaking Changes

Impact: HIGH
Mitigation:

  • Create compatibility layer
  • Gradual migration (system by system)
  • Extensive testing
  • Keep backup branch

Risk 2: Time Investment

Impact: MEDIUM
Mitigation:

  • Do AFTER 1.0 release
  • Spread over 2-3 weeks
  • Low priority task

Risk 3: Learning Curve

Impact: LOW
Mitigation:

  • Clear documentation
  • Migration examples
  • Gradual rollout

📅 Timeline:

Phase 1: Planning & Setup (1 week)

  • Create Antigravity.js core
  • Design namespace structure
  • Create migration guide
  • Setup compatibility layer

Phase 2: Core Migration (1 week)

  • Migrate 10 core systems
  • Update GameScene
  • Test core functionality
  • Fix critical issues

Phase 3: Full Migration (1 week)

  • Migrate remaining 23 systems
  • Migrate all entities
  • Migrate all utilities
  • Update all scenes

Phase 4: Data & Constants (3 days)

  • Consolidate constants
  • Create data registry
  • Update references
  • Documentation

Phase 5: Testing & Polish (3 days)

  • Comprehensive testing
  • Performance benchmarks
  • Bug fixes
  • Final documentation

Total Time: ~3-4 weeks


🔧 Implementation Examples:

System Registration:

// OLD WAY:
class FarmingSystem {
    // ...
}

// NEW WAY:
(function(AG) {
    class FarmingSystem {
        // ...
    }
    
    AG.registerSystem('Farming', FarmingSystem);
})(Antigravity);

System Usage:

// OLD WAY:
this.farmingSystem = new FarmingSystem(this);
this.farmingSystem.plantCrop(x, y, 'wheat');

// NEW WAY:
this.farming = new Antigravity.Systems.Farming(this);
this.farming.plantCrop(x, y, 'wheat');

// OR with factory:
this.farming = Antigravity.createSystem('Farming', this);

Accessing Data:

// OLD WAY:
const item = ITEMS_DATA['wheat'];
const recipe = CRAFTING_RECIPES.find(r => r.id === 'bread');

// NEW WAY:
const item = Antigravity.Data.Items.get('wheat');
const recipe = Antigravity.Data.Recipes.get('bread');

Using Constants:

// OLD WAY:
const speed = PLAYER_SPEED;
const size = TILE_SIZE;

// NEW WAY:
const speed = Antigravity.Constants.Player.SPEED;
const size = Antigravity.Constants.World.TILE_SIZE;

📊 Migration Checklist:

Core (Priority 1):

  • Antigravity.js namespace
  • TerrainSystem
  • Player
  • InventorySystem
  • WeatherSystem

Game Systems (Priority 2):

  • FarmingSystem
  • BuildingSystem
  • CombatSystem
  • QuestSystem
  • SaveSystem
  • SoundManager
  • ParticleEffects
  • (+ 8 more)

Entities (Priority 3):

  • NPC
  • Zombie
  • Boss
  • LootChest
  • ZombieSpawner

Utilities (Priority 4):

  • IsometricUtils
  • PerlinNoise
  • Pathfinding
  • SpatialGrid
  • ObjectPool

Data & Constants (Priority 5):

  • Constants consolidation
  • Items data
  • Recipes data
  • Localizations
  • Quest data

💡 Compatibility Layer:

// antigravity-compat.js
// Provides backwards compatibility during migration

// Redirect old global classes to new namespace
window.TerrainSystem = Antigravity.Systems.Terrain;
window.FarmingSystem = Antigravity.Systems.Farming;
window.Player = Antigravity.Entities.Player;

console.warn('⚠️ Using compatibility layer. Please migrate to Antigravity namespace.');

🎯 Success Metrics:

Code Quality:

  • Only 1 global variable
  • Clear file structure
  • Consistent API
  • No naming conflicts

Developer Experience:

  • Faster development
  • Better autocomplete
  • Easier debugging
  • Clear documentation

Performance:

  • No regression
  • Better minification
  • Faster lookup times

📝 Documentation Needed:

  1. Migration Guide - Step-by-step for developers
  2. API Reference - Complete namespace documentation
  3. Examples - Before/after comparisons
  4. Troubleshooting - Common migration issues

🚀 When to Do This:

NOT NOW because:

  • Still in active development
  • Beta release coming soon
  • Risk of breaking changes
  • Time better spent on features

DO AFTER:

  • 1.0 Release complete
  • Game is stable
  • Core features done
  • Have 3-4 weeks for refactor

Recommended Timeline: Post-1.0 (January 2026)


💰 Effort vs Value:

Effort: HIGH (3-4 weeks)

Value: MEDIUM (Better code quality)

Conclusion: Good for long-term, not critical for Beta/1.0


Status: 📋 Planned for Post-1.0
Priority: 🟢 LOW (Quality of Life)
Estimated Time: 3-4 weeks
Recommended: After 1.0 release