Jump to content

[0.25] RasterPropMonitor - putting the A in your IVA (v0.18.3) [8 Oct]


Mihara

Recommended Posts

RasterPropMonitor 0.5 released.

Significant changes:

  1. The only bug actually reported so far fixed, if you want your currently selected page to persist between vessel switches, you need to have MODULE { name = JSIInternalPersistence } on your pod part. It'll keep working if that module is not present, but obviously, won't remember active pages.
  2. The new JSIVariableAnimator module lets you create animated gauge props (or any other kind of props with animations on them) driven by the same variables as the RasterPropMonitorGenerator uses -- still using one calculator per pod, even.
  3. String.Format is extended by a special format specifier that lets you turn 802975628m into 802Mm right in the page definition file, which should make data displays considerably neater. I'll probably also make the degree/minute/second coordinates formatter and kerbal time formatter into format specifiers later, which will also involve some rewriting of page definitions, but make things much more flexible.
  4. Page handler mechanism. It is now possible to create your own plugins that can generate page data during execution in whichever way you please, while the pages are still processed through the same variable substitution system. This lets you do things like creating an onscreen menu in quite a trivial fashion. This might also be the way to hook kOS into the whole thing... I'm not up to doing an actual keyboard with buttons you have to click to make your kerbals type in kOS scripts, but if you want to, this is what I can do from my end to make it easier for you.
  5. Lots and lots and lots of minor refactoring all over the place, some of which might result in marginal speed improvements, but I doubt it.

Next up, reaching into the guts of SCANsat and trying to get at the map therein, and, if I get sufficiently inspired to grok vector math, I'll look into making a primary flight display to replace the antiquated-looking navball... Both require teaching the monitor to present an arbitrary texture first, which can, apparently, be fairly tricky, since while you can paint a Texture2D onto a RenderTexture, going the other way incurs a significant performance penalty...

And maybe, just maybe, I'll get IConfigNode to work at least for loading page definitions, so you'll be able to have any number of them in one prop.

Download here: RasterPropMonitor_0.5.zip

Link to comment
Share on other sites

RasterPropMonitor 0.5 released.

Significant changes:

  1. The only bug actually reported so far fixed, if you want your currently selected page to persist between vessel switches, you need to have MODULE { name = JSIInternalPersistence } on your pod part. It'll keep working if that module is not present, but obviously, won't remember active pages.
  2. The new JSIVariableAnimator module lets you create animated gauge props (or any other kind of props with animations on them) driven by the same variables as the RasterPropMonitorGenerator uses -- still using one calculator per pod, even.
  3. String.Format is extended by a special format specifier that lets you turn 802975628m into 802Mm right in the page definition file, which should make data displays considerably neater. I'll probably also make the degree/minute/second coordinates formatter and kerbal time formatter into format specifiers later, which will also involve some rewriting of page definitions, but make things much more flexible.
  4. Page handler mechanism. It is now possible to create your own plugins that can generate page data during execution in whichever way you please, while the pages are still processed through the same variable substitution system. This lets you do things like creating an onscreen menu in quite a trivial fashion. This might also be the way to hook kOS into the whole thing... I'm not up to doing an actual keyboard with buttons you have to click to make your kerbals type in kOS scripts, but if you want to, this is what I can do from my end to make it easier for you.
  5. Lots and lots and lots of minor refactoring all over the place, some of which might result in marginal speed improvements, but I doubt it.

Next up, reaching into the guts of SCANsat and trying to get at the map therein, and, if I get sufficiently inspired to grok vector math, I'll look into making a primary flight display to replace the antiquated-looking navball... Both require teaching the monitor to present an arbitrary texture first, which can, apparently, be fairly tricky, since while you can paint a Texture2D onto a RenderTexture, going the other way incurs a significant performance penalty...

And maybe, just maybe, I'll get IConfigNode to work at least for loading page definitions, so you'll be able to have any number of them in one prop.

