Git Product home page Git Product logo

avionicssystems's Introduction

AvionicsSystems

MOARdV's Avionics Systems for Kerbal Space Program - a new generation of IVA enhancement.

Mk1 Pod

Short Intro

MOARdV's Avionics Systems (MAS) is a successor to RasterPropMonitor (RPM) that allows for immersive IVA gameplay in KSP.

Players:

NOTE: MAS is not a 100% drop-in replacement for RasterPropMonitor.

As of MAS v1.2.0, a Module Manager patch is included in MAS that replaces the basic RPM props with equivalent MAS props. This patch does not update ASET props, but it updates the IVAs included with RPM to use MAS-powered props.

An in-progress RPM ASET update patch is in the distribution, but you must opt-in to using it by renaming it from MOARdV/Patches/AsetToMasUpgrade.nocfg to MOARdV/Patches/AsetToMasUpgrade.cfg. This patch does not yet update all of the ASET props.

Releases appear under Releases. A comprehensive changelog is available, as well.

For players who do a lot of atmospheric flight, alexustas's Jebbesen Aeronautical Charts for Kerbin are available. These charts list the radio navigation aids that MAS can interact with on Kerbin.

To Install: select the latest released AvionicsSystems zip file from the "Releases" tab. Do not download this repo unless you intend to build MAS yourself.

Players do not need to download the PropConfig zip file.

For players who want to understand the advanced ASET props, please take a look at MOARdVPlus, my advanced IVA mod. There are user guides for some of the advanced props there.

The KSP Forum has a MAS thread.

This mod includes version information compatible with MiniAVC and AVC.

The MAS distribution contains multiple licensed components. The license document identifies these components and their licenses.

IVA / Prop Creators:

The wiki contains documentation for this mod geared towards creating new props.

Documentation of the props themselves is a work in progress.

Where are the IVAs?

MAS is intended to be a toolkit for developing IVAs.

However, there are a few IVAs included in MAS to some of the features. All of these example IVAs require the ASET Props and Avionics packs.

  • Module Manager patches are included that upgrade the basic RPM props to MAS-equivalent props. This patch allows the RPM IVAs included in RPM to use MAS instead.
  • The stock Mk 1 v2 Command Pod (pictured above) demonstrates a retro-NASA style IVA suitable for suborbital or short orbital flights. A flight manual is available on the wiki. This is a fully-featured IVA.
  • The stock Mk 1-3 Command Pod includes a retro-NASA IVA for the center seat. This IVA is not complete, but it is a starting point if someone else wants to finish it.
  • The stock Mk1 Lander Can by snakeru, a conversion of the ASET Mk1 Lander Can. Note that if RasterPropMonitor is installed, the MAS version of the IVA is switched off. You must uninstall the ASET IVA to use the MAS IVA.
  • The MRK DM command pod, previously part of the Commonwealth Rockets mod. This command pod demonstrates a modern partial-glass cockpit design good for activity around Kerbin and its moons. This pod has moved to a different mod, and I have not tested to see if the patch still works.
  • The OPT-J HT cockpit, courtesy vulkans22.

For some additional IVAs, the Flapjack cockpit in the Kerbal Flying Saucer mod shows a glass cockpit design. Additionally, the MOARdVPlus mod includes a complete 1960s-style Apollo IVA compatible with the Bluedog Design Bureau mod. There is also a modernized (glass) Apollo IVA.

Dependencies

In order to fly the IVAs included with this mod, you will need to download and install

NOTE: Although the ASET packs list RasterPropMonitor as a dependency, you do not need to install RPM in order to use MAS.

Refer to the Installation Guide on the wiki for more information, as well as a list of optional mods that enhance MAS gameplay.

What about RasterPropMonitor?

My development on RasterPropMonitor has stopped. JohnnyOThan has adopted the mod at RasterPropMonitor (adopted).

How do I Build MAS?

The Building MAS document provides links to required components and steps to build MAS for yourself.

Other questions?

Look at the FAQ on the wiki. If the answer is not there, please ask me.

avionicssystems's People

Contributors

alexeynezhdanovgardena avatar angel-125 avatar harveyt avatar jonnyothan avatar kerbas-ad-astra avatar manul-0 avatar moardv avatar singabrightsong avatar stoneblue avatar vulkans22 avatar wile1411 avatar zhaofjx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

