Beispiel #1
0
    public CharactersMenuLevel(FigureDefinition definition, FigureModel model)
    {
        var materialSetDict = definition.MaterialSetOptions.ToDictionary(item => item.Label, item => item);

        var shapesMenuLevel    = new ShapesMenuLevel(definition, model);
        var materialsMenuLevel = new MaterialsMenuLevel(definition, model);
        var advancedMenuLevel  = new StaticMenuLevel(
            new SubLevelMenuItem("Shape", shapesMenuLevel),
            new SubLevelMenuItem("Skin", materialsMenuLevel)
            );

        var detailsMenuLevel = new MaterialSetVariantsMenuLevel(definition, model);

        items = new List <IMenuItem> {
        };
        items.Add(new SubLevelMenuItem("Mix & Match", advancedMenuLevel));
        items.Add(new SubLevelMenuItem("Character Details", detailsMenuLevel));
        foreach (var shape in definition.ShapeOptions)
        {
            if (materialSetDict.TryGetValue(shape.Label, out var materialSet))
            {
                items.Add(new CharacterMenuItem(model, shape, materialSet));
            }
        }
    }
Beispiel #2
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);
    }
    public static IMenuLevel MakeHairMenuLevel(FigureFacade hairFigure)
    {
        if (hairFigure == null)
        {
            return(null);
        }

        var shapesMenuLevel    = new ShapesMenuLevel(hairFigure.Definition, hairFigure.Model);
        var materialsMenuLevel = new MaterialsMenuLevel(hairFigure.Definition, hairFigure.Model);

        var hairMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Style", shapesMenuLevel),
            new SubLevelMenuItem("Color", materialsMenuLevel)
            );

        return(hairMenuLevel);
    }
    public static IMenuLevel MakeRootMenuLevel(Actor actor)
    {
        var model                 = actor.Model;
        var channelMenuLevel      = ChannelMenuLevel.MakeRootLevelForFigure(model);
        var poseControlsMenuLevel = channelMenuLevel.Extract(new string[] { "Pose Controls" });
        var expressionsMenuLevel  = poseControlsMenuLevel.Extract(new string[] { "Head", "Expressions" });
        var behaviorMenuLevel     = new BehaviorMenuLevel(model.Behavior);

        var charactersMenuLevel = new CharactersMenuLevel(actor.Characters, actor.Main.Definition, actor.Main.Model);

        var shapingItems           = new List <IMenuItem>();
        var channelShapesMenuLevel = channelMenuLevel.Extract(new string[] { "Shapes" });

        shapingItems.Add(new ActionMenuItem("Reset Shape", () => model.ResetShape()));
        shapingItems.AddRange(channelShapesMenuLevel.GetItems());
        var shapingMenuLevel = new StaticMenuLevel(shapingItems.ToArray());

        var animationsMenuLevel = new AnimationMenuLevel(model.Animation);

        var hairMenuLevel = MakeHairMenuLevel(actor.Hair);

        var clothingMenuLevel = ClothingMenuLevel.Make(actor);

        List <IMenuItem> items = new List <IMenuItem> {
        };

        items.Add(new SubLevelMenuItem("Characters", charactersMenuLevel));
        items.Add(new SubLevelMenuItem("Clothing", clothingMenuLevel));
        if (hairMenuLevel != null)
        {
            items.Add(new SubLevelMenuItem("Hair", hairMenuLevel));
        }
        items.Add(new SubLevelMenuItem("Shaping", shapingMenuLevel));
        items.Add(new SubLevelMenuItem("Behavior", behaviorMenuLevel));
        items.Add(new SubLevelMenuItem("Expressions", expressionsMenuLevel));
        items.Add(new SubLevelMenuItem("Posing", poseControlsMenuLevel));
        items.Add(new SubLevelMenuItem("Animations", animationsMenuLevel));
        items.Add(new ActionMenuItem("Reset Pose", () => model.ResetPose()));

        var figureMenuLevel = new StaticMenuLevel(items.ToArray());

        return(figureMenuLevel);
    }
 public IMenuLevel MakeMaterialsMenuLevel(Outfit activeOutfit)
 {
     if (activeOutfit?.Fabrics != null)
     {
         var items = activeOutfit.Fabrics
                     .Select(fabric => new FabricMenuItem(actor, fabric))
                     .ToArray();
         return(new StaticMenuLevel(items));
     }
     else
     {
         var individualMaterialItems = actor.Clothing
                                       .SelectMany(figure => figure.Definition.MaterialSetOptions
                                                   .Select(materialSet => new MaterialSetMenuItem(figure.Model, materialSet)))
                                       .ToList <IToggleMenuItem>();
         var compositeMaterialItems = CompositeToggleMenuItem.CombineByLabel(individualMaterialItems);
         var materialsMenuLevel     = new StaticMenuLevel(compositeMaterialItems.ToArray());
         return(materialsMenuLevel);
     }
 }
    public CharactersMenuLevel(List <Character> characters, FigureDefinition definition, FigureModel model)
    {
        var shapesMenuLevel    = new ShapesMenuLevel(definition, model);
        var materialsMenuLevel = new MaterialsMenuLevel(definition, model);
        var advancedMenuLevel  = new StaticMenuLevel(
            new SubLevelMenuItem("Shape", shapesMenuLevel),
            new SubLevelMenuItem("Skin", materialsMenuLevel)
            );

        var detailsMenuLevel = new MaterialSetVariantsMenuLevel(definition, model);

        items = new List <IMenuItem> {
        };
        items.Add(new SubLevelMenuItem("Mix & Match", advancedMenuLevel));
        items.Add(new SubLevelMenuItem("Character Details", detailsMenuLevel));
        foreach (var character in characters)
        {
            items.Add(new CharacterMenuItem(model, character));
        }
    }