Пример #1
0
        public ParticleSystemView(Func <IntPtr, Game> createGame, ParticleSystemDefinition particleSystemDefinition)
        {
            CreateGame = h =>
            {
                var game = createGame(h);

                var particleSystem = new ParticleSystem(
                    game.ContentManager,
                    particleSystemDefinition,
                    () => ref WorldIdentity);

                game.Updating += (sender, e) =>
                {
                    particleSystem.Update(e.GameTime);
                };

                game.BuildingRenderList += (sender, e) =>
                {
                    particleSystem.BuildRenderList(e.RenderList, Matrix4x4.Identity);
                };

                game.Scene3D = new Scene3D(
                    game,
                    new ArcballCameraController(Vector3.Zero, 200),
                    null,
                    null,
                    null,
                    new GameObjectCollection(game.ContentManager),
                    new WaypointCollection(),
                    new WaypointPathCollection(),
                    WorldLighting.CreateDefault());

                return(game);
            };
        }
Пример #2
0
        public ObjectDefinitionView(AssetViewContext context, ObjectDefinition objectDefinition)
            : base(context)
        {
            var gameObjects = new GameObjectCollection(context.Game.ContentManager);

            _gameObject = gameObjects.Add(objectDefinition, context.Game.CivilianPlayer);

            _modelConditionStates = _gameObject.ModelConditionStates.ToList();
            _selectedIndex        = 0;

            context.Game.Scene3D = new Scene3D(
                context.Game,
                new ArcballCameraController(Vector3.Zero, 200),
                null,
                null,
                Array.Empty <Terrain.WaterArea>(),
                Array.Empty <Terrain.Road>(),
                Array.Empty <Terrain.Bridge>(),
                null,
                gameObjects,
                new WaypointCollection(),
                new WaypointPathCollection(),
                WorldLighting.CreateDefault(),
                Array.Empty <Player>(),
                Array.Empty <Team>());
        }
Пример #3
0
        public ParticleSystemView(AssetViewContext context, ParticleSystemDefinition particleSystemDefinition)
            : base(context)
        {
            var game = context.Game;

            var particleSystem = AddDisposable(new ParticleSystem(
                                                   game.ContentManager,
                                                   particleSystemDefinition,
                                                   () => ref WorldIdentity));

            void onUpdating(object sender, GameUpdatingEventArgs e)
            {
                particleSystem.Update(e.GameTime);
            }

            game.Updating += onUpdating;

            AddDisposeAction(() => game.Updating -= onUpdating);

            void onBuildingRenderList(object sender, BuildingRenderListEventArgs e)
            {
                particleSystem.BuildRenderList(e.RenderList, Matrix4x4.Identity);
            }

            game.BuildingRenderList += onBuildingRenderList;

            AddDisposeAction(() => game.BuildingRenderList += onBuildingRenderList);

            game.Scene3D = new Scene3D(
                game,
                new ArcballCameraController(Vector3.Zero, 200),
                null,
                null,
                Array.Empty <Terrain.WaterArea>(),
                Array.Empty <Terrain.Road>(),
                Array.Empty <Terrain.Bridge>(),
                null,
                new GameObjectCollection(game.ContentManager),
                new WaypointCollection(),
                new WaypointPathCollection(),
                WorldLighting.CreateDefault(),
                Array.Empty <Player>(),
                Array.Empty <Team>());
        }
Пример #4
0
        public ObjectDefinitionView(Func <IntPtr, Game> createGame, ObjectDefinition objectDefinition)
        {
            var listBox = new ListBox
            {
                Width           = 200,
                ItemTextBinding = Binding.Property((BitArray <ModelConditionFlag> x) => x.DisplayName)
            };

            Panel1 = listBox;

            Panel2 = new GameControl
            {
                CreateGame = h =>
                {
                    var game = createGame(h);

                    var gameObjects = new GameObjectCollection(game.ContentManager);
                    var gameObject  = gameObjects.Add(objectDefinition);

                    listBox.SelectedValueChanged += (sender, e) =>
                    {
                        var modelConditionState = (BitArray <ModelConditionFlag>)listBox.SelectedValue;
                        gameObject.SetModelConditionFlags(modelConditionState);
                    };
                    listBox.DataStore     = gameObject.ModelConditionStates.ToList();
                    listBox.SelectedIndex = 0;

                    game.Scene3D = new Scene3D(
                        game,
                        new ArcballCameraController(Vector3.Zero, 200),
                        null,
                        null,
                        null,
                        gameObjects,
                        new WaypointCollection(),
                        new WaypointPathCollection(),
                        WorldLighting.CreateDefault(),
                        Array.Empty <Player>(),
                        Array.Empty <Team>());

                    return(game);
                }
            };
        }
