diff --git a/DEGaplessParticleEmitter.cs b/DEGaplessParticleEmitter.cs index 2479ef7..67850da 100644 --- a/DEGaplessParticleEmitter.cs +++ b/DEGaplessParticleEmitter.cs @@ -1,78 +1,79 @@ -using System; +//1.2pre using UnityEngine; namespace DestructionEffects { - public class DEGaplessParticleEmitter : MonoBehaviour - { - public KSPParticleEmitter pEmitter; - - public float maxDistance = 1.1f; - - public bool emit = false; - - public Part part = null; - - public Rigidbody rb; - - - - void Start() - { - pEmitter = gameObject.GetComponent(); - pEmitter.emit = false; - - - if(part!=null) - { - Debug.Log ("Part "+part.partName+"'s explosionPotential: "+ part.explosionPotential); - } - - maxDistance = pEmitter.minSize/3; - - - } - - void FixedUpdate() - { - if(emit) - { - Vector3 velocity = (part == null) ? rb.velocity : part.rigidbody.velocity; - Vector3 originalLocalPosition = gameObject.transform.localPosition; - Vector3 originalPosition = gameObject.transform.position; - Vector3 startPosition = gameObject.transform.position + (velocity * Time.fixedDeltaTime); - float originalGapDistance = Vector3.Distance(originalPosition, startPosition); - float intermediateSteps = originalGapDistance/maxDistance; - - pEmitter.EmitParticle(); - gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, startPosition, maxDistance); - for(int i = 1; i < intermediateSteps; i++) - { - pEmitter.EmitParticle(); - gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, startPosition, maxDistance); - } - gameObject.transform.localPosition = originalLocalPosition; - } - - } - - public void EmitParticles() - { - Vector3 velocity = (part == null) ? rb.velocity : part.rigidbody.velocity; - Vector3 originalLocalPosition = gameObject.transform.localPosition; - Vector3 originalPosition = gameObject.transform.position; - Vector3 startPosition = gameObject.transform.position + (velocity * Time.fixedDeltaTime); - float originalGapDistance = Vector3.Distance(originalPosition, startPosition); - float intermediateSteps = originalGapDistance/maxDistance; - - //gameObject.transform.position = startPosition; - for(int i = 0; i < intermediateSteps; i++) - { - pEmitter.EmitParticle(); - gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, startPosition, maxDistance); - } - gameObject.transform.localPosition = originalLocalPosition; - } - } -} + public class DeGaplessParticleEmitter : MonoBehaviour + { + public bool Emit; + public float MaxDistance = 1.1f; + + public Part Part; + + public KSPParticleEmitter PEmitter; + + public Rigidbody Rb; + + private void Start() + { + PEmitter = gameObject.GetComponent(); + PEmitter.emit = false; + + if (Part != null) + { + Debug.Log("Part " + Part.partName + "'s explosionPotential: " + Part.explosionPotential); + } + + MaxDistance = PEmitter.minSize / 3; + } + + private void FixedUpdate() + { + if (!Emit) return; + + var velocity = Part?.GetComponent().velocity ?? Rb.velocity; + var originalLocalPosition = gameObject.transform.localPosition; + var originalPosition = gameObject.transform.position; + var startPosition = gameObject.transform.position + velocity * Time.fixedDeltaTime; + var originalGapDistance = Vector3.Distance(originalPosition, startPosition); + var intermediateSteps = originalGapDistance / MaxDistance; + + PEmitter.EmitParticle(); + gameObject.transform.position = Vector3.MoveTowards( + gameObject.transform.position, + startPosition, + MaxDistance); + for (var i = 1; i < intermediateSteps; i++) + { + PEmitter.EmitParticle(); + gameObject.transform.position = Vector3.MoveTowards( + gameObject.transform.position, + startPosition, + MaxDistance); + } + gameObject.transform.localPosition = originalLocalPosition; + } + + public void EmitParticles() + { + var velocity = Part?.GetComponent().velocity ?? Rb.velocity; + var originalLocalPosition = gameObject.transform.localPosition; + var originalPosition = gameObject.transform.position; + var startPosition = gameObject.transform.position + velocity * Time.fixedDeltaTime; + var originalGapDistance = Vector3.Distance(originalPosition, startPosition); + var intermediateSteps = originalGapDistance / MaxDistance; + + //gameObject.transform.position = startPosition; + for (var i = 0; i < intermediateSteps; i++) + { + PEmitter.EmitParticle(); + gameObject.transform.position = Vector3.MoveTowards( + gameObject.transform.position, + startPosition, + MaxDistance); + } + gameObject.transform.localPosition = originalLocalPosition; + } + } +} \ No newline at end of file diff --git a/DestructionEffects.csproj b/DestructionEffects.csproj index c240674..19f77dd 100644 --- a/DestructionEffects.csproj +++ b/DestructionEffects.csproj @@ -1,5 +1,5 @@ - - + + Debug x86 @@ -10,6 +10,27 @@ DestructionEffects DestructionEffects v3.5 + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true true @@ -31,18 +52,109 @@ x86 false + + true + bin\Debug\ + DEBUG; + full + AnyCPU + prompt + MinimumRecommendedRules.ruleset + + + bin\Release\ + AnyCPU + prompt + MinimumRecommendedRules.ruleset + true + - ..\..\..\Games\KSP\KSP 0.90 - Mod Dev\KSP_Data\Managed\Assembly-CSharp.dll + G:\Steam\steamapps\common\Kerbal Space Program\KSP_x64_Data\Managed\Assembly-CSharp.dll + False + + + False + G:\Steam\steamapps\common\Kerbal Space Program\KSP_x64_Data\Managed\Assembly-CSharp-firstpass.dll + False + + + False + G:\Steam\steamapps\common\Kerbal Space Program\KSP_x64_Data\Managed\KSPAssets.dll + False + - ..\..\..\Games\KSP\KSP 0.90 - Mod Dev\KSP_Data\Managed\UnityEngine.dll + G:\Steam\steamapps\common\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.dll + False + + + G:\Steam\steamapps\common\Kerbal Space Program\KSP_x64_Data\Managed\UnityEngine.UI.dll + False + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + + + + + + + + + + + + + @echo $(Targetname) +@echo ... +@echo set lpath vars from LocalDev storage... +set /p KSP_DIR=<"$(ProjectDir)LocalDev\ksp_dir.txt" +set /p PDB2MDB_EXE=<"$(ProjectDir)LocalDev\pdb2mdb_exe.txt" +set /p ZA_DIR=<"$(ProjectDir)LocalDev\7za_dir.txt" +set /p DIST_DIR=<"$(ProjectDir)LocalDev\dist_dir.txt" + +@echo distributing $(Targetname) files... +copy /Y "$(TargetPath)" "$(ProjectDir)Distribution\GameData\DestructionEffects\Plugins\" + +if $(ConfigurationName) == Debug ( +@echo building $(Targetname).dll.mdb file... +cd "$(TargetDir)" +call "%25PDB2MDB_EXE%25" $(Targetname).dll +copy /Y "$(TargetDir)$(Targetname).dll.mdb" "%25KSP_DIR%25\GameData\DestructionEffects\Plugins\" +) + +@echo packaging files... +if exist "%25DIST_DIR%25\DestructionEffects*.zip" del "%25DIST_DIR%25\DestructionEffects*.zip" +call "%25ZA_DIR%25\7za.exe" a -tzip -r "%25DIST_DIR%25\DestructionEffects.@(VersionNumber)_%25DATE:~4,2%25%25DATE:~7,2%25%25DATE:~10,4%25.zip" "$(ProjectDir)Distribution\*.*" + +@echo Deploy $(Targetname) Distribution files to test env: %25KSP_DIR%25\GameData... +@echo copying:"$(SolutionDir)Distribution\GameData" to "%25KSP_DIR%25\GameData" +xcopy /E /Y "$(SolutionDir)Distribution\GameData" "%25KSP_DIR%25\GameData" + +if $(ConfigurationName) == Debug ( +copy /Y "$(TargetDir)$(Targetname).pdb" "%25KSP_DIR%25\GameData\DestructionEffects\Plugins\" +) + +@echo Build/deploy complete! + \ No newline at end of file diff --git a/DestructionEffects.sln b/DestructionEffects.sln new file mode 100644 index 0000000..a6be84a --- /dev/null +++ b/DestructionEffects.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DestructionEffects", "DestructionEffects.csproj", "{7BBA3030-1674-4759-8DEA-2012D86512BC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Debug|x86.ActiveCfg = Debug|x86 + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Debug|x86.Build.0 = Debug|x86 + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Release|Any CPU.Build.0 = Release|Any CPU + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Release|x86.ActiveCfg = Release|x86 + {7BBA3030-1674-4759-8DEA-2012D86512BC}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Distribution/GameData/DestructionEffects/License.txt b/Distribution/GameData/DestructionEffects/License.txt new file mode 100644 index 0000000..4e92f51 --- /dev/null +++ b/Distribution/GameData/DestructionEffects/License.txt @@ -0,0 +1,8 @@ +This mod is released under the Creative Commons 0 license. + +"The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. + +You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission. " + +CC0 1.0 Universal +https://creativecommons.org/publicdomain/zero/1.0/ \ No newline at end of file diff --git a/Distribution/GameData/DestructionEffects/Models/FlameEffect/Torchanimation_135.png b/Distribution/GameData/DestructionEffects/Models/FlameEffect/Torchanimation_135.png new file mode 100644 index 0000000..441f876 Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Models/FlameEffect/Torchanimation_135.png differ diff --git a/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameA.png b/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameA.png new file mode 100644 index 0000000..8337f5e Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameA.png differ diff --git a/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameD.png b/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameD.png new file mode 100644 index 0000000..1e6cb21 Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Models/FlameEffect/flameD.png differ diff --git a/Distribution/GameData/DestructionEffects/Models/FlameEffect/model.mu b/Distribution/GameData/DestructionEffects/Models/FlameEffect/model.mu new file mode 100644 index 0000000..3b3e751 Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Models/FlameEffect/model.mu differ diff --git a/Distribution/GameData/DestructionEffects/Models/FlameEffect/muzzleSmoke.png b/Distribution/GameData/DestructionEffects/Models/FlameEffect/muzzleSmoke.png new file mode 100644 index 0000000..25b51fa Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Models/FlameEffect/muzzleSmoke.png differ diff --git a/Distribution/GameData/DestructionEffects/Plugins/DestructionEffects.dll b/Distribution/GameData/DestructionEffects/Plugins/DestructionEffects.dll new file mode 100644 index 0000000..f631c7e Binary files /dev/null and b/Distribution/GameData/DestructionEffects/Plugins/DestructionEffects.dll differ diff --git a/FlamingJointScript.cs b/FlamingJointScript.cs index 145f360..1c66d7e 100644 --- a/FlamingJointScript.cs +++ b/FlamingJointScript.cs @@ -1,80 +1,78 @@ -using System; +//1.2 using UnityEngine; namespace DestructionEffects { - public class FlamingJointScript : MonoBehaviour - { - float maxCombineDistance = 0.6f; - - float shrinkRateSmoke = 1f; - float shrinkRateFlame = 0.35f; - - float highestEnergy = 0; - float destroyTimerStart = 0; - GameObject destroyer; - - public void Start() - { - foreach(GameObject otherFlame in FlamingJoints.flameObjects) - { - if((gameObject.transform.position-otherFlame.transform.position).sqrMagnitude < (maxCombineDistance * maxCombineDistance)) - { - Debug.Log ("== Flame combined =="); - Destroy(gameObject); - return; - } - } - - foreach(var pe in gameObject.GetComponentsInChildren()) - { - Color color = pe.material.color; - color.a = color.a/2; - pe.material.SetColor("_TintColor", color); - pe.force = -FlightGlobals.getGeeForceAtPosition(transform.position)/3; - if(pe.maxEnergy > highestEnergy) - { - destroyer = pe.gameObject; - highestEnergy = pe.maxEnergy; - } - } - FlamingJoints.flameObjects.Add(gameObject); - - } - - public void FixedUpdate() - { - foreach(var pe in gameObject.GetComponentsInChildren()) - { - float shrinkRate = pe.gameObject.name.Contains("smoke") ? shrinkRateSmoke : shrinkRateFlame; - pe.maxSize = Mathf.MoveTowards(pe.maxSize, 0, shrinkRate * Time.fixedDeltaTime); - pe.minSize = Mathf.MoveTowards(pe.minSize, 0, shrinkRate * Time.fixedDeltaTime); - if(pe.maxSize < 0.1f && pe.gameObject == destroyer && destroyTimerStart == 0) - { - destroyTimerStart = Time.time; - } - - if(pe.gameObject.GetComponent()) - { - pe.gameObject.GetComponent().intensity = UnityEngine.Random.Range(0f, pe.maxSize/6); - } - } - - - - if(destroyTimerStart != 0 && Time.time-destroyTimerStart > highestEnergy) - { - GameObject.Destroy(gameObject); - } - } - - void OnDestroy() - { - if(FlamingJoints.flameObjects.Contains(gameObject)) - { - FlamingJoints.flameObjects.Remove(gameObject); - } - } - } -} + public class FlamingJointScript : MonoBehaviour + { + private readonly float _maxCombineDistance = 0.6f; + private readonly float _shrinkRateFlame = 0.4f; // from 0.35f //from 0.75f //from 1.75f + + private readonly float _shrinkRateSmoke = 0.1f; //from 1f//from 2f// + private GameObject _destroyer; + + private float _destroyTimerStart; + + private float _highestEnergy; + + public void Start() + { + foreach (var otherFlame in FlamingJoints.FlameObjects) + { + if ( + !((gameObject.transform.position - otherFlame.transform.position).sqrMagnitude + < _maxCombineDistance * _maxCombineDistance)) continue; + Debug.Log("== Flame combined =="); + Destroy(gameObject); + return; + } + + foreach (var pe in gameObject.GetComponentsInChildren()) + { + var color = pe.material.color; + color.a = color.a / 2; + pe.material.SetColor("_TintColor", color); + pe.force = -FlightGlobals.getGeeForceAtPosition(transform.position) / 3; + if (!(pe.maxEnergy > _highestEnergy)) continue; + _destroyer = pe.gameObject; + _highestEnergy = pe.maxEnergy; + } + FlamingJoints.FlameObjects.Add(gameObject); + } + + public void FixedUpdate()//pe is particle emitter + { + foreach (var pe in gameObject.GetComponentsInChildren()) + { + var shrinkRate = pe.gameObject.name.Contains("smoke") ? _shrinkRateSmoke : _shrinkRateFlame; + pe.maxSize = Mathf.MoveTowards(pe.maxSize, 0, shrinkRate * Time.fixedDeltaTime); + pe.minSize = Mathf.MoveTowards(pe.minSize, 0, shrinkRate * Time.fixedDeltaTime); + if (pe.maxSize < 0.1f && pe.gameObject == _destroyer && _destroyTimerStart == 0) + { + _destroyTimerStart = Time.time; + } + + var lightComponent = pe.gameObject.GetComponent(); + + if (lightComponent != null) + { + lightComponent.intensity = Random.Range(0f, pe.maxSize / 6); + } + } + + if (_destroyTimerStart != 0 && Time.time - _destroyTimerStart > _highestEnergy) + { + Destroy(gameObject); + } + } + + private void OnDestroy() + { + if (FlamingJoints.FlameObjects.Contains(gameObject)) + { + FlamingJoints.FlameObjects.Remove(gameObject); + } + } + } +} \ No newline at end of file diff --git a/FlamingJoints.cs b/FlamingJoints.cs index bb9e528..fddd76c 100644 --- a/FlamingJoints.cs +++ b/FlamingJoints.cs @@ -1,70 +1,102 @@ -using System; -using UnityEngine; using System.Collections.Generic; +using System.Linq; +using UnityEngine; namespace DestructionEffects { - [KSPAddon(KSPAddon.Startup.Flight, false)] - public class FlamingJoints : MonoBehaviour - { - - public static List flameObjects = new List(); - - public void Start() - { - GameEvents.onPartJointBreak.Add(onPartJointBreak); - - } - - public void onPartJointBreak(PartJoint partJoint) - { - - if(partJoint.Target!=null && partJoint.Target.PhysicsSignificance != 1) - { - Part part = partJoint.Target; - bool attachFlames = false; - - if(part.partInfo.title.Contains("Wing") - || part.partInfo.title.Contains("Fuselage") - || part.FindModuleImplementing() - || part.FindModuleImplementing() - ) - { - attachFlames = true; - } - else - { - foreach(PartResource resource in part.Resources) - { - if(resource.resourceName.Contains("Fuel") || resource.resourceName.Contains("Ox")) - { - attachFlames = true; - } - } - } - if(attachFlames) - { - GameObject flameObject2 = (GameObject) GameObject.Instantiate(GameDatabase.Instance.GetModel("DestructionEffects/Models/FlameEffect/model"), partJoint.transform.position, Quaternion.identity); - flameObject2.SetActive(true); - flameObject2.transform.parent = partJoint.Target.transform; - flameObject2.AddComponent(); - foreach(var pe in flameObject2.GetComponentsInChildren()) - { - if(pe.useWorldSpace) - { - DEGaplessParticleEmitter gpe = pe.gameObject.AddComponent(); - gpe.part = partJoint.Target; - gpe.emit = true; - - } - } - } - } - - - } - - - } -} + [KSPAddon(KSPAddon.Startup.Flight, false)] + public class FlamingJoints : MonoBehaviour + { + public static List FlameObjects = new List(); + + public static List PartTypesTriggeringUnwantedJointBreakEvents = new List(9) + { + "decoupler", + "separator", + "docking", + "grappling", + "landingleg", + "clamp", + "gear", + "wheel", + "Turret", + "MissileLauncher" + + }; + //1553 void OnPartJointBreak(PartJoint j, float breakForce) + public void Start() + { + GameEvents.onPartJointBreak.Add(OnPartJointBreak); + } + + public void OnPartJointBreak(PartJoint partJoint, float breakForce) + { + if (partJoint.Target == null) + { + return; + } + if (partJoint.Target.PhysicsSignificance == 1) + { + return; + } + if (!ShouldFlamesBeAttached(partJoint)) + { + return; + } + // if part has module missile turret part.FindModuleImplementing()) + // if (GameObject.FindModuleImplementing()) + // { + // return; + // } + + AttachFlames(partJoint); + } + + private static void AttachFlames(PartJoint partJoint) + { + var flameObject2 = + (GameObject) + Instantiate( + GameDatabase.Instance.GetModel("DestructionEffects/Models/FlameEffect/model"),//Hard address for flame model + partJoint.transform.position, + Quaternion.identity); + + flameObject2.SetActive(true); + flameObject2.transform.parent = partJoint.Target.transform; + flameObject2.AddComponent(); + + foreach (var pe in flameObject2.GetComponentsInChildren()) + { + if (!pe.useWorldSpace) continue; + + var gpe = pe.gameObject.AddComponent(); + gpe.Part = partJoint.Target; + gpe.Emit = true; + } + } + + private static bool ShouldFlamesBeAttached(PartJoint partJoint) + { + if (IsPartHostTypeAJointBreakerTrigger(partJoint.Host.name.ToLower())) + { + return false; + } + + var part = partJoint.Target;//SM edit for DE on ships and ship parts, adding bow, hull, stern, superstructure + + if (part.partInfo.title.Contains("Wing") || part.partInfo.title.Contains("Fuselage") || part.partInfo.title.Contains("Bow") || part.partInfo.title.Contains("Stern") || part.partInfo.title.Contains("Hull") || part.partInfo.title.Contains("Superstructure") || part.FindModuleImplementing() || part.FindModuleImplementing())/*|| part.partInfo.title.Contains("Turret") */ + { + return true; + } + + return + part.Resources//SM edit adding EC Ammo and Cannonshells + .Any(resource => resource.resourceName.Contains("Fuel") || resource.resourceName.Contains("Ox") || resource.resourceName.Contains("Elec") || resource.resourceName.Contains("Amm") || resource.resourceName.Contains("Cann")); + } + private static bool IsPartHostTypeAJointBreakerTrigger(string hostPartName) + { + return PartTypesTriggeringUnwantedJointBreakEvents.Any(x => hostPartName.Contains(x)); + } + } +} \ No newline at end of file diff --git a/LocalDev/7za_dir.txt b/LocalDev/7za_dir.txt new file mode 100644 index 0000000..a81379c --- /dev/null +++ b/LocalDev/7za_dir.txt @@ -0,0 +1 @@ +G:\7za\x64 \ No newline at end of file diff --git a/LocalDev/dist_dir.txt b/LocalDev/dist_dir.txt new file mode 100644 index 0000000..b601a76 --- /dev/null +++ b/LocalDev/dist_dir.txt @@ -0,0 +1 @@ +D:\PROGRAMACION\KSP_Development\Releases\ \ No newline at end of file diff --git a/LocalDev/ksp_dir.txt b/LocalDev/ksp_dir.txt new file mode 100644 index 0000000..e25c49f --- /dev/null +++ b/LocalDev/ksp_dir.txt @@ -0,0 +1 @@ +G:\GAMES\KERBAL\Kerbal Space Program_DEV_12 \ No newline at end of file diff --git a/LocalDev/mono_exe.txt b/LocalDev/mono_exe.txt new file mode 100644 index 0000000..e1e15f8 --- /dev/null +++ b/LocalDev/mono_exe.txt @@ -0,0 +1 @@ +E:\Program Files (x86)\Unity\Editor\Data\MonoBleedingEdge\bin\mono.exe \ No newline at end of file diff --git a/LocalDev/pdb2mdb_exe.txt b/LocalDev/pdb2mdb_exe.txt new file mode 100644 index 0000000..734d54f --- /dev/null +++ b/LocalDev/pdb2mdb_exe.txt @@ -0,0 +1 @@ +G:\pdb2mdb\pdb2mdb.exe \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..da9456a --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DestructionEffects")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Paolo Encarnacion")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8714d31a-d1ef-47f2-aaea-f7bce82f9f9e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("2.0")] +[assembly: AssemblyFileVersion("2.0.0.0")] diff --git a/README.md b/README.md new file mode 100644 index 0000000..f0b9f20 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# DestructionEffects +Adds flames and smoke to joint-breaks of certain parts in ksp. + +Joint breaks and flames are associated with the following parts: + +decoupler, +seperator, +grappling, +landingleg, +clamp, +gear , +wheel, +fuselage, +wing, + + ship parts hull, stern, superstructure and bow + +and any part containing the following resources; + +Fuel, +Oxidizer, +Ammo, +CannonShells, +Electric charge,