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); }; }
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>()); }
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>()); }
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); } }; }
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]); }
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); } }; }