Download here: RasterPropMonitor_0.5.zip

This is already an amazing plugin and it is going to be much more as well! Keep up the good work!

Link to comment
Share on other sites

Bump for new version release.

Changes in version 0.6:

  1. Format specifiers for SI prefixes had a few bugs which were fixed, and now behave mostly as advertised. This is completely minor compared to...
  2. Syntax of prop.cfg files has been significantly changed, so if you customized anything in this package, you might have to do some fixing -- see the wickied documentation. This is very much worth it though, because the upsides of that change are...
  3. You can now have an unlimited number of pages per prop. Well, it'll crash at around 2.1 billion, but I think you'll run out of memory well before that.
  4. Page handlers now no longer need to be loaded as separate modules, RPM will take care of loading them by itself and passing them module configuration.
  5. The notion of a camera takes a step back, and now there's a more generalized notion of a page background -- which can be a camera, but it can be something else instead. Which permits such a nicety as a Background Handler plugin. Which permits me to make a Primary Flight Display, which is in the works for the next version(s), because I have finally figured out how to draw something rotated on a RenderTexture.
  6. But right now, you can assign a texture to be a page background already, which I'm sure you can find useful.
  7. In other news, JSIExternalCameraSelector PartModule is introduced to permit one to have a large array of external cameras without actually creating multiple unique parts and cluttering the part list. Amusingly, while it works on stock docking ports, the resulting cameras are facing the opposite direction of what you need...

Do not install this version with the v0.5 release of ALCOR without understanding that you'll have to massage it's prop configuration files to conform to the new prop.cfg syntax.

Link to comment
Share on other sites

This is a plugin initially conceived to handle the internal monitor displays of the ALCOR capsule, with the intent of supplanting MechJeb/Engineer windows when flying from IVA. It evolved to the point when it's quite a bit more than that. While it's not that much of a product for an end user, it's mostly for other modders to use in making neat IVAs, this here is a canonical package which adds a simple monitor into certain stock capsules, which I'm sure many people will find useful exactly as presented.

Enough to actually send me bug reports, you know, because I'm pretty sure some of these things are not computed sensibly and I definitely missed something.

-snip-

Wow dude this is exactly what I had in mind when I think of the first step to "improved IVA" from the features list. You made the monitors happen, all that is left is wandering around inside your ship, and changing ships by going through the air lock. You sir have my props! Bravo!

Link to comment
Share on other sites

where am I telling it to find my background if I replace those lines?

Also, could you make a version that is just the screen? literally just the glass panel, when you get that hud working?

Edited by Nazari1382
Link to comment
Share on other sites

where am I telling it to find my background if I replace those lines?


PAGE
{
text = blah/blah/blah.txt
button = mybuttontransform
textureURL = blah/blah/texture
}

This loads a texture into the background directly. The BACKGROUNDHANDLER{} block actually calls a different module and passes it the screen to draw on, the one that I left in the config commented out was just the first experiment in making the PFD module.

Also, could you make a version that is just the screen? literally just the glass panel, when you get that hud working?

As I envision it, the PFD will be just a background handler, to be used as part of a PAGE{} which will have the text parts drawn in the usual way. That page itself can be part of a more complex display (as long as it's square) or used completely standalone. It should be possible to draw it on a glass panel as long as you make the appropriate textures to go into it, no problem.

Link to comment
Share on other sites

Can't wait till I can get rid of that pesky navball!

It's going to take at least a week, I'm afraid, due to a) me not understanding vector math particularly well and B) having to work on the lowest level of drawing stuff available in Unity because more reasonable upper levels won't let me rotate stuff unless I'm working with a real 3d model and pointing a camera at it, which I'm obviously not. :)

Link to comment
Share on other sites