avionicssystems's Issues

MAS Control/Autopilot

I know that this isn't going to be coming anytime soon but....
I've been thinking back to the first time I found out about MAS. We were talking about autopilots or autolanding or pilot assistant or crashing, you said you could make a system that could autoland a plane using this "new thing" you were working on. This turned out to be MAS.

Would it be possible to have MAS control pitch, roll, yaw and throttle? It would probably be limited to IVA only.
Maybe we could have a simple autopilot that can hold a heading, speed, Altitude and vertical speed?
Maybe we could have a complex sutopilot that can follow a flight plan or perform an autoland?
Maybe we could have a MAS flight director?
Maybe MAS limited player input to stop you stalling?
POSSIBILITIES ARE ENDLESS!!!!

Ship Control through script.

I remember you mentioning something about an autoland system that could be done in MAS.
Would it be possible to control pitch, roll and yaw through a script?

Would it also be possible to 'limit' player input though a script.

I'm working on an airbus and I'd like to have a crack at the control laws.
It limits bank angle to 67_, pitch to 15_ down and 30* up and will try and prevent a stall by increasing engine power when speed is low.

Rolling Digits

That...
rolling digit

Some way to get this without the need for lots of configs.
Can we also get the ability to change its 'roll rate', meaning that the 'one' unit will move continuously and the 'tens' will only move when the tens change.

MAS Completely freezing

This has kept happening since i reinstalled KSP.
Everything is normal and then the game freezes for about 5 seconds. When it comes back, MAS is frozen completely. Monitors are stuck, alarms don't play or don't stop playing. When i try and hit a MASswitch, I get an initialization error and the log spams with:
[ERR 00:08:43.975] [MASFlightComputer] MASFlightComputer.FixedUpdate exception: System.NullReferenceException: Object reference not set to an instance of an object
at AvionicsSystems.MASFlightComputer+Variable.ProcessObject (System.Object value) [0x00000] in :0
at AvionicsSystems.MASFlightComputer+Variable.Evaluate (MoonSharp.Interpreter.Script script) [0x00000] in :0
at AvionicsSystems.MASFlightComputer.FixedUpdate () [0x00000] in :0

Reloading the ship seems to fix it.

Just thought i'd let you know :D

Idle / uncrewed behavior on VesselModule

Since VM no longer is involved in save/load behavior, I may be able to be more aggressive in enabling / disabling its FixedUpdate activity, which may reduce overhead if uncrewed vessels are nearby and loaded.

Request: The ability to use Transforms list in the "COLOR_SHIFT" component

it only needs for convenience, so you can ignore and close this request.

Is it possible to add the ability to specify a comma separated list of objects in the "COLOR_SHIFT" module ?

for example

COLOR_SHIFT
        {
            name = Tumbler Mark
            transform = TumblerMarkObj, CircleMarkObj1, CircleMarkObj2, PointerObj, OuterScaleObj, InnerScaleObj
            passiveColor = 0,0,0,255
            activeColor = 145,145,145,255
            variable = fc.Conditioned(fc.GetPersistentAsNumber("Backlight"))
        }

COMPOUND_TEXT - variable-controlled multi-line text concatenation

Take a group of prioritized message texts (such as warnings, alerts, or even a preflight checklist). You want to be able to show all of them that are enabled, preferably without big gaps because several intermediary messages are 'off'. Right now, there's no reasonable way to do that.

Add a DYNAMIC_TEXT monitor component that has multiple sub-nodes, each of which contains text (either in-line, or a URI to a file) and a controlling variable / variable range. When a subcomponent is 'on', it is concatenated to the displayed text. When it's not, it's skipped, and the next enabled node will be concatenated next.

This class of node will be more costly in terms of computation, since it will need to rebuild the entire text structure whenever enabling variables change, but as long as it's used sparingly, it should be okay.

HullCam direct support?

HullCam already has shaders / post-processing effects. Could those shaders be augmented to support some of the effects I've already written, and then use an API so MAS can use HullCam output directly? That would eliminate the need to carry the extra shaders in MAS, although it makes HullCam a dependency for external camera support.

FAR Availibilty + Code issues