Пример #5
0
        public W3dView(AssetViewContext context)
            : base(context)
        {
            var game = context.Game;

            var modelInstance = game.ContentManager
                                .Load <Model>(context.Entry.FilePath)
                                .CreateInstance(game.GraphicsDevice);

            void onUpdating(object sender, GameUpdatingEventArgs e) => modelInstance.Update(e.GameTime);

            game.Updating += onUpdating;
            AddDisposeAction(() => game.Updating -= onUpdating);

            void onBuildingRenderList(object sender, BuildingRenderListEventArgs e)
            {
                modelInstance.SetWorldMatrix(Matrix4x4.Identity);
                modelInstance.BuildRenderList(e.RenderList, e.Camera);
            }

            game.BuildingRenderList += onBuildingRenderList;
            AddDisposeAction(() => game.BuildingRenderList -= onBuildingRenderList);

            var enclosingBoundingBox = GetEnclosingBoundingBox(modelInstance);

            var cameraController = new ArcballCameraController(
                enclosingBoundingBox.GetCenter(),
                Vector3.Distance(enclosingBoundingBox.Min, enclosingBoundingBox.Max));

            game.Scene3D = new Scene3D(
                game,
                cameraController,
                null,
                null,
                Array.Empty <Terrain.Road>(),
                null,
                new GameObjectCollection(game.ContentManager),
                new WaypointCollection(),
                new WaypointPathCollection(),
                WorldLighting.CreateDefault(),
                Array.Empty <Player>(),
                Array.Empty <Team>());

            var animations = new List <AnimationInstance>(modelInstance.AnimationInstances);

            var w3dFile = W3dFile.FromFileSystemEntry(context.Entry);

            // If this is a skin file, load "external" animations.
            var externalAnimations = new List <AnimationInstance>();

            if (w3dFile.HLod != null && w3dFile.HLod.Header.Name.EndsWith("_SKN", StringComparison.OrdinalIgnoreCase))
            {
                var namePrefix   = w3dFile.HLod.Header.Name.Substring(0, w3dFile.HLod.Header.Name.LastIndexOf('_') + 1);
                var parentFolder = Path.GetDirectoryName(w3dFile.FilePath);
                var pathPrefix   = Path.Combine(parentFolder, namePrefix);
                foreach (var animationFileEntry in context.Entry.FileSystem.GetFiles(parentFolder))
                {
                    if (!animationFileEntry.FilePath.StartsWith(pathPrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }

                    var animationModel = game.ContentManager.Load <Model>(animationFileEntry.FilePath);
                    foreach (var animation in animationModel.Animations)
                    {
                        var externalAnimationInstance = new AnimationInstance(modelInstance, animation);
                        modelInstance.AnimationInstances.Add(externalAnimationInstance);
                        externalAnimations.Add(externalAnimationInstance);
                    }
                }
            }

            _subObjects = new List <W3dItem>();

            _subObjects.Add(new W3dModelItem());

            foreach (var animation in animations)
            {
                _subObjects.Add(new W3dAnimationItem(animation, "Animation"));
            }

            foreach (var animation in externalAnimations)
            {
                _subObjects.Add(new W3dAnimationItem(animation, "External Animation"));
            }

            ActivateItem(_subObjects[0]);
        }
Пример #6
0
        public W3dView(FileSystemEntry entry, Func <IntPtr, Game> createGame)
        {
            _listBox = new ListBox
            {
                Width           = 250,
                ItemTextBinding = Binding.Property((W3dItem v) => v.Name)
            };
            _listBox.SelectedValueChanged += OnSelectedValueChanged;
            Panel1 = _listBox;

            _listBox.SelectedIndex = 0;

            Panel2 = new GameControl
            {
                CreateGame = h =>
                {
                    var game = createGame(h);

                    var modelInstance = game.ContentManager
                                        .Load <Model>(entry.FilePath)
                                        .CreateInstance(game.GraphicsDevice);

                    game.Updating += (sender, e) =>
                    {
                        modelInstance.Update(e.GameTime);
                    };

                    game.BuildingRenderList += (sender, e) =>
                    {
                        modelInstance.SetWorldMatrix(Matrix4x4.Identity);
                        modelInstance.BuildRenderList(e.RenderList, e.Camera);
                    };

                    var enclosingBoundingBox = GetEnclosingBoundingBox(modelInstance);

                    var cameraController = new ArcballCameraController(
                        enclosingBoundingBox.GetCenter(),
                        Vector3.Distance(enclosingBoundingBox.Min, enclosingBoundingBox.Max));

                    game.Scene3D = new Scene3D(
                        game,
                        cameraController,
                        null,
                        null,
                        null,
                        new GameObjectCollection(game.ContentManager),
                        new WaypointCollection(),
                        new WaypointPathCollection(),
                        WorldLighting.CreateDefault());

                    var animations = new List <AnimationInstance>(modelInstance.AnimationInstances);

                    var w3dFile = W3dFile.FromFileSystemEntry(entry);

                    // If this is a skin file, load "external" animations.
                    var externalAnimations = new List <AnimationInstance>();
                    if (w3dFile.HLod != null && w3dFile.HLod.Header.Name.EndsWith("_SKN", StringComparison.OrdinalIgnoreCase))
                    {
                        var namePrefix   = w3dFile.HLod.Header.Name.Substring(0, w3dFile.HLod.Header.Name.LastIndexOf('_') + 1);
                        var parentFolder = Path.GetDirectoryName(w3dFile.FilePath);
                        var pathPrefix   = Path.Combine(parentFolder, namePrefix);
                        foreach (var animationFileEntry in entry.FileSystem.GetFiles(parentFolder))
                        {
                            if (!animationFileEntry.FilePath.StartsWith(pathPrefix, StringComparison.OrdinalIgnoreCase))
                            {
                                continue;
                            }

                            var animationModel = game.ContentManager.Load <Model>(animationFileEntry.FilePath);
                            foreach (var animation in animationModel.Animations)
                            {
                                var externalAnimationInstance = new AnimationInstance(modelInstance, animation);
                                modelInstance.AnimationInstances.Add(externalAnimationInstance);
                                externalAnimations.Add(externalAnimationInstance);
                            }
                        }
                    }

                    var subObjects = new List <W3dItem>();

                    subObjects.Add(new W3dModelItem());

                    foreach (var animation in animations)
                    {
                        subObjects.Add(new W3dAnimationItem(animation, "Animation"));
                    }

                    foreach (var animation in externalAnimations)
                    {
                        subObjects.Add(new W3dAnimationItem(animation, "External Animation"));
                    }

                    _listBox.DataStore = subObjects;

                    return(game);
                }
            };
        }