It's going to take at least a week, I'm afraid, due to a) me not understanding vector math particularly well and B) having to work on the lowest level of drawing stuff available in Unity because more reasonable upper levels won't let me rotate stuff unless I'm working with a real 3d model and pointing a camera at it, which I'm obviously not. :)

Take your time, seriously this already has amazing features. I think one more can wait a little bit.

Link to comment
Share on other sites

A most impressive addition!

I'd like to request an additional variable for Equivalent airspeed (EAS) which directly relates to the effectiveness of aerodynamic surfaces.

f8a095a4b8a9cd6cceed8d1d735b34b2.png

{TAS} is true airspeed

{EAS} is equivalent airspeed

{p0} is the air density at sea level in the International Standard Atmosphere (15°C and 1013.25 hectopascals) (density of 1.225 kg/m3)

{p} is the density of the air in which the aircraft is flying

Please consider adding this variable - its been the one essential thing that has been missing for flying planes in IVA with FAR.

Link to comment
Share on other sites

Please consider adding this variable - its been the one essential thing that has been missing for flying planes in IVA with FAR.

Fixed, will be in the next version. :) At least it compiles, I've got no clue if it is correct.

Link to comment
Share on other sites

are the MM example files for the stock pods independent to the plugin version? Because I am using ALCOR so I have to use the 0.5 version but also want to have monitors in the stock pods and I don't have the 0.5 zip anymore. SO I want to know if I can use the MM files from 0.6 release or if I need the 0.5 release MM files....

Link to comment
Share on other sites

are the MM example files for the stock pods independent to the plugin version? Because I am using ALCOR so I have to use the 0.5 version but also want to have monitors in the stock pods and I don't have the 0.5 zip anymore. SO I want to know if I can use the MM files from 0.6 release or if I need the 0.5 release MM files....

You would need to edit the FlatMon40x10/prop.cfg and FlatMon60x20/prop.cfg files to fit the new syntax, everything else remains unchanged.

In fact, here, these should apply to the 0.5 ALCOR and work with 0.6 plugin:

FlatMon40x10/prop.cfg


PROP
{
name = FlatMon40x10

MODULE
{
name = RasterPropMonitor
screenTransform = FlatMon40x10Screen // Name of transform for the screen surface.
fontTransform = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/model003 // Name of transform containing the font texture OR a full texture URL, either should work.
textureLayerID = _Emissive // Name of texture layer to work with on the screen surface.
screenWidth = 40 // Screen width in letters.
screenHeight = 10 // Screen height in lines.
screenPixelWidth = 640 // Width of the generated screen texture in pixels.
screenPixelHeight = 320 // Height of the generated screen texture in pixels.
fontLetterWidth = 16 // Width of a font character.
fontLetterHeight = 32 // Height of a font character.
cameraAspect = 1.35

// Refresh once every 10 frames.
refreshDrawRate = 2
refreshTextRate = 10
refreshDataRate = 10

PAGE
{
button = buttonR1
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/landing40x10.txt

background = camera
cameraTransform = Ext_B_CamTransform
fov = 60
}

PAGE
{
button = buttonR2
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/orbit40x10.txt
}

PAGE
{
button = buttonR3
page = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/target40x10.txt

background = camera
cameraTransform = DockingCamTransform
fov = 20
}

PAGE
{
button = buttonR4
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/shipinfo40x10.txt
default = yes
}

PAGE
{
button = buttonR5
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/Crew40x10.txt
}

PAGE
{
button = buttonR6
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/resources40x10.txt
}

PAGE
{
button = buttonR7
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/misc-2-40x10.txt

background = camera
cameraTransform = Ext_A_CamTransform
fov = 60
}

PAGE
{
button = buttonR8
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/misc-1-40x10.txt
}

}

MODULE
{
name = JSIActionGroupSwitch
animationName = TargetCrossAnim
switchTransform = buttonR9
actionName = dummy

}
}

proxy = 0, 0, 0, 0.30, 0.20, 0.02, 0, 0, 1