Apologies if i ask silly or repetitive questions, ive just come back to this.
It doesn't appear that there is a FAR version for KSP 1.2 so all the MAS code that uses it is kind of pointless. I am interested to know however, what would far.GetFlapSetting() be equal to?
could we have a far.Availible() process so that we can turn off features that use FAR stuff to stop them from messing up.
ALSO: https://www.dropbox.com/s/dymnc03gaulhbbl/GPWS.lua?dl=0
This code is driving me nuts. Ive been looking through it again and again, there is something wrong with it and what ever is wrong is causing MAS to freeze and the log to spam with this:
[ERR 22:32:02.674] [MASFlightComputer] MASFlightComputer.FixedUpdate exception: System.ArgumentException: Unexpected variable type Unknown in mutableVariablesList
at AvionicsSystems.MASFlightComputer.FixedUpdate () [0x00000] in :0

Please let me know if you find anything obviously wrong

MdVTextMesh / monitor behaviors

I've seen this consistently with some props - text is positioned wrong on a MASMonitor at startup, and it requires changing the text to get it to correct itself (which is a problem with immutable text). I've got a work-around in place now to pretend like I didn't generate the text initially, so we'll do it again on the next Update, but it would be nice to understand why it happens in the first place.

Crashes?

I really have no idea if this is MAS that is doing this but I managed to get a fairly consistent method of using KSP. Loading a flight now works. Going from a flight to space centre crashes the game instantly.

And I have to always 'Verify integrity of game cache' through steam before I can play it again. Steam always finds and replaces 1 file that 'failed to validate'

I have tried reinstalling KSP but the same thing started happening. I have no idea what could be causing it, but it seemed to start with MAS being installed.

Documentor improvements

Improvements needed for the Documentor documentation generator:

  • Per-page table of contents (list of categories, with links to allow jumping to the category header).
  • Overload (seealso) tag to make it "this mod is required for this feature to work". eg, DeltaV

Text transform/rotation

I know that this is a shot in the dark and very unlikely to be possible at this stage but.....
Would it be possible to have variable text on a monitor that can be moved and ROTATED by other variables?

Request: RCS control

  • Ability to enable all previously disabled RCS Ports
  • Ability to set thrust limit for all RCS ports, like a "Thrust limit" for engines

MASCommNet

This probably makes more sense as a separate plugin. Brainstorm features: time delay on exchange. Ranges based on actual signal rules - maybe emulate by adjusting transmitter rate based on relay strength. Other things?

Hohmann Transfer improvements / fixes

Rewriting all of the Protractor-derived code from scratch, since Protractor is GPL, and I don't want to deal with that license in this project.

  • Transfer Phase Angle
  • Current Phase Angle
  • Time to Transfer
  • Transfer dV
  • Ejection Angle (interplanetary transfer)
  • Time to Ejection Angle
  • Moon Ejection Angle (Oberth effect)
  • Time to Moon Ejection Angle
  • Altitude for Ejection

Plus some fixes / incomplete TODO tasks

  • Current Phase Angle reports [0, 180), not [0, 360) because of Vector3d.Angle
  • Need to account for high relative inclinations, or add a disclaimer.
  • Need to handle targets orbiting other bodies (so the Oberth ejection angle can be computed)

MAS_PAGE IMAGE function.

Is the 'IMAGE' just supposed to be used an overlay?
Can there be a way to set the position, size and an enabling variable?

Auto-reactivate IVA after docking?

A request from Enceos on the forum: after docking, can I find a way to automatically jump back in to IVA when KSP kicks us out? From what I've gathered, we get kicked out of IVA when the docking craft is subsumed into the other craft. Is there a way to detect that, remember which IVA was active, and find it again?

I think what would have to happen is that the active IVA GUID is stored somewhere (a non-vessel / non-part module, and if I see that value is set, but we're not using the IVA camera, then we need to go back to IVA. What I don't know yet is how I could distinguish between the player changing camera views and KSP automatically kicking us out. That'll need to be investigated.

Mipmaps for MdVTextMesh?

One weakness in the text renderer (which was carried over from RPM) is that the text textures are at a specific size, and they show shimmering artifacts when rendered significantly smaller than native resolution, which happens easily. See if I can find a way to generate mipmaps from a copy of the Font texture, so render quality is improved.

Navigation as a first-class component

Those airplane people like having radio navigation beacons and stuff like that on Kerbin. :)

