Example #1
0
    public Scene(IArchiveDirectory dataDir, Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, TrackedDeviceBufferManager trackedDeviceBufferManager, ControllerManager controllerManager)
    {
        var textureCache = new TextureCache(device);

        toneMappingSettings = new ToneMappingSettings();
        iblEnvironment      = new ImageBasedLightingEnvironment(device, standardSamplers, dataDir, InitialSettings.Environment, InitialSettings.EnvironmentRotation);
        backdrop            = new Backdrop(device, shaderCache);
        floor = new PlayspaceFloor(device, shaderCache);
        renderModelRenderer = new RenderModelRenderer(device, shaderCache, trackedDeviceBufferManager);
        primitiveRenderer   = new MeshRenderer(device, shaderCache, Matrix.Translation(0, 1.25f, 0), GeometricPrimitiveFactory.MakeSphere(0.5f, 100).AsTriMesh());

        var shapeNormalsLoader   = new ShapeNormalsLoader(dataDir, device, textureCache);
        var figureRendererLoader = new FigureRendererLoader(dataDir, device, shaderCache, textureCache);
        var figureLoader         = new FigureLoader(dataDir, device, shaderCache, shapeNormalsLoader, figureRendererLoader);

        actor = Actor.Load(dataDir, device, shaderCache, controllerManager, figureLoader);

        var iblMenu = LightingEnvironmentMenu.MakeMenuLevel(dataDir, iblEnvironment);
        var toneMappingMenuLevel    = new ToneMappingMenuLevel(toneMappingSettings);
        var renderSettingsMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Lighting Enviroment", iblMenu),
            new SubLevelMenuItem("Tone Mapping", toneMappingMenuLevel),
            new FloorVisibilityToggleMenuItem(floor)
            );
        var scenePersistenceMenuLevel = ScenePersistenceMenuLevel.Make(this);
        var appMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Save/Load", scenePersistenceMenuLevel),
            new SubLevelMenuItem("Render Settings", renderSettingsMenuLevel)
            );

        var rootMenuLevel = new CombinedMenuLevel(appMenuLevel, actor.MenuLevel);

        menu = new Menu(device, shaderCache, trackedDeviceBufferManager, controllerManager, rootMenuLevel);
    }
Example #2
0
    public Actor(Device device, List <Outfit> outfits, ActorModel model, FigureLoader figureLoader, FigureFacade mainFigure, FigureFacade hairFigure, ActorBehavior behavior)
    {
        this.outfits      = outfits;
        this.model        = model;
        this.figureLoader = figureLoader;
        this.mainFigure   = mainFigure;
        this.hairFigure   = hairFigure;
        this.behavior     = behavior;

        clothingFigures = new FigureFacade[0];

        mainFigure.Animator = new MainFigureAnimator(this);

        figureGroup = new FigureGroup(device, mainFigure, new FigureFacade[0]);
        SyncFigureGroup();
    }
    public static Actor Load(IArchiveDirectory dataDir, Device device, ShaderCache shaderCache, ControllerManager controllerManager, FigureLoader figureLoader)
    {
        var mainFigure = figureLoader.Load(InitialSettings.Main, null);

        var actorModel = ActorModel.Load(mainFigure.Definition, InitialSettings.Animation);

        var hairFigure = InitialSettings.Hair != null?figureLoader.Load(InitialSettings.Hair, mainFigure.Definition) : null;

        var behavior = ActorBehavior.Load(controllerManager, mainFigure.Definition.Directory, actorModel);

        var characters = Character.LoadList(dataDir);
        var outfits    = Outfit.LoadList(dataDir);

        var actor           = new Actor(device, characters, outfits, actorModel, figureLoader, mainFigure, hairFigure, behavior);
        var clothingFigures = InitialSettings.Clothing
                              .Select(clothingFigureName => figureLoader.Load(clothingFigureName, mainFigure.Definition))
                              .ToArray();

        actor.SetClothingFigures(clothingFigures);

        return(actor);
    }