And FlatMon60x20/prop.cfg:


PROP
{
name = FlatMon60x20

MODULE
{
name = RasterPropMonitor
screenTransform = FlatMon60x20Screen // Name of transform for the screen surface.
fontTransform = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/model003 // Name of transform containing the font texture OR a full texture URL, either should work.
textureLayerID = _Emissive // Name of texture layer to work with on the screen surface.
screenWidth = 60 // Screen width in letters.
screenHeight = 20 // Screen height in lines.
screenPixelWidth = 960 // Width of the generated screen texture in pixels.
screenPixelHeight = 640 // Height of the generated screen texture in pixels.
fontLetterWidth = 16 // Width of a font character.
fontLetterHeight = 32 // Height of a font character.
cameraAspect = 1.0

emptyColor = 0,0,0,0

// Refresh once every 10 frames.
refreshDrawRate = 2
refreshTextRate = 10
refreshDataRate = 10

PAGE
{
button = buttonR1
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/orbit60x20.txt
}
PAGE
{
button = buttonR2
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/landing60x20.txt

background = camera
cameraTransform = Ext_B_CamTransform
fov = 60
}
PAGE
{
button = buttonR3
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/target60x20.txt

background = camera
cameraTransform = DockingCamTransform
fov = 50
}
PAGE
{
button = buttonR4
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/shipinfo60x20.txt
}
PAGE
{
button = buttonR5
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/Crew60x20.txt
}
PAGE
{
button = buttonR6
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/resources60x20.txt
}
PAGE
{
button = buttonR7
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/misc-1-60x20.txt
}
PAGE
{
button = buttonR8
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/misc-2-60x20.txt

background = camera
cameraTransform = Ext_A_CamTransform
fov = 70
}
}
}

proxy = 0, 0, 0, 0.30, 0.275, 0.04, 0, 0, 1

If you're still having problems after that, the old release is still up on MediaFire here.

Link to comment
Share on other sites

You would need to edit the FlatMon40x10/prop.cfg and FlatMon60x20/prop.cfg files to fit the new syntax, everything else remains unchanged.

In fact, here, these should apply to the 0.5 ALCOR and work with 0.6 plugin:

FlatMon40x10/prop.cfg


PROP
{
name = FlatMon40x10

MODULE
{
name = RasterPropMonitor
screenTransform = FlatMon40x10Screen // Name of transform for the screen surface.
fontTransform = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/model003 // Name of transform containing the font texture OR a full texture URL, either should work.
textureLayerID = _Emissive // Name of texture layer to work with on the screen surface.
screenWidth = 40 // Screen width in letters.
screenHeight = 10 // Screen height in lines.
screenPixelWidth = 640 // Width of the generated screen texture in pixels.
screenPixelHeight = 320 // Height of the generated screen texture in pixels.
fontLetterWidth = 16 // Width of a font character.
fontLetterHeight = 32 // Height of a font character.
cameraAspect = 1.35

// Refresh once every 10 frames.
refreshDrawRate = 2
refreshTextRate = 10
refreshDataRate = 10

PAGE
{
button = buttonR1
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/landing40x10.txt

background = camera
cameraTransform = Ext_B_CamTransform
fov = 60
}

PAGE
{
button = buttonR2
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/orbit40x10.txt
}

PAGE
{
button = buttonR3
page = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/target40x10.txt

background = camera
cameraTransform = DockingCamTransform
fov = 20
}

PAGE
{
button = buttonR4
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/shipinfo40x10.txt
default = yes
}

PAGE
{
button = buttonR5
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/Crew40x10.txt
}

PAGE
{
button = buttonR6
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/resources40x10.txt
}

PAGE
{
button = buttonR7
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/misc-2-40x10.txt

background = camera
cameraTransform = Ext_A_CamTransform
fov = 60
}

PAGE
{
button = buttonR8
text = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/misc-1-40x10.txt
}

}

MODULE
{
name = JSIActionGroupSwitch
animationName = TargetCrossAnim
switchTransform = buttonR9
actionName = dummy

}
}

