Configurable Chase Camera (#188)
* ignore binaries * Add terrain probe * update camera system * change to tabs * formatting * compiles on windows 10 * use local view type enum * basic view type must always be changed * Code formatting
This commit is contained in:
committed by
Jason Watkins
parent
1fd6400a98
commit
c0abcf729f
173
xpcPlugin/CameraCallbacks.cpp
Normal file
173
xpcPlugin/CameraCallbacks.cpp
Normal file
@@ -0,0 +1,173 @@
|
||||
//
|
||||
// support.cpp
|
||||
// xpcPlugin
|
||||
//
|
||||
// Created by Kai Lehmkuehler on 14/01/2019.
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "MessageHandlers.h"
|
||||
#include "DataManager.h"
|
||||
#include "Log.h"
|
||||
|
||||
#include "XPLMUtilities.h"
|
||||
#include "XPLMGraphics.h"
|
||||
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
|
||||
namespace XPC
|
||||
{
|
||||
// Runway Camera Callback: Places the camera at campos.loc and points it at the aircraft, similar to a remote piloting experience.
|
||||
// Optionally, the direction of the camera can be specified by the user.
|
||||
int MessageHandlers::CamCallback_RunwayCam( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon)
|
||||
{
|
||||
if (outCameraPosition && !inIsLosingControl)
|
||||
{
|
||||
struct CameraProperties* campos = (struct CameraProperties*)inRefcon;
|
||||
|
||||
// camera position
|
||||
double clat = campos->loc[0];
|
||||
double clon = campos->loc[1];
|
||||
double calt = campos->loc[2];
|
||||
|
||||
double cX;
|
||||
double cY;
|
||||
double cZ;
|
||||
XPLMWorldToLocal(clat, clon, calt, &cX, &cY, &cZ);
|
||||
|
||||
outCameraPosition->x = cX;
|
||||
outCameraPosition->y = cY;
|
||||
outCameraPosition->z = cZ;
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam pos %f %f %f", clat, clon, calt);
|
||||
|
||||
// calculate camera direction to point at the aircraft
|
||||
if(campos->direction[0] < -180)
|
||||
{
|
||||
// local aircraft position
|
||||
double x = XPC::DataManager::GetDouble(XPC::DREF_LocalX, 0);
|
||||
double y = XPC::DataManager::GetDouble(XPC::DREF_LocalY, 0);
|
||||
double z = XPC::DataManager::GetDouble(XPC::DREF_LocalZ, 0);
|
||||
|
||||
// relative position vector camera to aircraft
|
||||
double dx = x - cX;
|
||||
double dy = y - cY;
|
||||
double dz = z - cZ;
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam vect %f %f %f", dx, dy, dz);
|
||||
|
||||
double pi = 3.141592653589793;
|
||||
|
||||
// horizontal distance
|
||||
double dist = sqrt(dx*dx + dz*dz);
|
||||
|
||||
outCameraPosition->pitch = atan2(dy, dist) * 180.0/pi;
|
||||
|
||||
double angle = atan2(dz, dx) * 180.0/pi; // rel to pos right (pos X)
|
||||
|
||||
outCameraPosition->heading = 90 + angle; // rel to north
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam p %f hdg %f ", outCameraPosition->pitch, outCameraPosition->heading);
|
||||
|
||||
outCameraPosition->roll = 0;
|
||||
}
|
||||
// point camera at specified direction
|
||||
else
|
||||
{
|
||||
outCameraPosition->roll = campos->direction[0];
|
||||
outCameraPosition->pitch = campos->direction[1];
|
||||
outCameraPosition->heading = campos->direction[2];
|
||||
}
|
||||
|
||||
outCameraPosition->zoom = campos->zoom;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Chase Camera Callback: Places the camera at campos.loc RELATIVE to and MOVING with the aircraft, pointing at the specified
|
||||
// direction.
|
||||
int MessageHandlers::CamCallback_ChaseCam( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon)
|
||||
{
|
||||
if (outCameraPosition && !inIsLosingControl)
|
||||
{
|
||||
double DTR = 3.141592653589793 / 180.0;
|
||||
|
||||
struct CameraProperties* campos = (struct CameraProperties*)inRefcon;
|
||||
|
||||
// Camera location relative to aircraft (local axes)
|
||||
|
||||
// local aircraft position
|
||||
double x = XPC::DataManager::GetDouble(XPC::DREF_LocalX, 0); // +east
|
||||
double y = XPC::DataManager::GetDouble(XPC::DREF_LocalY, 0); // +up
|
||||
double z = XPC::DataManager::GetDouble(XPC::DREF_LocalZ, 0); // +south
|
||||
|
||||
// aircraft attitude - degrees
|
||||
double phi = XPC::DataManager::GetFloat(XPC::DREF_Roll, 0);
|
||||
double the = XPC::DataManager::GetFloat(XPC::DREF_Pitch, 0);
|
||||
double psi = XPC::DataManager::GetFloat(XPC::DREF_HeadingTrue, 0);
|
||||
|
||||
// camera position vector with respect to aircraft CG [m] (body axes)
|
||||
double c_x = campos->loc[0]; // back
|
||||
double c_y = campos->loc[1]; // right
|
||||
double c_z = campos->loc[2]; // up
|
||||
|
||||
// camera position vector in local axes - will move with aircraft if not along principal axes
|
||||
// cLocal = Leb * cBody
|
||||
// http://www.xsquawkbox.net/xpsdk/mediawiki/ScreenCoordinates
|
||||
|
||||
double x_phi=c_y*cos(phi*DTR) + c_z*sin(phi*DTR);
|
||||
double y_phi=c_z*cos(phi*DTR) - c_y*sin(phi*DTR);
|
||||
double z_phi=c_x;
|
||||
|
||||
double x_the=x_phi;
|
||||
double y_the=y_phi*cos(the*DTR) - z_phi*sin(the*DTR);
|
||||
double z_the=z_phi*cos(the*DTR) + y_phi*sin(the*DTR);
|
||||
|
||||
double x_wrl=x_the*cos(psi*DTR) - z_the*sin(psi*DTR);
|
||||
double y_wrl=y_the ;
|
||||
double z_wrl=z_the*cos(psi*DTR) + x_the*sin(psi*DTR);
|
||||
|
||||
outCameraPosition->x = x + x_wrl;
|
||||
outCameraPosition->y = y + y_wrl;
|
||||
outCameraPosition->z = z + z_wrl;
|
||||
|
||||
// set direction value to -998 to keep camera pointing straight along that axis
|
||||
if(campos->direction[0] < -180)
|
||||
{
|
||||
outCameraPosition->roll = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outCameraPosition->roll = phi + campos->direction[0];
|
||||
}
|
||||
|
||||
if(campos->direction[1] < -180)
|
||||
{
|
||||
outCameraPosition->pitch = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outCameraPosition->pitch = the + campos->direction[1];
|
||||
}
|
||||
|
||||
if(campos->direction[2] < -180)
|
||||
{
|
||||
outCameraPosition->heading = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outCameraPosition->heading = psi + campos->direction[2];
|
||||
}
|
||||
|
||||
outCameraPosition->zoom = campos->zoom;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -14,6 +14,7 @@
|
||||
// may be used to endorse or promote products derived from this software
|
||||
// without specific prior written permission from the authors or
|
||||
// Laminar Research, respectively.
|
||||
|
||||
#include "MessageHandlers.h"
|
||||
#include "DataManager.h"
|
||||
#include "Drawing.h"
|
||||
@@ -23,6 +24,7 @@
|
||||
#include "XPLMScenery.h"
|
||||
#include "XPLMGraphics.h"
|
||||
|
||||
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <cstdint>
|
||||
@@ -643,10 +645,10 @@ namespace XPC
|
||||
unsigned char aircraft = buffer[5];
|
||||
Log::FormatLine(LOG_TRACE, "GETT", "Getting terrain information for aircraft %u", aircraft);
|
||||
|
||||
double loc[3];
|
||||
double X;
|
||||
double Y;
|
||||
double Z;
|
||||
double loc[3];
|
||||
double X;
|
||||
double Y;
|
||||
double Z;
|
||||
memcpy(loc, buffer + 6, 24);
|
||||
|
||||
if(loc[0] == -998 || loc[1] == -998 || loc[2] == -998)
|
||||
@@ -677,9 +679,9 @@ namespace XPC
|
||||
int rc = XPLMProbeTerrainXYZ(Terrain_probe, X, Y, Z, &probe_data);
|
||||
|
||||
// transform probe location to world coordinates
|
||||
double lat;
|
||||
double lon;
|
||||
double alt;
|
||||
double lat;
|
||||
double lon;
|
||||
double alt;
|
||||
|
||||
if(rc == 0)
|
||||
{
|
||||
@@ -819,105 +821,60 @@ namespace XPC
|
||||
// Update Log
|
||||
Log::FormatLine(LOG_TRACE, "VIEW", "Message Received(Conn %i)", connection.id);
|
||||
|
||||
int enable_camera_location = 0;
|
||||
bool enable_advanced_camera = false;
|
||||
|
||||
const std::size_t size = msg.GetSize();
|
||||
if (size == 9)
|
||||
{
|
||||
// default view switcher as before
|
||||
}
|
||||
else if (size == 37)
|
||||
else if (size == 49)
|
||||
{
|
||||
// Allow camera location control
|
||||
enable_camera_location = 1;
|
||||
enable_advanced_camera = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Log::FormatLine(LOG_ERROR, "VIEW", "Error: Unexpected length. Message was %d bytes, expected 9 or 37.", size);
|
||||
Log::FormatLine(LOG_ERROR, "VIEW", "Error: Unexpected length. Message was %d bytes, expected 9 or 49.", size);
|
||||
return;
|
||||
}
|
||||
|
||||
// get msg data
|
||||
const unsigned char* buffer = msg.GetBuffer();
|
||||
int type = *((int*)(buffer + 5));
|
||||
XPLMCommandKeyStroke(type);
|
||||
|
||||
if(type == 79 && enable_camera_location == 1) // runway camera view
|
||||
// get view type
|
||||
int view_type;
|
||||
memcpy(&view_type, buffer + 5, 4);
|
||||
|
||||
// set view by calling the corresponding key stroke
|
||||
XPLMCommandKeyStroke(view_type);
|
||||
|
||||
|
||||
VIEW_TYPE viewRunway = VIEW_TYPE::XPC_VIEW_RUNWAY;
|
||||
VIEW_TYPE viewChase = VIEW_TYPE::XPC_VIEW_CHASE;
|
||||
|
||||
// advanced runway camera view
|
||||
if(view_type == static_cast<int>(viewRunway) && enable_advanced_camera == true)
|
||||
{
|
||||
static struct CameraProperties campos;
|
||||
static struct CameraProperties campos; // static variable for continuous callback access
|
||||
|
||||
campos.loc[0] = *(double*)(buffer+9);
|
||||
campos.loc[1] = *(double*)(buffer+17);
|
||||
campos.loc[2] = *(double*)(buffer+25);
|
||||
campos.direction[0] = -998;
|
||||
campos.direction[1] = -998;
|
||||
campos.direction[2] = -998;
|
||||
campos.zoom = *(float*)(buffer+33);
|
||||
memcpy(&campos, buffer+9 , sizeof(struct CameraProperties));
|
||||
|
||||
Log::FormatLine(LOG_TRACE, "VIEW", "Cam pos %f %f %f zoom %f", campos.loc[0], campos.loc[1], campos.loc[2],campos.zoom);
|
||||
Log::FormatLine(LOG_TRACE, "VIEW", "Cam pos %f %f %f zoom %f", campos.loc[0], campos.loc[1], campos.loc[2], campos.zoom);
|
||||
|
||||
XPLMControlCamera(xplm_ControlCameraUntilViewChanges, CamFunc, &campos);
|
||||
XPLMControlCamera(xplm_ControlCameraUntilViewChanges, CamCallback_RunwayCam, &campos);
|
||||
}
|
||||
}
|
||||
|
||||
int MessageHandlers::CamFunc( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon)
|
||||
{
|
||||
if (outCameraPosition && !inIsLosingControl)
|
||||
// advanced chase camera view
|
||||
else if(view_type == static_cast<int>(viewChase) && enable_advanced_camera == true)
|
||||
{
|
||||
struct CameraProperties* campos = (struct CameraProperties*)inRefcon;
|
||||
static struct CameraProperties campos; // static variable for continuous callback access
|
||||
|
||||
// camera position
|
||||
double clat = campos->loc[0];
|
||||
double clon = campos->loc[1];
|
||||
double calt = campos->loc[2];
|
||||
memcpy(&campos, buffer+9 , sizeof(struct CameraProperties));
|
||||
|
||||
double cX, cY, cZ;
|
||||
XPLMWorldToLocal(clat, clon, calt, &cX, &cY, &cZ);
|
||||
Log::FormatLine(LOG_TRACE, "VIEW", "Cam pos %f %f %f zoom %f", campos.loc[0], campos.loc[1], campos.loc[2], campos.zoom);
|
||||
|
||||
outCameraPosition->x = cX;
|
||||
outCameraPosition->y = cY;
|
||||
outCameraPosition->z = cZ;
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam pos %f %f %f", clat, clon, calt);
|
||||
|
||||
if(campos->direction[0] == -998) // calculate camera direction
|
||||
{
|
||||
// aircraft position
|
||||
double x = XPC::DataManager::GetDouble(XPC::DREF_LocalX, 0);
|
||||
double y = XPC::DataManager::GetDouble(XPC::DREF_LocalY, 0);
|
||||
double z = XPC::DataManager::GetDouble(XPC::DREF_LocalZ, 0);
|
||||
|
||||
// relative position vector cam to plane
|
||||
double dx = x - cX;
|
||||
double dy = y - cY;
|
||||
double dz = z - cZ;
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam vect %f %f %f", dx, dy, dz);
|
||||
|
||||
double pi = 3.141592653589793;
|
||||
|
||||
// horizontal distance
|
||||
double dist = sqrt(dx*dx + dz*dz);
|
||||
|
||||
outCameraPosition->pitch = atan2(dy, dist) * 180.0/pi;
|
||||
|
||||
double angle = atan2(dz, dx) * 180.0/pi; // rel to pos right (pos X)
|
||||
|
||||
outCameraPosition->heading = 90 + angle; // rel to north
|
||||
|
||||
// Log::FormatLine(LOG_TRACE, "CAM", "Cam p %f hdg %f ", outCameraPosition->pitch, outCameraPosition->heading);
|
||||
|
||||
outCameraPosition->roll = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
outCameraPosition->roll = campos->direction[0];
|
||||
outCameraPosition->pitch = campos->direction[1];
|
||||
outCameraPosition->heading = campos->direction[2];
|
||||
}
|
||||
|
||||
outCameraPosition->zoom = campos->zoom;
|
||||
XPLMControlCamera(xplm_ControlCameraUntilViewChanges, CamCallback_ChaseCam, &campos);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
void MessageHandlers::HandleWypt(const Message& msg)
|
||||
|
||||
@@ -15,6 +15,23 @@ namespace XPC
|
||||
/// A function that handles a message.
|
||||
typedef void(*MessageHandler)(const Message&);
|
||||
|
||||
enum class VIEW_TYPE
|
||||
{
|
||||
XPC_VIEW_FORWARDS = 73,
|
||||
XPC_VIEW_DOWN,
|
||||
XPC_VIEW_LEFT,
|
||||
XPC_VIEW_RIGHT,
|
||||
XPC_VIEW_BACK,
|
||||
XPC_VIEW_TOWER,
|
||||
XPC_VIEW_RUNWAY,
|
||||
XPC_VIEW_CHASE,
|
||||
XPC_VIEW_FOLLOW,
|
||||
XPC_VIEW_FOLLOWWITHPANEL,
|
||||
XPC_VIEW_SPOT,
|
||||
XPC_VIEW_FULLSCREENWITHHUD,
|
||||
XPC_VIEW_FULLSCREENNOHUD,
|
||||
};
|
||||
|
||||
/// Handles incoming messages and manages connections.
|
||||
///
|
||||
/// \author Jason Watkins
|
||||
@@ -61,7 +78,8 @@ namespace XPC
|
||||
static void HandleXPlaneData(const Message& msg);
|
||||
static void HandleUnknown(const Message& msg);
|
||||
|
||||
static int CamFunc( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon);
|
||||
static int CamCallback_RunwayCam( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon);
|
||||
static int CamCallback_ChaseCam( XPLMCameraPosition_t * outCameraPosition, int inIsLosingControl, void *inRefcon);
|
||||
|
||||
struct CameraProperties{
|
||||
double loc[3];
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
3D0F44CE21C6D3E7008A0655 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3D0F44CD21C6D3E7008A0655 /* Timer.cpp */; };
|
||||
5B36040D23731E4A003ACE12 /* CameraCallbacks.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B36040C23731E4A003ACE12 /* CameraCallbacks.cpp */; };
|
||||
BE37D960187C8B0F0033B082 /* XPCPlugin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE37D95E187C8B0F0033B082 /* XPCPlugin.cpp */; };
|
||||
BE8361EF18C5591C00E9C923 /* mac.xpl in CopyFiles */ = {isa = PBXBuildFile; fileRef = D607B19909A556E400699BC3 /* mac.xpl */; };
|
||||
BEABAD371AE041A3007BA7DA /* DataManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEABAD2B1AE041A3007BA7DA /* DataManager.cpp */; };
|
||||
@@ -39,6 +40,7 @@
|
||||
/* Begin PBXFileReference section */
|
||||
3D0F44CC21C6D3E7008A0655 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = "<group>"; };
|
||||
3D0F44CD21C6D3E7008A0655 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = "<group>"; };
|
||||
5B36040C23731E4A003ACE12 /* CameraCallbacks.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CameraCallbacks.cpp; sourceTree = "<group>"; };
|
||||
BE37D95E187C8B0F0033B082 /* XPCPlugin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XPCPlugin.cpp; sourceTree = SOURCE_ROOT; usesTabs = 1; };
|
||||
BEABAD2B1AE041A3007BA7DA /* DataManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataManager.cpp; sourceTree = "<group>"; };
|
||||
BEABAD2C1AE041A3007BA7DA /* DataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataManager.h; sourceTree = "<group>"; };
|
||||
@@ -53,7 +55,6 @@
|
||||
BEABAD3D1AE0498D007BA7DA /* UDPSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UDPSocket.cpp; sourceTree = "<group>"; };
|
||||
BEABAD3E1AE0498D007BA7DA /* UDPSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UDPSocket.h; sourceTree = "<group>"; };
|
||||
BEDC620218EDF1A7005DB364 /* xplaneConnect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xplaneConnect.c; path = ../C/src/xplaneConnect.c; sourceTree = "<group>"; };
|
||||
BEDC620318EDF1A7005DB364 /* xplaneConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = xplaneConnect.h; path = ../C/src/xplaneConnect.h; sourceTree = "<group>"; };
|
||||
D607B19909A556E400699BC3 /* mac.xpl */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = mac.xpl; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D6A7BDA916A1DEA200D1426A /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
|
||||
D6A7BDC016A1DEC000D1426A /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
|
||||
@@ -79,6 +80,7 @@
|
||||
AC4E46B809C2E0B3006B7E1B /* src */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5B36040C23731E4A003ACE12 /* CameraCallbacks.cpp */,
|
||||
3D0F44CD21C6D3E7008A0655 /* Timer.cpp */,
|
||||
BE37D95E187C8B0F0033B082 /* XPCPlugin.cpp */,
|
||||
BEDC620218EDF1A7005DB364 /* xplaneConnect.c */,
|
||||
@@ -96,7 +98,6 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3D0F44CC21C6D3E7008A0655 /* Timer.h */,
|
||||
BEDC620318EDF1A7005DB364 /* xplaneConnect.h */,
|
||||
BEABAD2C1AE041A3007BA7DA /* DataManager.h */,
|
||||
BEABAD301AE041A3007BA7DA /* Drawing.h */,
|
||||
BEABAD321AE041A3007BA7DA /* Log.h */,
|
||||
@@ -191,6 +192,7 @@
|
||||
files = (
|
||||
BEABAD3A1AE041A3007BA7DA /* Log.cpp in Sources */,
|
||||
BEABAD3B1AE041A3007BA7DA /* Message.cpp in Sources */,
|
||||
5B36040D23731E4A003ACE12 /* CameraCallbacks.cpp in Sources */,
|
||||
BEABAD3C1AE041A3007BA7DA /* MessageHandlers.cpp in Sources */,
|
||||
BEDC620418EDF1A7005DB364 /* xplaneConnect.c in Sources */,
|
||||
BEABAD371AE041A3007BA7DA /* DataManager.cpp in Sources */,
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<ProjectGuid>{6AEF5D28-2701-44FF-AE10-1DEF07C5CAEA}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>xpcPlugin</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
@@ -210,6 +210,7 @@
|
||||
<ClInclude Include="..\UDPSocket.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\CameraCallbacks.cpp" />
|
||||
<ClCompile Include="..\DataManager.cpp" />
|
||||
<ClCompile Include="..\Drawing.cpp" />
|
||||
<ClCompile Include="..\Log.cpp" />
|
||||
|
||||
@@ -33,6 +33,9 @@
|
||||
<ClInclude Include="..\MessageHandlers.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Timer.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\XPCPlugin.cpp">
|
||||
@@ -56,6 +59,12 @@
|
||||
<ClCompile Include="..\MessageHandlers.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\Timer.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\CameraCallbacks.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Library Include="..\SDK\Libraries\Win\XPLM.lib">
|
||||
|
||||
Reference in New Issue
Block a user