xp12camera

Owner: IIIlllIIIllI URL: git@github.com:nyangkosense/xp12camera.git

2

Commit 781709f4a3d5379b55194acb1be4b1808177ffaf by SM <seb.michalk@gmail.com> on 2025-06-25 12:31:15 +0200
diff --git a/FLIR_Camera.cpp b/FLIR_Camera.cpp
index 900a80e..43d1d89 100644
--- a/FLIR_Camera.cpp
+++ b/FLIR_Camera.cpp
@@ -37,6 +37,7 @@
  static XPLMHotKeyID gPanRightKey = NULL;
  static XPLMHotKeyID gTiltUpKey = NULL;
  static XPLMHotKeyID gTiltDownKey = NULL;
+static XPLMHotKeyID gThermalToggleKey = NULL;
  
  // Aircraft position datarefs
  static XPLMDataRef gPlaneX = NULL;
@@ -53,6 +54,9 @@
  static float gCameraTilt = -15.0f;   // Up/down rotation (degrees)
  static float gCameraHeight = -5.0f;  // Height below aircraft (meters)
  static float gCameraDistance = 3.0f; // Forward/back from aircraft center
+
+// Thermal view settings
+static int gThermalMode = 1;         // 0=Off, 1=White Hot, 2=Enhanced
  
  // Target tracking
  static int gTargetLocked = 0;
@@ -68,6 +72,7 @@
  static void PanRightCallback(void* inRefcon);
  static void TiltUpCallback(void* inRefcon);
  static void TiltDownCallback(void* inRefcon);
+static void ThermalToggleCallback(void* inRefcon);
  
  static int FLIRCameraFunc(XPLMCameraPosition_t* outCameraPosition, 
                            int inIsLosingControl, 
@@ -126,7 +131,11 @@
  
      XPLMDebugString("FLIR Camera System: Plugin loaded successfully\n");
      XPLMDebugString("FLIR Camera System: Press F9 to activate camera\n");
-     XPLMDebugString("FLIR Camera System: Use +/- for zoom, arrows for pan/tilt\n");
+     XPLMDebugString("FLIR Camera System: Use +/- for zoom, arrows for pan/tilt, T for thermal\n");
+     
+     gThermalToggleKey = XPLMRegisterHotKey(XPLM_VK_T, xplm_DownFlag,
+                                           "FLIR Thermal Toggle",
+                                           ThermalToggleCallback, NULL);
  
      return 1;
  }
@@ -241,6 +250,17 @@
      }
  }
  
+ static void ThermalToggleCallback(void* inRefcon)
+ {
+     if (gCameraActive) {
+         gThermalMode = (gThermalMode + 1) % 3;
+         char msg[256];
+         const char* modeNames[] = {"Off", "White Hot", "Enhanced"};
+         sprintf(msg, "FLIR Camera System: Thermal mode %s\n", modeNames[gThermalMode]);
+         XPLMDebugString(msg);
+     }
+ }
+ 
  /*
   * FLIRCameraFunc
   * 
@@ -362,21 +382,59 @@
      glVertex2f(centerX + bracketSize, centerY - bracketSize + 20);
      glEnd();
  
-     // Draw thermal effects
-     if (gZoomLevel > 2.0f) {
-         // At higher zoom, show simulated thermal signatures
-         glColor4f(1.0f, 0.8f, 0.6f, 0.7f);
+     // Draw thermal effects based on thermal mode
+     if (gThermalMode > 0) {
+         glEnable(GL_BLEND);
+         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+         
+         if (gThermalMode == 1) {
+             // White Hot mode - dark background with bright heat sources
+             glColor4f(0.1f, 0.1f, 0.2f, 0.3f);
+             glBegin(GL_QUADS);
+             glVertex2f(0, 0);
+             glVertex2f(screenWidth, 0);
+             glVertex2f(screenWidth, screenHeight);
+             glVertex2f(0, screenHeight);
+             glEnd();
+         } else if (gThermalMode == 2) {
+             // Enhanced mode - blue tint with enhanced contrast
+             glColor4f(0.0f, 0.2f, 0.4f, 0.25f);
+             glBegin(GL_QUADS);
+             glVertex2f(0, 0);
+             glVertex2f(screenWidth, 0);
+             glVertex2f(screenWidth, screenHeight);
+             glVertex2f(0, screenHeight);
+             glEnd();
+         }
          
-         // Simulate heat source (could be enhanced to detect actual objects)
-         float heatX = centerX + sinf(XPLMGetElapsedTime()) * 50;
-         float heatY = centerY + cosf(XPLMGetElapsedTime() * 1.3f) * 30;
+         // Simulate thermal signatures across the view
+         float time = XPLMGetElapsedTime();
+         for (int i = 0; i < 6; i++) {
+             for (int j = 0; j < 4; j++) {
+                 float x = (i + 1) * screenWidth / 7.0f;
+                 float y = (j + 1) * screenHeight / 5.0f;
+                 
+                 float intensity = (sinf(time * 0.2f + i * 0.5f + j * 0.3f) + 1.0f) * 0.4f;
+                 float size = 12.0f + intensity * 20.0f;
+                 
+                 if (gThermalMode == 1) {
+                     // White hot
+                     glColor4f(1.0f, 0.9f, 0.8f, intensity * 0.6f);
+                 } else {
+                     // Enhanced mode
+                     glColor4f(1.0f, 0.7f, 0.3f, intensity * 0.5f);
+                 }
+                 
+                 glBegin(GL_QUADS);
+                 glVertex2f(x - size/2, y - size/2);
+                 glVertex2f(x + size/2, y - size/2);
+                 glVertex2f(x + size/2, y + size/2);
+                 glVertex2f(x - size/2, y + size/2);
+                 glEnd();
+             }
+         }
          
-         glBegin(GL_QUADS);
-         glVertex2f(heatX - 10, heatY - 10);
-         glVertex2f(heatX + 10, heatY - 10);
-         glVertex2f(heatX + 10, heatY + 10);
-         glVertex2f(heatX - 10, heatY + 10);
-         glEnd();
+         glDisable(GL_BLEND);
      }
  
      // Draw HUD info
diff --git a/FLIR_Camera.o b/FLIR_Camera.o
index 1b8cc00..38efc38 100644
Binary files a/FLIR_Camera.o and b/FLIR_Camera.o differ
diff --git a/build/FLIR_Camera/win_x64/FLIR_Camera.xpl b/build/FLIR_Camera/win_x64/FLIR_Camera.xpl
index ebecd46..2ba2896 100755
Binary files a/build/FLIR_Camera/win_x64/FLIR_Camera.xpl and b/build/FLIR_Camera/win_x64/FLIR_Camera.xpl differ