librain
librain copied to clipboard
please add a new example code
Hi together,
please mr. kiselkov update the example from your librain plugin. Its not working with the newest source code you provide on github!
if possible please make a new release of compiled .xpl version from your code - so everybody can use the new version including "vulkan".
PLEASE HELP HERE!
Greets Robert
Okay ... i got now the librain 0.12 version to run ...
I will do a librain generator now - so everybody can use librain in his own aircraft :)
Greets Robert
Okay - this should do the job :)
#include "librain.h"
#include "obj8.h"
#include "XPLMDisplay.h"
#include "XPLMGraphics.h"
#include "XPLMUtilities.h"
#include <string.h>
#include <math.h>
#if IBM
# include <windows.h>
#endif
#if LIN
# include <GL/gl.h>
#elif __GNUC__
# include <OpenGL/gl.h>
#else
# include <GL/gl.h>
#endif
#include <XPLMProcessing.h>
#ifndef XPLM300
# error This is made to be compiled against the XPLM300 SDK
#endif
static const char* windShieldObjPath = "path/to/windshield.obj";
static const vect3_t pos_offset = { 0, 0, 0 };
static const char* shaderDir = "path/to/shaders_dir";
static const vect2_t wiper1_pivot = { 0.4, 0.2 };
static const vect2_t wiper2_pivot = { 0.6, 0.2 };
static const vect2_t tp = { 0.5, -0.3 };
static const vect2_t gp = { 0.5, 1.3 };
static const vect2_t wp = { 1.5, 0.5 };
static librain_glass_t windShield = {
.slant_factor = 1.0,
.thrust_point = tp,
.gravity_point = gp,
.gravity_factor = 0.5,
.wind_point = wp,
.wind_factor = 1.0,
.wind_normal = 1.0,
.max_tas = 100.0,
.therm_inertia = 20.0,
.cabin_temp = 22.0,
.wiper_pivot = { wiper1_pivot, wiper2_pivot },
.wiper_radius_outer = { 0.4, 0.4 },
.wiper_radius_inner = { 0.05, 0.05 },
};
static librain_glass_t glassElementsArray[1] = { windShield };
static double wiper_angle[2] = { 0, 0 };
static double wiper_ang_vel[2] = { -M_PI * 0.8, M_PI * 0.4 };
/*
* Wiper edge positions. Wiper [0] goes _| and wiper [1] goes |_
*/
static const double wiper_edge[2][2] = {
{ -M_PI / 2, 0 },
{ 0, M_PI / 2 }
};
/* We'll be animating the wipers in this flight loop callback. */
static float wiper_floop(float delta_t, float time2, int counter, void* refcon);
static int draw_rain_effects(
XPLMDrawingPhase inPhase,
int inIsBefore,
void* inRefcon)
{
librain_draw_prepare(FALSE);
/* Load these OBJs using obj8_parse as necessary */
//librain_draw_z_depth(compassObj, NULL);
//librain_draw_z_depth(fuselageObj, NULL);
librain_draw_exec();
librain_draw_finish();
return 1;
}
PLUGIN_API int XPluginStart(
char* outName,
char* outSig,
char* outDesc)
{
strcpy(outName, "HelloWorld3RainPlugin");
strcpy(outSig, "librain.hello.world");
strcpy(outDesc, "A Hello World plug-in for librain");
/*
* Load our windshield object. You will also want to load
* any additional objects used for z-buffer filling.
*/
glassElementsArray[0].obj = obj8_parse(windShieldObjPath, pos_offset);
if (glassElementsArray[0].obj == NULL) {
XPLMDebugString("Oh noes, failed to load the windshield OBJ!");
librain_fini();
return (0);
}
/* Once we have loaded all OBJs, initialize the glass structures. */
if (!librain_init(shaderDir, glassElementsArray, 1)) {
XPLMDebugString("Oh noes, failed to initialize librain!");
return (0);
}
/*
* Turn on debug drawing. This makes all z-buffer drawing
* visible to verify it's working right. When you are satisfied
* it is working as intended, remove this line.
*/
librain_set_debug_draw(TRUE);
librain_set_wipers_visible(TRUE);
/*
* Register the animation callback. Execute every flight loop.
*/
XPLMRegisterFlightLoopCallback(wiper_floop, -1, NULL);
XPLMRegisterDrawCallback(draw_rain_effects, xplm_Phase_LastScene,
0, NULL);
return (1);
}
PLUGIN_API void XPluginStop(void)
{
librain_fini();
XPLMUnregisterDrawCallback(draw_rain_effects, xplm_Phase_LastScene,
0, NULL);
XPLMUnregisterFlightLoopCallback(wiper_floop, NULL);
}
static float wiper_floop(float delta_t, float time2, int counter, void* refcon)
{
for (int i = 0; i < 2; i++) {
wiper_angle[i] += wiper_ang_vel[i] * delta_t;
/* Wiper hit edge of movement? Reverse direction. */
if (wiper_angle[i] < wiper_edge[i][0]) {
wiper_ang_vel[i] = -wiper_ang_vel[i];
wiper_angle[i] = wiper_edge[i][0];
}
else if (wiper_angle[i] > wiper_edge[i][1]) {
wiper_ang_vel[i] = -wiper_ang_vel[i];
wiper_angle[i] = wiper_edge[i][1];
}
/*
* Even if the wiper is not moving, you MUST call this function
* with the angle unchanged and the last element set to FALSE.
* Otherwise the animation is not going to look right when the
* wipers are stopped.
*/
librain_set_wiper_angle(&glassElementsArray[0], i,
wiper_angle[i], TRUE);
}
/* This needs to execute every flight loop. */
return (-1.0);
}
PLUGIN_API void XPluginDisable(void)
{
}
PLUGIN_API int XPluginEnable(void)
{
return 1;
}
PLUGIN_API void XPluginReceiveMessage(XPLMPluginID inFrom, int inMsg,
void* inParam)
{
}
if you get compiled - just put this result and the rain.dll into the plugins folder of your aircraft in XPlane 11 :)
Greetings Thank you very much! Please tell me where to insert this code? Will it be interesting to work on the ixeg737 with the raindrop effect?