Since KSP 1.2 purportedly will allow manual placement of waypoints, and support naming them, I expect to be able to grab on to that system to help manage the waypoints. Since there are multiple types of nav beacon, and they have frequencies, I'll need to encode that data in the name - such as VOR:[email protected] encoding a VOR-type beacon named AAA1 at the frequency 118.1.

I guess I should take some time to learn what sort of information will need to be represented as variables in-game. Most likely I'll need a proxy object to wrap around the waypoints so the Lua script can have things like

local nav1 = nil

function SetWaypointFromFrequency(frequency)
  nav1 = nav.GetWaypointFromFrequency(frequency)
  if nav1 ~= nil then
    -- Do whatever
  end
end

And so on.

List of functions:

  • Bearing(lat1, lon1, lat2, lon2): Bearing from position 1 to position 2.
  • BearingFromVessel(lat, lon): Bearing from vessel position to lat/lon parameters.
  • DestinationLatitude(lat, lon, range, bearing): Latitude that will be reached starting at lat/lon and going along bearing to range.
  • DestinationLatitudeFromVessel(range, bearing): Latitude that is range meters along bearing.
  • DestinationLongitude(lat, lon, range, bearing): Same as above, but longitude.
  • DestinationLongitudeFromVessel(range, bearing): Save as above, but longitude.
  • GroundDistance(lat1, lon2, lat2, lon2): Ground distance between coordinates, assuming sea level.
  • GroundDistanceFromVessel(lat, lon): Ground distance to coordinate from vessel, assuming sea level.
  • LineOfSight(altitude): Distance to horizon from altitude, assuming sea level horizon and no mountains.
  • IntersectionOfTwoPaths(...)
  • CrossTrackDistance(...)
  • SlantDistance(lat1, lon1, alt1, lat2, lon2, alt2): Slant distance between two points.
  • SlantDistanceFromVessel(lat, lon, alt): Slant distance to a point from the vessel.

Navigation Beacon Functions:

  • SetRadioFrequency(radioId, frequency): Set radio number radioId to frequency.
  • GetRadioFrequency(radioId): Get the frequency for radio radioId.
  • GetDMESlantDistance(radioId): Get the slant distance to the beacon selected by radio radioId.
  • GetILSLocalizerError(radioId): Get the horizontal error from the localizer signal.
  • GetILSLocalizerErrorValid(radioId): Is the localizer error valid?
  • GetILSGlideSlopeError(radioId, glideSlope): Get the vertical error from the specified glide slope.
  • GetILSGlideSlopeErrorValid(radioId, glideSlope): Is the glide slope error valid?
  • GetNavAidDME(radioId): Is the beacon a DME, and is it in range?
  • GetNavAidBearing(radioId, relative): Get the bearing to the beacon.
  • GetNavAidIdentifier(radioId): Get the three-letter code for the beacon.
  • GetNavAidName(radioId): Get the name for the beacon.
  • GetNavAidType(radioId): What type of beacon is this radio detecting?
  • GetNDBBearing(radioId): Returns the vessel heading-relative bearing, if the beacon is NDB.
  • GetVORDeviation(radioId, bearing): Returns the deviation from the desired bearing to/from, [-90, +90].
  • GetVORApproach(radioId, bearing): Returns 1 (TO), 0 (NO SIGNAL), -1 (FROM).

MoonSharp Performance (and Garbage Creation) issues

Now that I've got MAS working well enough to operate most of an IVA, I'm getting some realistic performance results showing the cost of the MoonSharp Lua interpreter,

With 129 "variables", many of them using the simple "fc.GetVariable()" form, the FixedUpdate takes 1.73ms (with a millisecond-resolution timer - need to see if there is a higher precision option). That's about 1/10 of the FixedUpdate interval, which means it's too slow.