proxy = 0, 0, 0, 0.30, 0.20, 0.02, 0, 0, 1

And FlatMon60x20/prop.cfg:


PROP
{
name = FlatMon60x20

MODULE
{
name = RasterPropMonitor
screenTransform = FlatMon60x20Screen // Name of transform for the screen surface.
fontTransform = ASET/ASET_Lander_Cabin01/Props/FlatMon40x10/model003 // Name of transform containing the font texture OR a full texture URL, either should work.
textureLayerID = _Emissive // Name of texture layer to work with on the screen surface.
screenWidth = 60 // Screen width in letters.
screenHeight = 20 // Screen height in lines.
screenPixelWidth = 960 // Width of the generated screen texture in pixels.
screenPixelHeight = 640 // Height of the generated screen texture in pixels.
fontLetterWidth = 16 // Width of a font character.
fontLetterHeight = 32 // Height of a font character.
cameraAspect = 1.0

emptyColor = 0,0,0,0

// Refresh once every 10 frames.
refreshDrawRate = 2
refreshTextRate = 10
refreshDataRate = 10

PAGE
{
button = buttonR1
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/orbit60x20.txt
}
PAGE
{
button = buttonR2
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/landing60x20.txt

background = camera
cameraTransform = Ext_B_CamTransform
fov = 60
}
PAGE
{
button = buttonR3
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/target60x20.txt

background = camera
cameraTransform = DockingCamTransform
fov = 50
}
PAGE
{
button = buttonR4
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/shipinfo60x20.txt
}
PAGE
{
button = buttonR5
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/Crew60x20.txt
}
PAGE
{
button = buttonR6
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/resources60x20.txt
}
PAGE
{
button = buttonR7
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/misc-1-60x20.txt
}
PAGE
{
button = buttonR8
text = ASET/ASET_Lander_Cabin01/Props/FlatMon60x20/misc-2-60x20.txt

background = camera
cameraTransform = Ext_A_CamTransform
fov = 70
}
}
}

proxy = 0, 0, 0, 0.30, 0.275, 0.04, 0, 0, 1

If you're still having problems after that, the old release is still up on MediaFire here.

Thanks that is very helpful :D will try out if it works

Edited by DasBananenbrot
Link to comment
Share on other sites

Speaking of which, will any aviation buffs in the audience be able to tell me what exactly is supposed to happen to a PFD's roll indicator as you pitch up through zenith and further, doing a full loop?

What happens to my prototype is that as it approaches zero it rapidly flips around, and can spin wildly if you keep pointing upwards. Which is not entirely unexpected, since it's a piece of quad being rotated around the center by Euler angles, and texture-shifted up and down to get a pitch indicator, but -- do real PFDs that work in the similar fashion do that? Is it actually appropriate for a space vehicle, or only suitable for a plane?

Link to comment
Share on other sites

seems, they got round ones...

Doing a projection of a sphere onto a RenderTexture without the benefit of using an actual model, which is, unfortunately, impractical, is kind of beyond me. :) Unless someone knowledgeable in these things can explain how this could possibly be done using a matrix transformation.

While something like this is already mostly done:

pfd.jpg

Link to comment
Share on other sites

you have a jet cockpit mod? :D

by jet I mean a commercial jet not a fighter jet, and yes I do it's in the works. I am also making some custom prop pieces. I made an action group switch panel and warning lights too, but looks like this mod actually has everything I made and what I was planning xD

Another suggestion I gave is to combine map sat maps into a "gps" like display like this in FSX:

Garmin500FSX.jpg

that would also be able to display runways and approach lines as you can see in the picture

I mean, that'd be great =)

The only thing I'm worried is memory use.. This display will be quite heavy for fps, no?

Edited by nothke
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...