private void CreateContainers(ShipPartDNA energyDNA, ShipPartDNA fuelDNA) { if (_containers != null) { throw new InvalidOperationException("Existing containers should have been wiped out before calling CreateContainers"); } _containers = new ContainerStuff(); // Energy _containers.Energy = new EnergyTank(_editorOptions, _itemOptions, energyDNA); _containers.Energy.QuantityCurrent = _containers.Energy.QuantityMax; // Fuel _containers.Fuel = new FuelTank(_editorOptions, _itemOptions, fuelDNA); _containers.Fuel.QuantityCurrent = _containers.Fuel.QuantityMax; #region Ship Visuals (energy) // WPF ModelVisual3D model = new ModelVisual3D(); model.Content = _containers.Energy.Model; _viewport.Children.Add(model); _containers.EnergyVisual = model; // Physics CollisionHull hull = _containers.Energy.CreateCollisionHull(_world); _containers.EnergyBody = new Body(hull, Matrix3D.Identity, _containers.Energy.TotalMass, new Visual3D[] { model }); hull.Dispose(); _containers.EnergyBody.MaterialGroupID = _material_Ship; _containers.EnergyBody.LinearDamping = .01f; _containers.EnergyBody.AngularDamping = new Vector3D(.01f, .01f, .01f); #endregion #region Ship Visuals (fuel) // WPF model = new ModelVisual3D(); model.Content = _containers.Fuel.Model; _viewport.Children.Add(model); _containers.FuelVisual = model; // Physics hull = _containers.Fuel.CreateCollisionHull(_world); _containers.FuelBody = new Body(hull, Matrix3D.Identity, _containers.Fuel.TotalMass, new Visual3D[] { model }); hull.Dispose(); _containers.FuelBody.MaterialGroupID = _material_Ship; _containers.FuelBody.LinearDamping = .01f; _containers.FuelBody.AngularDamping = new Vector3D(.01f, .01f, .01f); #endregion }
private void ClearContainers() { ClearDebugVisuals(); ClearLinks(); if (_containers != null) { _viewport.Children.Remove(_containers.EnergyVisual); _viewport.Children.Remove(_containers.FuelVisual); _containers.EnergyBody.Dispose(); _containers.FuelBody.Dispose(); _containers = null; } }