Strategies to consider:

  1. Dynamic scaling of the update. Right now, MAS updates every variable every FixedUpdate, which makes everything very responsive (other than the yellow-timer lag occasionally). I could put together a heuristic that 'load balances' the updates by splitting them up into groups, and updating each group in a round-robin fashion. This will reduce the responsiveness of the variables, but that's been a 'feature' in RPM for a while.

  2. Selective use of Lua. MAS makes every variable a Lua microscript. If I write a basic parser (yuck), I can decompose a variable and figure out which ones are simple wrappers around callbacks to the proxy classes. Instead of round-tripping through Lua, I can split the simple cases out and use delegates. It complicates initializing a variable, but it will cut the cost of updating it, which is the important issue.

  3. Dig into the MoonSharp code. Branch the code and see if I can find where the garbage is being generated. Get some advice from some of the more C#-savvy modders on where the large !/$ areas are.

Ultimately, I am sure I'll try 1 and 2; there is the additional note that there is only so much I can realistically do, since Lua is an interpreted language, so it will be slower than pure C#. I suppose there's always trying to do something like learning IL and seeing if I can write a Lua->IL transformation, but that's way down the road when I get bored...

MASPageLineRenderer Unity update

The Unity LineRenderer class online advertises a SetPositions(Vector3[]) method, but KSP's current flavor of Unity doesn't include that method, so I've got a loop over the variables instead. When KSP 1.2 comes out, see if the updated Unity edition takes care of that problem.

Closest Approach predictor should account for planetary radius

When targeting a planet or moon, subtract the planet's radius (clamping to 0). That way, for instance, a munar intercept with a closest approach 73km from the center of the Mun will report as 0 (indicating impact) instead of suggesting a periapsis altitude of 73km.

Making an Alarm in MAS

Sorry about the constant silly questions, once I get the hang of it... there will probably still be loads of questions, just not as dumb.
I need to make an alarm for my IVA. It doesn't need a light or anything, just a sound to play.

... how do I do that?

MENU MASMonitor type

This will be a major undertaking. Time to start making notes. The goal is user-configured menus. How I get there is the trick...

First ideas:

  • Something similar to the way MASMonitor pages are done - that is, each menu is named.
  • Each MAS_MENU contains one or more things describing what's in the menu, and what it does, such as MENU_ITEM for a single entry.
  • Each MENU_ITEM contains text, an optional "right hand side text" (like the range indicators for vessels in RPM), a variable to disable the entry, and an action. There should possibly also be a variable to enable the action, separate from the disable variable - I'm thinking of the case in the vessel targeting menu to select a docking port on a tracked vessel.
  • A MULTI_ITEM menu - this entry will be used for lists, and it will require an iterator limit variable and variables to control what's displayed. Some ideas would be fc.NumVesselsInSoI() that returns the number of other vessels in the current SoI, and fc.VesselInSoIName(index) that will return the name of the specified vessel. This feature needs more thought...
  • Key presses will map to persistents (that is, Home, Prev, Next, Enter, Back, etc will be tracked by persistent key transitions). Something like fc.SetPersistent("MonitorKey%PROPID%", 1) on key press, and fc.SetPersistent("MonitorKey%PROPID%", 0) on key release; different numbers can indicate different keys. The alternative is a unique persistent per key, like MonitorKeyHome%PROPID% for the Home key, MonitorKeyEnter%PROPID% for Enter, etc. That increases the number of persistent variables that are required, which also means more overhead for MASFlightComputer to track changes.

MAS options through in-game options menu

KSP 1.2 allows mods to add a page to the options/difficulty menu. MAS should add a page to give the player access to the config file options without editing the config file.

Fix ROTATION for longPath

I tried to do keep things simple and do an unbounded slerp - but that doesn't work right. Make the longPath path smarter (see if it really needs longPath), and use a midpoint quaternion for the cases that do, and treat the rotation as two piece-wise actions.

Triggering an action in lua?

Sorry to have to keep asking. Is there anyway to trigger something like 'far.IncreaseFlapSetting()' in lua?
While im here, do you know whats wrong with this?
PROP
{
name = AC_K320_Control_FlapsCtrl

MODEL
{
    model = ASET/ASET_Avionics/ModernPack/ASET_FlapsCtrl/ASET_FlapsCtrl
    texture = ASET_FlapsCtrlDiffuse,ASET/ASET_Avionics/ModernPack/ASET_FlapsCtrl/ASET_FlapsCtrlDiffuse
}

MODULE
{
    name = MASComponent
    COLLIDER_EVENT
    {
        name = PLUS
        collider = FlapsLeverUP_collObj
        onClick = fc.AddPersistentClamped("AC_A320_FlapLever",1,0,3)
    }

    COLLIDER_EVENT
    {
        name = MINUS
        collider = FlapsLeverDown_collObj
        onClick = fc.AddPersistentClamped("AC_A320_FlapLever",-1,0,3)
    }

    ROTATION
    {
        name = Lever position
        transform = FlapsLeverLoc
        variable = fc.GetPersistent("AC_A320_FlapLever")
        startRotation = 0,0,0 
        endRotation = 21,0,0
        range = 0.0,3.0
        blend = true
        speed = 10.0
    }

    AUDIO_PLAYER
    {
        name = Clicker
        sound = ASET/ASET_Avionics/ModernPack/Sounds/FlapsClick01
        volume = 1.0
        trigger = BOTH
        variable = fc.GetPersistent("AC_A320_FlapLever")
        range = 0.5,1.5
    }

    AUDIO_PLAYER
    {
        name = Clicker
        sound = ASET/ASET_Avionics/ModernPack/Sounds/FlapsClick01
        volume = 1.0
        trigger = BOTH
        variable = fc.GetPersistent("AC_A320_FlapLever")
        range = 2.5,3.5
    }
}

}

This stops the database from reloading and throws this:

[LOG 17:05:33.088] PartLoader: Compiling Internal Prop 'AdvancedCockpit/K320/Control_FlapLever/AC_K320_Control_FlapsCtrl'
[EXC 17:05:33.093] NullReferenceException: Object reference not set to an instance of an object
PartLoader.ReplaceTextures (UnityEngine.GameObject model, System.Collections.Generic.List1 textureNames, System.Collections.Generic.List1 newTextures)
PartLoader.CompileModel (.UrlConfig cfg, .ConfigNode partCfg, Single scaleFactor, .AvailablePart partInfo)
PartLoader.LoadInternalProp (.UrlConfig urlConf)
PartLoader+c__Iterator4B.MoveNext ()

It's very likely that I will have more questions in the future, would you prefer for me to open seperate issues for each question or put all my questions in one issue?

Support Trajectories mod

It provides a landing predictor that might be an alternative to using MechJeb. Need a way to control which one gets priority.

Part Groups and Variables

I asked about this in RPM but it was too difficult to do.
A feature that I would REALLY love to see in MAS is the ability to get readings from individual engines, fuel tanks, landing gear, etc...

The original idea was to set each prop with an ID like the cameras.
Problem is that what if two crafts with props that are the same ID dock together?

Instead of setting each prop its individual ID, assign them to a group that can contain multiple parts.
The variables of the groups should be averages of all the parts in the group. (eg. engine thrust, gear position, fuel...)
When 2 ships that have part groups dock, the parts from both ships go into the same group.

fc.TerrainAltitudeVerticalSpeed ?

Dunno if it would be that but please can we have the RADARALTVERTSPEED from RPM in MAS?
I want to start working on a GPWS system and this variable is very important.

Add canonical() to CodeGen.Expression

I use and create the canonical textual expression everywhere - it should be a prepared component of the Expression object, so I don't repeatedly create it elsewhere.

Mapped Variables

On the RPM issue you said that I could use this as a remap variable:

function Remap(value, bound1, bound2, map1, map2)
value = math.max(bound1, math.min(bound2, value))
local iLerp = (value - bound1) / (bound2-bound1)
return map1 + iLerp * (map2 - map1)
end

I suspect that I don't know what I'm doing and I'm not using it right. My script is like this:

function Remap(value, bound1, bound2, map1, map2)
value = math.max(bound1, math.min(bound2, value))
local iLerp = (value - bound1) / (bound2-bound1)
return map1 + iLerp * (map2 - map1)
end

function ACSkyPointerDisplace()
if 65 < ACRollAngle() < 90 then
-- Are we subjected to high gravity? We might have some flicker
-- Original design used RANDOM between 0.2 and 0.4, but since RANDOM is
-- a uniform distribution, RANDOM > 0.8 has the same effect.
return Remap(ACRollAngle(),65,90,0,1)
if 90 < ACRollAngle() < 115 then
return Remap(ACRollAngle(),90,65,1,0)
else
return 0
end
end

What am I doing wrong?

MASActionRotation does not correctly handle >360* rotations

The optimizations I put in for handling rotations causes the system to break down if an angle over 360 degrees is used. At 720 degrees, the mid-rotation quaternion causes 0 rotations to take place, and, by inspection, it looks like any angle over 360 will likewise have undesired effects. With the modulo parameter, it is possible to work around the problem, but I may want to address big rotations at some point (maybe falling back to the old RPM way of interpolating the angles as Euler angles, and then converting to quaternions).

Move persistence out of VesselModule

Currently, I use the VesselModule to marshal persistent values from all child MASFlightComputer modules. However, that's not working well, since there are all kinds of games that I have to play with docking. Maybe I should instead use a single ScenarioModule, and have the MASFlightComputer modules interact with it. I'll need to look into timing (who gets created first, who gets destroyed first).

EDIT: More reading suggests ScenarioModule isn't going to work, because it's not loaded until after the PartModule.OnStart has fired. However, I already have MASLoader, and it looks like there Game OnLoad/OnSave events can be hooked, so I may be able to make my own "Scenario"-like to handle it.

Request: line drawing capability

Line with given Start and End points, with adjustable width (if possible), positive/negative/ zero color and variable, "oneShot" option, variable for show/ don't show, refreshRate

As the possible options:
"Multi-line"
which is drawn based on a given set of points. I think 10 points will be more than enough. You probably already guessed that in the first place, this feature will need to draw a route for the selected waypoint

"Styles"
possibly different rendering styles, such as dashed, dotted, double line. I do not know what capabilities can provide for this Unity

"Predefined primitives"
such as a rectangle (a special case of multi-line), circle (center, radius)

Thermal management variables / actions

Add stuff to track active / passive radiator status, and control them.

Maybe add an optional module for making thermal relevant to IVA pods (a part module that adds heat based on occupancy, power usage, and other factors).

  • Radiator deploy (for deployable active radiators)
  • Variable reporting radiator saturation

Text placement broken after load

Take a vessel in flight, switch to another vessel, and some of the text placement is wrong. It looks like upper / lower aligned Arial font is affect, but I need to investigate it to be sure.

GetPropModuleConfigNode needs to ignore missing MODULE

Currently, it uses the module index, which does not account for missing modules (say, from a mod DLL that's not installed), so it scans the wrong node in the config file. It looks like it needs to be slightly more robust.

KSP 1.2 update list

Tracking the KSP 1.2 changes:

  • Vessel.ActiveResources is gone.
  • Vessel.GetActiveResources() is gone.
  • ModuleRCS.Enable() is gone.
  • ModuleSolarPanel.panelState is gone.
  • ModuleSolarPanel.panelStates is gone.
  • DefaultDateTimeFormatter.GetEarthDateFromUT() is gone - implemented it myself.
  • DefaultDateTimeFormatter.GetKerbinDateFromUT() is gone - implemented it myself.
  • VesselModule.OnLoad changes.
  • Part.Resources.list is gone.
  • ModuleGenerator.outputList is gone.
  • ModuleAlternator.outputResources is gone.
  • Unity 5.2.4 shaders don't work in KSP 1.2.
  • No KSP PartTools for KSP 1.2, so no automated AssetBundle generation.

Support multiple AUDIO_SOURCE components

Right now, MASActionAudioPlayer attaches its audio source to the prop's gameObject. But that doesn't work if there are multiple audio sources on the same prop. Changed the audio component to create an empty game object (attached to the prop's gameObject), and to add the audio player to that, instead.

Smooth changing values.

I asked this about RPM before but I suspect it would be more practical to have it in MAS.
Having a value go smoothly from 0 to 1. It would function like the 'max rate change' but for the variable instead of the animation.

If not that, some sort of timer system.
Let me know what you think.

Request: Reaction Wheel control

  • Ability to "Toggle Torque" for the current Pod and for all reaction wheels except the current Pod
  • Reaction Wheel status: "-1 - Disabled", "0 - Idle", "1 - Running" for the current Pod and for all reaction wheels except the current Pod
  • optionally, the ability to set a limit of Torque force. from 1 (Max) to 0, like a "Thrust limit" for engines

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.