-
Notifications
You must be signed in to change notification settings - Fork 114
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor HazardousOcean into HazardousBody
- Not bound to an ocean anymore - Can be control using an altitude, longitude and latitude multiplier - Can have a different interval (so it is not neccessarily applied every frame)
- release-223
- release-222
- release-221
- release-220
- release-219
- release-218
- release-217
- release-216
- release-215
- release-214
- release-213
- release-212
- release-211
- release-210
- release-209
- release-209_RC1
- release-208
- release-207
- release-206
- release-205
- release-204
- release-203
- release-202
- release-201
- release-200
- release-199
- release-198
- release-197
- release-196
- release-196_RC1
- release-195
- release-194
- release-193
- release-192
- release-191
- release-190
- release-190_RC6
- release-190_RC5
- release-190_RC4
- release-190_RC3
- release-190_RC2
- release-190_RC1
- release-189
- release-188
- release-187
- release-186
- release-185
- release-184
- release-183
- release-182
- release-181
- release-180
- release-179
- release-178
- release-177
- release-176
- release-176_RC2
- release-176_RC1
- release-175
- release-174
- release-173
- release-172
- release-171
- release-170
- release-170_RC2
- release-170_RC1
- release-169
- release-168
- release-167
- release-166
- release-166_RC2
- release-166_RC1
- release-165
- release-164
- release-163
- release-162
- release-161
- release-160
- release-159
- release-158
- release-157
- release-156
- release-155
- release-154
- release-153
- release-152
- release-151
- release-150
- release-149
- release-148
- release-147
- release-146
- release-145
- release-144
- release-143
- release-142
- release-141
- release-140
- release-139
- release-138
- release-137
- release-136
- release-135
- release-134
- release-133
- release-132
- release-131
- release-130
- release-129
- release-128
- release-127
- release-126
- release-125
- release-124
- release-123
- release-122
- release-121
- release-120
- release-119
- release-118
- release-117
- release-116
- release-115
- release-114
- release-113
- release-112
- release-111
- release-110
- release-109
- release-108
- release-107
- release-106
- release-105
- release-104
- release-103
- release-102
- release-101
- release-100
- release-99
- release-98
- release-97
- release-96
- release-95
- release-94
- release-93
- release-92
- release-91
- release-90
- release-89
- release-88
- release-87
- release-86
- release-85
- release-84
- release-83
- release-82
- release-81
- release-80
- release-79
- release-78
- release-77
- release-76
- release-75
- release-74
- release-73
- release-72
- release-71
- release-70
- release-69
- release-68
- release-67
- release-66
- release-65
- release-64
- release-63
- release-62
- release-61
- release-60
- release-59
- release-58
- release-57
- release-56
- release-55
- release-54
- release-53
- release-52
- release-51
- release-50
- release-49
- release-48
- release-47
- release-46
- release-45
- release-44
- release-43
- release-42
- release-41
- release-40
- release-39
- release-38
- release-37
- release-36
- release-35
- release-34
- release-33
- release-32
- release-31
- release-30
- release-29
- release-28
- release-27
- release-26
- release-25
- release-1.9.1-24
- release-1.9.1-23
- release-1.9.1-22
- release-1.9.1-21
- release-1.9.1-20
- release-1.9.1-19
- release-1.9.1-18
- release-1.9.1-17
- release-1.9.1-16
- release-1.9.1-15
- release-1.9.1-14
- release-1.9.1-13
- release-1.9.1-12
- release-1.9.1-11
- release-1.9.1-10
- release-1.9.1-9
- release-1.9.1-8
- release-1.9.1-7
- release-1.9.1-6r1
- release-1.9.1-5
- release-1.9.1-4
- release-1.9.1-3
- release-1.9.1-2
- release-1.9.1-1
- release-1.8.1-24
- release-1.8.1-23
- release-1.8.1-1
- release-1.7.3-2
- release-1.7.3-1
- release-1.7.1-5
- release-1.7.1-4
- release-1.7.1-3
- release-1.7.1-2
- release-1.7.1-1
- release-1.7.0-1
- release-1.6.1-2
- release-1.6.1-1
- release-1.6.0-1
- release-1.5.1-1
- release-1.5.0-1
- 1.9.1-1
Showing
6 changed files
with
248 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
/** | ||
* Kopernicus Planetary System Modifier | ||
* ------------------------------------------------------------- | ||
* This library is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU Lesser General Public | ||
* License as published by the Free Software Foundation; either | ||
* version 3 of the License, or (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public | ||
* License along with this library; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
* MA 02110-1301 USA | ||
* | ||
* This library is intended to be used as a plugin for Kerbal Space Program | ||
* which is copyright 2011-2017 Squad. Your usage of Kerbal Space Program | ||
* itself is governed by the terms of its EULA, not the license above. | ||
* | ||
* https://kerbalspaceprogram.com | ||
*/ | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using UnityEngine; | ||
|
||
namespace Kopernicus | ||
{ | ||
namespace Components | ||
{ | ||
/// <summary> | ||
/// Regional heating for planet surfaces | ||
/// </summary> | ||
public class HazardousBody : MonoBehaviour | ||
{ | ||
/// <summary> | ||
/// The average heat rate on the surface of the body. Gets multiplied by latitude, longitude and altitude curves | ||
/// </summary> | ||
public Double HeatRate; | ||
|
||
/// <summary> | ||
/// How many seconds should pass between applying the heat rate to the ship. | ||
/// </summary> | ||
public Single HeatInterval = 0.05f; | ||
|
||
/// <summary> | ||
/// Controls the heat rate at a certain latitude | ||
/// </summary> | ||
public FloatCurve LatitudeCurve; | ||
|
||
/// <summary> | ||
/// Controls the heat rate at a certain longitude | ||
/// </summary> | ||
public FloatCurve LongitudeCurve; | ||
|
||
/// <summary> | ||
/// Controls the heat rate at a certain altitude | ||
/// </summary> | ||
public FloatCurve AltitudeCurve; | ||
|
||
private CelestialBody _body; | ||
|
||
/// <summary> | ||
/// Get the body | ||
/// </summary> | ||
void Start() | ||
{ | ||
_body = GetComponent<CelestialBody>(); | ||
|
||
StartCoroutine(Worker()); | ||
} | ||
|
||
void OnLevelWasLoaded(Int32 level) | ||
{ | ||
StartCoroutine(Worker()); | ||
} | ||
|
||
/// <summary> | ||
/// Update the heat | ||
/// </summary> | ||
/// <returns></returns> | ||
private IEnumerator<WaitForSeconds> Worker() | ||
{ | ||
while (true) | ||
{ | ||
if (!FlightGlobals.ready) | ||
{ | ||
yield return new WaitForSeconds(HeatInterval); | ||
continue; | ||
} | ||
|
||
// Get all vessels | ||
List<Vessel> vessels = FlightGlobals.Vessels.FindAll(v => v.mainBody == _body); | ||
|
||
// Loop through them | ||
foreach (Vessel vessel in vessels) | ||
{ | ||
Double altitude = | ||
AltitudeCurve.Evaluate((Single)Vector3d.Distance(vessel.transform.position, _body.transform.position)); | ||
Double latitude = LatitudeCurve.Evaluate((Single)vessel.latitude); | ||
Double longitude = LongitudeCurve.Evaluate((Single)vessel.longitude); | ||
|
||
Double heat = altitude * latitude * longitude * HeatRate; | ||
foreach (Part part in vessel.Parts) | ||
part.temperature += heat; | ||
} | ||
|
||
// Wait | ||
yield return new WaitForSeconds(HeatInterval); | ||
} | ||
// ReSharper disable once IteratorNeverReturns | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
/** | ||
* Kopernicus Planetary System Modifier | ||
* ------------------------------------------------------------- | ||
* This library is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU Lesser General Public | ||
* License as published by the Free Software Foundation; either | ||
* version 3 of the License, or (at your option) any later version. | ||
* | ||
* This library is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* Lesser General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Lesser General Public | ||
* License along with this library; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, | ||
* MA 02110-1301 USA | ||
* | ||
* This library is intended to be used as a plugin for Kerbal Space Program | ||
* which is copyright 2011-2017 Squad. Your usage of Kerbal Space Program | ||
* itself is governed by the terms of its EULA, not the license above. | ||
* | ||
* https://kerbalspaceprogram.com | ||
*/ | ||
|
||
using Kopernicus.Components; | ||
using System; | ||
using Kopernicus.UI; | ||
|
||
namespace Kopernicus | ||
{ | ||
namespace Configuration | ||
{ | ||
[RequireConfigType(ConfigType.Node)] | ||
public class HazardousBodyLoader : BaseLoader, ITypeParser<HazardousBody> | ||
{ | ||
// Set-up our parental objects | ||
public HazardousBody Value { get; set; } | ||
|
||
// The average heat on the body | ||
[ParserTarget("heat")] | ||
[KittopiaDescription("The average heat on the body.")] | ||
public NumericParser<Double> heat | ||
{ | ||
get { return Value.HeatRate; } | ||
set { Value.HeatRate = value; } | ||
} | ||
|
||
// How much time passes between applying the heat to a vessel | ||
[ParserTarget("interval")] | ||
[KittopiaDescription("How much time passes between applying the heat to a vessel.")] | ||
public NumericParser<Single> interval | ||
{ | ||
get { return Value.HeatInterval; } | ||
set { Value.HeatInterval = value; } | ||
} | ||
|
||
// Controls the how much of the average heat gets applied at a certain altitude | ||
[ParserTarget("AltitudeCurve")] | ||
[KittopiaDescription("Controls the how much of the average heat gets applied at a certain altitude.")] | ||
public FloatCurveParser altitudeCurve | ||
{ | ||
get { return Value.AltitudeCurve; } | ||
set { Value.AltitudeCurve = value; } | ||
} | ||
|
||
// Controls the how much of the average heat gets applied at a certain latitude | ||
[ParserTarget("LatitudeCurve")] | ||
[KittopiaDescription("Controls the how much of the average heat gets applied at a certain latitude.")] | ||
public FloatCurveParser latitudeCurve | ||
{ | ||
get { return Value.LatitudeCurve; } | ||
set { Value.LatitudeCurve = value; } | ||
} | ||
|
||
// Controls the how much of the average heat gets applied at a certain longitude | ||
[ParserTarget("LongitudeCurve")] | ||
[KittopiaDescription("Controls the how much of the average heat gets applied at a certain longitude.")] | ||
public FloatCurveParser longitudeCurve | ||
{ | ||
get { return Value.LongitudeCurve; } | ||
set { Value.LongitudeCurve = value; } | ||
} | ||
|
||
[KittopiaDestructor] | ||
public void Destroy() | ||
{ | ||
UnityEngine.Object.Destroy(Value); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new Particle Loader from the Injector context. | ||
/// </summary> | ||
public HazardousBodyLoader() | ||
{ | ||
// Is this the parser context? | ||
if (!Injector.IsInPrefab) | ||
{ | ||
throw new InvalidOperationException("Must be executed in Injector context."); | ||
} | ||
|
||
// Store values | ||
Value = generatedBody.celestialBody.gameObject.AddOrGetComponent<HazardousBody>(); | ||
} | ||
|
||
/// <summary> | ||
/// Creates a new Particle Loader on a spawned CelestialBody. | ||
/// </summary> | ||
[KittopiaConstructor(KittopiaConstructor.Parameter.CelestialBody)] | ||
public HazardousBodyLoader(CelestialBody body) | ||
{ | ||
// Is this a spawned body? | ||
if (body?.scaledBody == null || Injector.IsInPrefab) | ||
{ | ||
throw new InvalidOperationException("The body must be already spawned by the PSystemManager."); | ||
} | ||
|
||
// Store values | ||
Value = body.gameObject.AddOrGetComponent<HazardousBody>(); | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters