gcblue-commits Mailing List for Global Conflict Blue (Page 67)
Status: Alpha
Brought to you by:
ddcforge
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(112) |
Feb
(106) |
Mar
(88) |
Apr
(111) |
May
(53) |
Jun
(60) |
Jul
(58) |
Aug
(61) |
Sep
(45) |
Oct
(31) |
Nov
(71) |
Dec
(70) |
2005 |
Jan
(33) |
Feb
(57) |
Mar
(98) |
Apr
(47) |
May
(53) |
Jun
(79) |
Jul
(79) |
Aug
|
Sep
(33) |
Oct
(1) |
Nov
(20) |
Dec
(64) |
2006 |
Jan
(20) |
Feb
(1) |
Mar
(43) |
Apr
(11) |
May
(8) |
Jun
(23) |
Jul
|
Aug
(28) |
Sep
(58) |
Oct
(25) |
Nov
(47) |
Dec
(70) |
From: <ddc...@pr...> - 2004-02-01 22:21:05
|
Update of /cvsroot/gcblue/gcb_wx/include/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11210/include/common Modified Files: simmath.h Log Message: Index: simmath.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/common/simmath.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** simmath.h 20 Jan 2004 03:02:52 -0000 1.7 --- simmath.h 1 Feb 2004 22:19:08 -0000 1.8 *************** *** 66,69 **** --- 66,70 ---- void Set(float x1,float x2,float y1,float y2); void ApplyBounds(tcGeoRect& r); + bool operator==(const tcGeoRect& r); }; |
From: <ddc...@pr...> - 2004-02-01 22:21:05
|
Update of /cvsroot/gcblue/gcb_wx/src/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11210/src/common Modified Files: simmath.cpp Log Message: Index: simmath.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/common/simmath.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** simmath.cpp 20 Jan 2004 03:02:53 -0000 1.5 --- simmath.cpp 1 Feb 2004 22:19:08 -0000 1.6 *************** *** 192,197 **** --- 192,203 ---- } + } + bool tcGeoRect::operator==(const tcGeoRect& r) + { + return ((left == r.left)&&(right == r.right)&& + (top == r.top)&&(bottom == r.bottom)); } + /******************************* tcTrack *******************************/ /** |
From: <ddc...@pr...> - 2004-01-31 04:50:37
|
Update of /cvsroot/gcblue/gcb_wx/include/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/include/sim Modified Files: Game.h tcCreditView.h tcLauncherState.h tcMapView.h tcMissileObject.h tcPlatformObject.h tcRadarSensorState.h tcSensorState.h tcSimState.h tcSurfaceObject.h Log Message: Index: Game.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/Game.h,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** Game.h 20 Jan 2004 03:02:52 -0000 1.23 --- Game.h 29 Jan 2004 00:05:05 -0000 1.24 *************** *** 227,230 **** --- 227,231 ---- void ProcessTextCommand(tsCommandInfo cmd_info); void SaveScenario(char *azFilePath); + void SecondaryHook(wxCommandEvent& event); void Set3D(wxCommandEvent& event); void SetBriefingMode(wxCommandEvent& event); Index: tcCreditView.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcCreditView.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcCreditView.h 30 Nov 2003 17:23:52 -0000 1.3 --- tcCreditView.h 29 Jan 2004 00:05:17 -0000 1.4 *************** *** 39,46 **** tcString mzCaption; float mfTrailSpace; ! bool mbBold; }; public: ! void AddCredit(tcString& s, float afTrailSpace, bool abBold); void AttachSound(tcSound *apSound) {mpSound=apSound;} bool Init(void); --- 39,46 ---- tcString mzCaption; float mfTrailSpace; ! int mnEffect; ///< 0 - standard text, 1 - bold, 2 - small }; public: ! void AddCredit(tcString& s, float afTrailSpace, int effect); void AttachSound(tcSound *apSound) {mpSound=apSound;} bool Init(void); *************** *** 53,60 **** virtual ~tcCreditView(void); private: ! enum {MAX_CREDITS = 64}; Gdiplus::SolidBrush *mpBrush; Gdiplus::Font *mpFont; Gdiplus::Font *mpFontLarge; Gdiplus::Pen *mpPen; tcTime mcTime; --- 53,61 ---- virtual ~tcCreditView(void); private: ! enum {MAX_CREDITS = 96}; Gdiplus::SolidBrush *mpBrush; Gdiplus::Font *mpFont; Gdiplus::Font *mpFontLarge; + Gdiplus::Font *mpFontSmall; Gdiplus::Pen *mpPen; tcTime mcTime; Index: tcLauncherState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcLauncherState.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcLauncherState.h 4 Jan 2004 22:24:52 -0000 1.2 --- tcLauncherState.h 29 Jan 2004 00:05:17 -0000 1.3 *************** *** 23,35 **** #define _TCLAUNCHERSTATE_H_ - #include "tcDatabase.h" - #include "tcGenericDBObject.h" - #include "tcLauncherDBObject.h" - #include "tcMissileDBObject.h" #include "simmath.h" #include "AError.h" using namespace Database; /** * State for individual launcher. --- 23,42 ---- #define _TCLAUNCHERSTATE_H_ #include "simmath.h" #include "AError.h" + #include <vector> + + namespace Database + { + class tcDatabase; + class tcLauncherDBObject; + class tcDatabaseObject; + enum teWeaponLaunchMode; + } using namespace Database; + class tcRadar; + /** * State for individual launcher. *************** *** 50,53 **** --- 57,61 ---- unsigned int mnPending; float pointingAngle; ///< boresight azimuth angle in radians relative nose/bow + tcRadar *fireControlSensor; ///< sensor for fire control guidance }; *************** *** 59,79 **** public: int mnCount; ! tsLData ma[tcGenericDBObject::MAXLAUNCHERS]; static tcDatabase *mpDatabase; void AddFullLauncher(tcDatabase *pDatabase, tnPoolIndex anKey, float azimuth_rad); ! int GetLauncherQuantity(unsigned anLauncher) { ! if ((int)anLauncher > mnCount) {return -1;} ! return ma[anLauncher].mnCurrent - ma[anLauncher].mnPending; ! } std::string GetLaunchMode(unsigned anLauncher); ! bool IsDatumLaunch(unsigned anLauncher) { ! if ((int)anLauncher > mnCount) {return false;} ! return ma[anLauncher].meLaunchMode == DATUM_ONLY; ! } ! bool IsSeekerLaunch(unsigned anLauncher) { ! if ((int)anLauncher > mnCount) {return false;} ! return ma[anLauncher].meLaunchMode == SEEKER_TRACK; ! } void Serialize(tcFile& file, bool abLoad); tcLauncherState(); --- 67,78 ---- public: int mnCount; ! std::vector<tsLData> launchers; ///< vector of launcher state info static tcDatabase *mpDatabase; void AddFullLauncher(tcDatabase *pDatabase, tnPoolIndex anKey, float azimuth_rad); ! int GetLauncherQuantity(unsigned anLauncher); std::string GetLaunchMode(unsigned anLauncher); ! bool IsDatumLaunch(unsigned anLauncher); ! bool IsSeekerLaunch(unsigned anLauncher); void Serialize(tcFile& file, bool abLoad); tcLauncherState(); Index: tcMapView.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcMapView.h,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** tcMapView.h 5 Jan 2004 02:48:02 -0000 1.12 --- tcMapView.h 29 Jan 2004 00:05:17 -0000 1.13 *************** *** 260,263 **** --- 260,264 ---- void UpdateNavPoints(std::vector<tcPoint> *mpPoints); int Hook(wxPoint pscreen); + long HookSecondary(wxPoint pscreen); int GetClosest(wxPoint pscreen); Index: tcMissileObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcMissileObject.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcMissileObject.h 8 Dec 2003 03:06:36 -0000 1.2 --- tcMissileObject.h 29 Jan 2004 00:05:17 -0000 1.3 *************** *** 47,51 **** float mfRangeToObjective_km; // for segment determination UINT mnCurrentSegment; ! tcRadarSensorState mcSensorState; tsMissileKState msKState; tcMissileDBObject *mpDBObject; // pointer to valid database obj --- 47,51 ---- float mfRangeToObjective_km; // for segment determination UINT mnCurrentSegment; ! tcRadar mcSensorState; tsMissileKState msKState; tcMissileDBObject *mpDBObject; // pointer to valid database obj *************** *** 57,61 **** virtual void SetHeading(float afNewHeading) {mfGoalHeading_rad=afNewHeading;} virtual void SetSpeed(float afNewSpeed) {mfGoalSpeed_kts=afNewSpeed;} ! virtual tcRadarSensorState* GetSensorState() {return &mcSensorState;} virtual void DesignateTarget(long anID); virtual int GetGuidanceParameters(tsGuidanceParameters& gp); --- 57,61 ---- virtual void SetHeading(float afNewHeading) {mfGoalHeading_rad=afNewHeading;} virtual void SetSpeed(float afNewSpeed) {mfGoalSpeed_kts=afNewSpeed;} ! virtual tcRadar* GetSensorState() {return &mcSensorState;} virtual void DesignateTarget(long anID); virtual int GetGuidanceParameters(tsGuidanceParameters& gp); Index: tcPlatformObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcPlatformObject.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcPlatformObject.h 8 Dec 2003 03:06:36 -0000 1.6 --- tcPlatformObject.h 29 Jan 2004 00:05:17 -0000 1.7 *************** *** 1,20 **** /* ! * Copyright (C) 2003 Dewitt "Cole" Colclough (de...@tw...) ! * All rights reserved. ! * ! * This file is part of the Global Conflict Blue (GCB) program. ! * GCB is free software; you can redistribute it and/or modify ! * it under the terms of version 2 of the GNU General Public License as ! * published by the Free Software Foundation. ! * ! * GCB is distributed in the hope that it will be useful, ! * but WITHOUT ANY WARRANTY; without even the implied warranty of ! * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! * GNU General Public License for more details. ! * ! * You should have received a copy of the GNU General Public License ! * along with GCB; if not, write to the Free Software ! * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! */ #pragma once --- 1,20 ---- /* ! * Copyright (C) 2003 Dewitt "Cole" Colclough (de...@tw...) ! * All rights reserved. ! * ! * This file is part of the Global Conflict Blue (GCB) program. ! * GCB is free software; you can redistribute it and/or modify ! * it under the terms of version 2 of the GNU General Public License as ! * published by the Free Software Foundation. ! * ! * GCB is distributed in the hope that it will be useful, ! * but WITHOUT ANY WARRANTY; without even the implied warranty of ! * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! * GNU General Public License for more details. ! * ! * You should have received a copy of the GNU General Public License ! * along with GCB; if not, write to the Free Software ! * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! */ #pragma once *************** *** 29,91 **** using namespace AI; /** ! * A generic moving object with sensors, launchers, and guidance. ! * ! * @see tcGameObject ! */ class tcPlatformObject : public tcGameObject { public: ! float fuel_kg; ///< current fuel ! tcLauncherState mcLauncherState; ! //tcSensorState* mapSensorState[MAXSENSORS]; ! std::vector<tcSensorState*> mapSensorState; ! //int mnSensors; ! tcGuidanceState mcGS; ! tcAIData mcAI; ! tcLaunchRequest mcLaunchRequest; ! tsGeoPoint msTargetDatum; ! tsFormationParameters msFormationParameters; ! tcGenericDBObject *mpDBObject; ! virtual void Clear(void); ! virtual void DesignateDatum(tcPoint p); ! virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher); ! virtual void DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher); ! virtual void DesignateTarget(long anID) {mcAI.SetTarget(anID);} ! virtual void GetDatum(tsGeoPoint& p) {p=msTargetDatum;} ! virtual int GetLauncherQuantity(unsigned anLauncher); ! virtual void GetLauncherState(tcLauncherState*& pLauncherState) {pLauncherState=&mcLauncherState;} ! // virtual void GetSensorState(tcSensorState** aapSensorState, int& rnCount); ! // virtual void GetSensorStateRef(tcSensorState**& rapSensorState, int& rnCount); ! virtual bool HasActivatedSensor(void); ! virtual bool IsRadiating(void); ! virtual std::vector<tcSensorState*>* GetSensorStateArray(void) {return &mapSensorState;} ! virtual void Launch(tnPoolIndex& rnKey, unsigned& rnLauncher); ! virtual void RandInitNear(float afLon_deg, float afLat_deg); ! virtual void SetAltitude(float new_altitude_m) {mcGS.SetAltitude(new_altitude_m);} ! virtual void SetHeading(float afNewHeading) {mcGS.SetHeading(afNewHeading);} ! virtual void SetSpeed(float afNewSpeed); ! virtual void SetLaunch(int anLauncher, int anQuantity); ! virtual void SetFormation(tsFormationParameters asFP) {msFormationParameters=asFP;} ! virtual void UpdateKin(double afStatusTime); ! void PrintToFile(tcFile&); ! void SaveToFile(tcFile& file); ! void LoadFromFile(tcFile& file); ! virtual void Serialize(tcFile& file, bool mbLoad); ! tcPlatformObject(void); ! tcPlatformObject(tcPlatformObject&); ! tcPlatformObject(tcGenericDBObject *obj); ! virtual ~tcPlatformObject(void); protected: ! virtual void ApplyRestrictions(void); ! virtual void Move(float dt_s); ! virtual void UpdateClimb(float dt_s) {}; ! virtual void UpdateFormationGuidance(void); ! virtual void UpdateHeading(float dt_s); ! virtual void UpdateLauncherState(float dt_s); ! virtual void UpdateSpeed(float dt_s); }; \ No newline at end of file --- 29,98 ---- using namespace AI; + namespace Database + { + class tcGenericDBObject; + } + /** ! * A generic moving object with sensors, launchers, and guidance. ! * ! * @see tcGameObject ! */ class tcPlatformObject : public tcGameObject { public: ! float fuel_kg; ///< current fuel ! tcLauncherState mcLauncherState; ! //tcSensorState* mapSensorState[MAXSENSORS]; ! std::vector<tcSensorState*> mapSensorState; ! //int mnSensors; ! tcGuidanceState mcGS; ! tcAIData mcAI; ! tcLaunchRequest mcLaunchRequest; ! tsGeoPoint msTargetDatum; ! tsFormationParameters msFormationParameters; ! tcGenericDBObject *mpDBObject; ! virtual void Clear(void); ! virtual void DesignateDatum(tcPoint p); ! virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher); ! virtual void DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher); ! virtual void DesignateTarget(long anID) {mcAI.SetTarget(anID);} ! virtual void GetDatum(tsGeoPoint& p) {p=msTargetDatum;} ! virtual int GetLauncherQuantity(unsigned anLauncher); ! virtual void GetLauncherState(tcLauncherState*& pLauncherState) {pLauncherState=&mcLauncherState;} ! // virtual void GetSensorState(tcSensorState** aapSensorState, int& rnCount); ! // virtual void GetSensorStateRef(tcSensorState**& rapSensorState, int& rnCount); ! virtual bool HasActivatedSensor(void); ! virtual bool IsRadiating(void); ! virtual std::vector<tcSensorState*>* GetSensorStateArray(void) {return &mapSensorState;} ! virtual void Launch(tnPoolIndex& rnKey, unsigned& rnLauncher); ! virtual void RandInitNear(float afLon_deg, float afLat_deg); ! virtual void SetAltitude(float new_altitude_m) {mcGS.SetAltitude(new_altitude_m);} ! virtual void SetHeading(float afNewHeading) {mcGS.SetHeading(afNewHeading);} ! virtual void SetSpeed(float afNewSpeed); ! virtual void SetLaunch(int anLauncher, int anQuantity); ! virtual void SetFormation(tsFormationParameters asFP) {msFormationParameters=asFP;} ! virtual void UpdateKin(double afStatusTime); ! void PrintToFile(tcFile&); ! void SaveToFile(tcFile& file); ! void LoadFromFile(tcFile& file); ! virtual void Serialize(tcFile& file, bool mbLoad); ! tcPlatformObject(void); ! tcPlatformObject(tcPlatformObject&); ! tcPlatformObject(tcGenericDBObject *obj); ! virtual ~tcPlatformObject(void); protected: ! float lastHeadingDelta; // a workaround to smooth heading rate changes ! ! virtual void ApplyRestrictions(void); ! virtual void Move(float dt_s); ! virtual void UpdateClimb(float dt_s) {}; ! virtual void UpdateFormationGuidance(void); ! virtual void UpdateHeading(float dt_s); ! virtual void UpdateLauncherState(float dt_s); ! virtual void UpdateSpeed(float dt_s); }; \ No newline at end of file Index: tcRadarSensorState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcRadarSensorState.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcRadarSensorState.h 4 Jan 2004 22:24:52 -0000 1.2 --- tcRadarSensorState.h 29 Jan 2004 00:05:17 -0000 1.3 *************** *** 20,33 **** #pragma once ! #ifndef _TCRADARSENSORSTATE_H_ ! #define _TCRADARSENSORSTATE_H_ #include "tcSensorState.h" #include "tcRadarDBObject.h" /** * */ ! typedef struct _radartargetinfo { float mfLat_rad; --- 20,34 ---- #pragma once ! #ifndef _tcRadar_H_ ! #define _tcRadar_H_ #include "tcSensorState.h" #include "tcRadarDBObject.h" + #include <vector> /** * */ ! struct tsRadarTargetInfo { float mfLat_rad; *************** *** 37,58 **** float mfSpeed_mps; float mfRCS_dbsm; ! } tsRadarTargetInfo; ! /** ! * ! */ ! class tcRadarSensorState : public tcSensorState { public: tcRadarDBObject *mpDBObj; - bool InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad); - bool IsDetected(const tsRadarTargetInfo& asRTI, float& rfRange_km); void Serialize(tcFile& file, bool mbLoad); ! tcRadarSensorState& operator=(tcRadarSensorState& ss); ! tcRadarSensorState* Clone(void); ! tcRadarSensorState(); ! virtual ~tcRadarSensorState(); }; #endif \ No newline at end of file --- 38,70 ---- float mfSpeed_mps; float mfRCS_dbsm; ! } ; ! class tcGameObject; ! ! class tcRadar : public tcSensorState { public: tcRadarDBObject *mpDBObj; + unsigned int fireControlTracks; + + virtual bool CanDetectTarget(const tcGameObject* target, float& range_km); + virtual bool InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad); + + // fire control methods + virtual bool IsTrackAvailable(const tcGameObject* target); + virtual bool RequestTrack(const tcGameObject* target); + virtual bool ReleaseTrack(); void Serialize(tcFile& file, bool mbLoad); ! tcRadar& operator=(tcRadar& ss); ! tcRadar* Clone(); ! tcRadar(); ! virtual ~tcRadar(); }; + + + + + #endif \ No newline at end of file Index: tcSensorState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcSensorState.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcSensorState.h 4 Jan 2004 22:24:52 -0000 1.2 --- tcSensorState.h 29 Jan 2004 00:05:18 -0000 1.3 *************** *** 56,60 **** void GetTestArea(tcRect& region); ! bool InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad); void Serialize(tcFile& file, bool mbLoad); void UpdateCoverage(tsGeoPoint p,float az_rad); --- 56,60 ---- void GetTestArea(tcRect& region); ! virtual bool InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad); void Serialize(tcFile& file, bool mbLoad); void UpdateCoverage(tsGeoPoint p,float az_rad); Index: tcSimState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcSimState.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tcSimState.h 29 Dec 2003 01:10:25 -0000 1.11 --- tcSimState.h 29 Jan 2004 00:05:21 -0000 1.12 *************** *** 81,85 **** tcSimPythonInterface *mpPythonInterface; tcSensorMap mcSensorMap; ! tcRadarSensorState mcDefaultRadar; // used to test for detections before creating object double mfLastSensorUpdate; double mfLastSensorAgeOut; --- 81,85 ---- tcSimPythonInterface *mpPythonInterface; tcSensorMap mcSensorMap; ! tcRadar mcDefaultRadar; // used to test for detections before creating object double mfLastSensorUpdate; double mfLastSensorAgeOut; *************** *** 102,106 **** void AttachUserInfo(tcUserInfo *apUserInfo) {mpUserInfo=apUserInfo;} void BuildCollisionGroups(); ! bool RadarCanDetect(tnPoolIndex anSensorKey, const tsRadarTargetInfo& asRTI, tsGeoPoint asSensorLocation, float afSensorAz); void ChangeHeading(long anKey, float afNewHeading); --- 102,106 ---- void AttachUserInfo(tcUserInfo *apUserInfo) {mpUserInfo=apUserInfo;} void BuildCollisionGroups(); ! bool RadarCanDetect(tnPoolIndex anSensorKey, const tcGameObject* target, tsGeoPoint asSensorLocation, float afSensorAz); void ChangeHeading(long anKey, float afNewHeading); *************** *** 174,186 **** float GetFractionalDamage(float afDamage, tcGameObject *apGameObj); ! bool IsDetectedESM(tcESMSensorState *apESM, tcRadarSensorState *apEmitterRadar, tcGameObject *apEmitterPlatform, float& rfAz_rad); void PerformAutoEngage(tcGameObject* apGameObj, double afTime); void ProcessRadarDetection(tcGameObject *apRadarPlat,tcGameObject *apTarget, ! tcRadarSensorState *apRadarSS); void ProcessESMDetection(tcGameObject *apESMPlat,tcGameObject *apTarget, tcESMSensorState *apESMSS); ! void UpdateFireControl(tcGameObject *apGameObj, tcRadarSensorState *apRadarSS); ! void UpdateSeeker(tcGameObject *applat, tcRadarSensorState *apRadarSS); void UpdateSurveillance(tcGameObject *applat, tcSensorState *apSensorState); }; --- 174,186 ---- float GetFractionalDamage(float afDamage, tcGameObject *apGameObj); ! bool IsDetectedESM(tcESMSensorState *apESM, tcRadar *apEmitterRadar, tcGameObject *apEmitterPlatform, float& rfAz_rad); void PerformAutoEngage(tcGameObject* apGameObj, double afTime); void ProcessRadarDetection(tcGameObject *apRadarPlat,tcGameObject *apTarget, ! tcRadar *apRadarSS); void ProcessESMDetection(tcGameObject *apESMPlat,tcGameObject *apTarget, tcESMSensorState *apESMSS); ! void UpdateFireControl(tcGameObject *apGameObj, tcRadar *apRadarSS); ! void UpdateSeeker(tcGameObject *applat, tcRadar *apRadarSS); void UpdateSurveillance(tcGameObject *applat, tcSensorState *apSensorState); }; Index: tcSurfaceObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcSurfaceObject.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tcSurfaceObject.h 8 Dec 2003 03:06:36 -0000 1.4 --- tcSurfaceObject.h 29 Jan 2004 00:05:21 -0000 1.5 *************** *** 24,27 **** --- 24,32 ---- #include "tcPlatformObject.h" + namespace Database + { + class tcGenericDBObject; + } + /** * Represents a platform that resides on the water's surface. |
From: <ddc...@pr...> - 2004-01-31 04:47:00
|
Update of /cvsroot/gcblue/gcb_wx/include/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4640/include/sim Modified Files: tcGameObject.h tcLauncherState.h tcPlatformObject.h tcRadarSensorState.h Log Message: Index: tcGameObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcGameObject.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tcGameObject.h 10 Jan 2004 21:55:31 -0000 1.10 --- tcGameObject.h 30 Jan 2004 01:02:34 -0000 1.11 *************** *** 108,112 **** virtual void DesignateDatum(tcPoint p) {} virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) {} ! virtual void DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) {} virtual void DesignateTarget(long anID) {} virtual void GetDatum(tsGeoPoint& p) {} --- 108,112 ---- virtual void DesignateDatum(tcPoint p) {} virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) {} ! virtual bool DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) {return false;} virtual void DesignateTarget(long anID) {} virtual void GetDatum(tsGeoPoint& p) {} Index: tcLauncherState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcLauncherState.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcLauncherState.h 29 Jan 2004 00:05:17 -0000 1.3 --- tcLauncherState.h 30 Jan 2004 01:02:34 -0000 1.4 *************** *** 37,40 **** --- 37,42 ---- using namespace Database; + class tcGameObject; + class tcSimState; class tcRadar; *************** *** 66,73 **** --- 68,78 ---- { public: + tcGameObject *parent; int mnCount; std::vector<tsLData> launchers; ///< vector of launcher state info static tcDatabase *mpDatabase; + static void AttachSimState(tcSimState* ss) {simState = ss;} + void AddFullLauncher(tcDatabase *pDatabase, tnPoolIndex anKey, float azimuth_rad); int GetLauncherQuantity(unsigned anLauncher); *************** *** 75,82 **** --- 80,96 ---- bool IsDatumLaunch(unsigned anLauncher); bool IsSeekerLaunch(unsigned anLauncher); + bool ReadyToLaunch(unsigned nLauncher); void Serialize(tcFile& file, bool abLoad); + void SetFireControlSensor(unsigned nLauncher, tcRadar* radar); + bool SetLauncherDatum(unsigned nLauncher, double lon_rad, double lat_rad); + bool SetLauncherTarget(unsigned nLauncher, long targetID); + void SetParent(tcGameObject *obj) {parent = obj;} tcLauncherState(); + tcLauncherState(tcGameObject *parentObj); tcLauncherState(tcLauncherState&); ~tcLauncherState(); + + private: + static tcSimState *simState; }; #endif \ No newline at end of file Index: tcPlatformObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcPlatformObject.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcPlatformObject.h 29 Jan 2004 00:05:17 -0000 1.7 --- tcPlatformObject.h 30 Jan 2004 01:02:34 -0000 1.8 *************** *** 57,61 **** virtual void DesignateDatum(tcPoint p); virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher); ! virtual void DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher); virtual void DesignateTarget(long anID) {mcAI.SetTarget(anID);} virtual void GetDatum(tsGeoPoint& p) {p=msTargetDatum;} --- 57,61 ---- virtual void DesignateDatum(tcPoint p); virtual void DesignateLauncherDatum(tcPoint p, unsigned int anLauncher); ! virtual bool DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher); virtual void DesignateTarget(long anID) {mcAI.SetTarget(anID);} virtual void GetDatum(tsGeoPoint& p) {p=msTargetDatum;} *************** *** 90,93 **** --- 90,94 ---- virtual void ApplyRestrictions(void); + virtual void SetFireControlSensors(); virtual void Move(float dt_s); virtual void UpdateClimb(float dt_s) {}; Index: tcRadarSensorState.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcRadarSensorState.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcRadarSensorState.h 29 Jan 2004 00:05:17 -0000 1.3 --- tcRadarSensorState.h 30 Jan 2004 01:02:34 -0000 1.4 *************** *** 42,50 **** class tcGameObject; class tcRadar : public tcSensorState { public: tcRadarDBObject *mpDBObj; ! unsigned int fireControlTracks; virtual bool CanDetectTarget(const tcGameObject* target, float& range_km); --- 42,62 ---- class tcGameObject; + /** + * Class to handle surveillance, fire control, and seeker radars. + * May want to break this up use derived classes for detailed + * functions. + * + */ class tcRadar : public tcSensorState { public: tcRadarDBObject *mpDBObj; ! ! // fire-control vars ! unsigned int fireControlTrackCount; ! ! // semi-active and command mode vars ! long illuminatorID; ///< id of SA illuminating platform ! unsigned illuminatorSensorIdx; ///< sensor index of illum platform virtual bool CanDetectTarget(const tcGameObject* target, float& range_km); *************** *** 56,59 **** --- 68,73 ---- virtual bool ReleaseTrack(); + virtual void SetIlluminator(long illum_id, unsigned sensor_idx); + void Serialize(tcFile& file, bool mbLoad); *************** *** 62,65 **** --- 76,82 ---- tcRadar(); virtual ~tcRadar(); + + protected: + bool isSemiactive; }; |
From: <ddc...@pr...> - 2004-01-31 04:41:33
|
Update of /cvsroot/gcblue/gcb_wx/src/scriptinterface In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/src/scriptinterface Modified Files: tcPlatformInterface.cpp tcScenarioInterface.cpp tcSimPythonInterface.cpp Log Message: Index: tcPlatformInterface.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/scriptinterface/tcPlatformInterface.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** tcPlatformInterface.cpp 8 Jan 2004 23:54:27 -0000 1.13 --- tcPlatformInterface.cpp 29 Jan 2004 00:05:23 -0000 1.14 *************** *** 38,41 **** --- 38,42 ---- #include "commandlist.h" #include "tcAeroAirObject.h" + #include "tcGenericDBObject.h" *************** *** 79,82 **** --- 80,108 ---- } + float tcPlatformInterface::GetMaxAltitude() + { + return mpPlatformObj->mpDBObject->mfMaxAltitude_m; + } + + float tcPlatformInterface::GetSpeed() + { + return mpPlatformObj->mcKin.mfSpeed_kts; + } + + float tcPlatformInterface::GetMaxSpeed() + { + return mpPlatformObj->mpDBObject->mfMaxSpeed_kts; + } + + float tcPlatformInterface::GetHeading() + { + return C_180OVERPI*mpPlatformObj->mcKin.mfHeading_rad; + } + + float tcPlatformInterface::GetHeadingRad() + { + return mpPlatformObj->mcKin.mfHeading_rad; + } + /** * Get landing state (gear up/down). *************** *** 194,197 **** --- 220,224 ---- track.mfSpeed_kts = pTargetKin->mfSpeed_kts; track.mnClassification = pGameObj->mpDBObject->mnType; + track.mnAffiliation = FRIENDLY; return true; } *************** *** 324,328 **** return false; } ! tsLData* pLauncherData = &mpPlatformObj->mcLauncherState.ma[anLauncher]; tcMissileDBObject *pMissileDBObj = dynamic_cast<tcMissileDBObject*>(pLauncherData->mpChildDBObj); --- 351,355 ---- return false; } ! tsLData* pLauncherData = &mpPlatformObj->mcLauncherState.launchers[anLauncher]; tcMissileDBObject *pMissileDBObj = dynamic_cast<tcMissileDBObject*>(pLauncherData->mpChildDBObj); *************** *** 365,369 **** return s; } ! tcDatabaseObject *pChildDBObj = mpPlatformObj->mcLauncherState.ma[anLauncher].mpChildDBObj; if (pChildDBObj == NULL) { s = "Error"; --- 392,396 ---- return s; } ! tcDatabaseObject *pChildDBObj = mpPlatformObj->mcLauncherState.launchers[anLauncher].mpChildDBObj; if (pChildDBObj == NULL) { s = "Error"; *************** *** 627,630 **** --- 654,658 ---- track.mnClassification = obj->mpDBObject->mnType; track.mnID = obj->mnID; + track.mnAffiliation = FRIENDLY; return track; } Index: tcScenarioInterface.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/scriptinterface/tcScenarioInterface.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** tcScenarioInterface.cpp 5 Jan 2004 02:48:03 -0000 1.8 --- tcScenarioInterface.cpp 29 Jan 2004 00:05:24 -0000 1.9 *************** *** 41,44 **** --- 41,45 ---- #include "tcCarrierObject.h" #include "tcAeroAirObject.h" + #include "tcGenericDBObject.h" using namespace std; *************** *** 120,123 **** --- 121,125 ---- .def_readwrite("heading",&tcScenarioUnit::heading) .def_readwrite("speed",&tcScenarioUnit::speed) + .def_readwrite("throttle",&tcScenarioUnit::throttle) .def("AddOrder",&tcScenarioUnit::AddOrder) .def("ClearOrders",&tcScenarioUnit::ClearOrders) *************** *** 194,200 **** gameObj->mcKin.mfPitch_rad = 0; gameObj->mcKin.mfRoll_rad = 0; - gameObj->mcKin.mfSpeed_kts = 0; if (unit.speed < 0) {unit.speed = 0;} ! else if (unit.speed > 1.0) {unit.speed = 1.0;} gameObj->mfDamageLevel = 0; gameObj->mnAlliance = alliance; --- 196,201 ---- gameObj->mcKin.mfPitch_rad = 0; gameObj->mcKin.mfRoll_rad = 0; if (unit.speed < 0) {unit.speed = 0;} ! gameObj->mcKin.mfSpeed_kts = unit.speed; gameObj->mfDamageLevel = 0; gameObj->mnAlliance = alliance; *************** *** 204,209 **** if (tcPlatformObject *platObj = dynamic_cast<tcPlatformObject*>(gameObj)) { ! float max_speed_kts = platObj->mpDBObject->mfMaxSpeed_kts; ! platObj->mcKin.mfSpeed_kts = unit.speed*max_speed_kts; platObj->SetSpeed(platObj->mcKin.mfSpeed_kts); int nOrders = (int)unit.orders.size(); --- 205,213 ---- if (tcPlatformObject *platObj = dynamic_cast<tcPlatformObject*>(gameObj)) { ! // limit speed to max ! if (platObj->mcKin.mfSpeed_kts > platObj->mpDBObject->mfMaxSpeed_kts) ! { ! platObj->mcKin.mfSpeed_kts = platObj->mpDBObject->mfMaxSpeed_kts; ! } platObj->SetSpeed(platObj->mcKin.mfSpeed_kts); int nOrders = (int)unit.orders.size(); *************** *** 213,221 **** } } ! // limit initial speed of aero objects for now, need something to calculate ! // steady state speed based on throttle and altitude. if (tcAeroAirObject *aeroAirObj = dynamic_cast<tcAeroAirObject*>(gameObj)) { ! if (aeroAirObj->mcKin.mfSpeed_kts > 690.0f) aeroAirObj->mcKin.mfSpeed_kts = 690.0f; } if (tcAirObject *airObj = dynamic_cast<tcAirObject*>(gameObj)) --- 217,224 ---- } } ! // need something to calculate steady state speed based on throttle and altitude. if (tcAeroAirObject *aeroAirObj = dynamic_cast<tcAeroAirObject*>(gameObj)) { ! aeroAirObj->SetThrottleFraction((unit.throttle >= 0) ? unit.throttle : 0); } if (tcAirObject *airObj = dynamic_cast<tcAirObject*>(gameObj)) *************** *** 287,290 **** --- 290,294 ---- unit.heading = 12; unit.speed = 0.5; + unit.throttle = 0.8; return unit; } Index: tcSimPythonInterface.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/scriptinterface/tcSimPythonInterface.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tcSimPythonInterface.cpp 29 Dec 2003 01:10:25 -0000 1.10 --- tcSimPythonInterface.cpp 29 Jan 2004 00:05:26 -0000 1.11 *************** *** 350,354 **** /** ! * Calls the ProcessHotkey script in Menu.py with an argument based * on whether or not a unit is hooked and, if so, the type of unit * hooked (own-alliance or sensor track). Initially this will only --- 350,354 ---- /** ! * Calls the ProcessHotKey script in Menu.py with an argument based * on whether or not a unit is hooked and, if so, the type of unit * hooked (own-alliance or sensor track). Initially this will only *************** *** 367,370 **** --- 367,387 ---- } + /** + * Calls the ProcessSecondaryHook script in Menu.py with an argument based + * on whether or not a unit is hooked and, if so, the type of unit + * hooked (own-alliance or sensor track). Initially this will only + * support friendly / own-alliance hooks. Intended to be used for a quick + * mouse targeting feature. + */ + void tcSimPythonInterface::ProcessSecondaryHook(long id) + { + char zBuff[128]; + if (mpHookedObj == NULL) return; + if (!mpSimState->mpUserInfo->IsOwnAlliance(mpHookedObj->mnAlliance)) return; + + sprintf(zBuff,"Menu.ProcessSecondaryHook(HookedUnitInfo,%d)\n",id); + CallPython(zBuff,"Exception occured in ProcessSecondaryHook\n"); + } + /* writes error message in text out to console, if console is attached */ void tcSimPythonInterface::ReportError(const char* text) |
From: <ddc...@pr...> - 2004-01-31 04:25:29
|
Update of /cvsroot/gcblue/gcb_wx/include/database In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4640/include/database Modified Files: tcDatabaseObject.h tcLauncherDBObject.h tcMissileDBObject.h tcRadarDBObject.h Log Message: Index: tcDatabaseObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcDatabaseObject.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcDatabaseObject.h 10 Jan 2004 21:55:31 -0000 1.6 --- tcDatabaseObject.h 30 Jan 2004 01:02:34 -0000 1.7 *************** *** 42,45 **** --- 42,46 ---- namespace Database { + class tcDatabase; class CsvTranslator; *************** *** 124,127 **** --- 125,129 ---- char mzDescription[DESCRIPTION_STRING_LENGTH]; + static void AttachDatabase(tcDatabase *db) {database = db;} tc3DModel* Get3DModel(); void Load3DModel(); *************** *** 135,138 **** --- 137,141 ---- virtual ~tcDatabaseObject(); protected: + static tcDatabase *database; ///< allows db objects to query for other db objects tc3DModel *model; Index: tcLauncherDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcLauncherDBObject.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcLauncherDBObject.h 7 Dec 2003 01:53:36 -0000 1.2 --- tcLauncherDBObject.h 30 Jan 2004 01:02:34 -0000 1.3 *************** *** 39,42 **** --- 39,44 ---- UINT maCapacity[MAX_LAUNCHER_CONFIGURATIONS]; ///< array for mult configs UINT mnConfigurations; + std::string fireControlSensorClass; ///< class of sensor on platform for fire control + ///< (track required to launch) virtual void PrintToFile(tcFile& file); Index: tcMissileDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcMissileDBObject.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcMissileDBObject.h 29 Jan 2004 00:05:03 -0000 1.3 --- tcMissileDBObject.h 30 Jan 2004 01:02:34 -0000 1.4 *************** *** 102,105 **** --- 102,106 ---- // sensor info tcDBString maSensorClass[2]; ///< primary and secondary + tnPoolIndex primarySeekerKey; ///< key for fast access of primary seeker /// flight profile, array of flight segment info unsigned mnNumSegments; *************** *** 107,110 **** --- 108,112 ---- teWeaponLaunchMode GetLaunchMode(void); + tnPoolIndex GetPrimarySeekerKey(); virtual void PrintToFile(tcFile& file); int Serialize(tcFile& file, bool mbLoad, UINT32 anVersion); Index: tcRadarDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcRadarDBObject.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcRadarDBObject.h 29 Jan 2004 00:05:03 -0000 1.3 --- tcRadarDBObject.h 30 Jan 2004 01:02:34 -0000 1.4 *************** *** 37,40 **** --- 37,41 ---- float mfMinRangeRate_mps; ///< minimum detectable range rate unsigned int maxFireControlTracks; ///< max number of simultaneous fire control tracks + bool isSemiactive; ///< set true if this is a semiactive radar bool mbDetectsSurface; ///< set true if detects surface targets bool mbDetectsAir; ///< set true if detects airborne targets |
From: <ddc...@pr...> - 2004-01-31 04:23:38
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4640/src/sim Modified Files: tcLauncherState.cpp tcPlatformObject.cpp tcRadarSensorState.cpp tcSimState.cpp Log Message: Index: tcLauncherState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcLauncherState.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcLauncherState.cpp 29 Jan 2004 00:05:40 -0000 1.3 --- tcLauncherState.cpp 30 Jan 2004 01:02:35 -0000 1.4 *************** *** 24,30 **** #include "tcMissileDBObject.h" #include "tcRadarSensorState.h" ! tcDatabase* tcLauncherState::mpDatabase; ! /** * --- 24,32 ---- #include "tcMissileDBObject.h" #include "tcRadarSensorState.h" + #include "tcSimState.h" + #include <iostream> ! tcDatabase* tcLauncherState::mpDatabase = NULL; ! tcSimState* tcLauncherState::simState = NULL; /** * *************** *** 74,78 **** new_launcher.msDatum.mfLon_rad=0; new_launcher.msDatum.mfLat_rad=0; ! new_launcher.mnTargetID=NULL_INDEX; new_launcher.meLaunchMode = AUTO; new_launcher.mnPending = 0; --- 76,80 ---- new_launcher.msDatum.mfLon_rad=0; new_launcher.msDatum.mfLat_rad=0; ! new_launcher.mnTargetID = NULL_INDEX; new_launcher.meLaunchMode = AUTO; new_launcher.mnPending = 0; *************** *** 112,115 **** --- 114,212 ---- } + void tcLauncherState::SetFireControlSensor(unsigned nLauncher, tcRadar* radar) + { + if (nLauncher > launchers.size()) {return;} + launchers[nLauncher].fireControlSensor = radar; + } + + /** + * @return true if success + */ + bool tcLauncherState::SetLauncherDatum(unsigned nLauncher, double lon_rad, double lat_rad) + { + if (nLauncher > launchers.size()) + { + std::cerr << "Bad launcher index" << std::endl; + return false; + } + launchers[nLauncher].msDatum.Set(lon_rad, lat_rad); + return true; + } + + /** + * @return true if success + */ + bool tcLauncherState::SetLauncherTarget(unsigned nLauncher, long targetID) + { + + if (nLauncher > launchers.size()) + { + std::cerr << "Bad launcher index" << std::endl; + return false; + } + launchers[nLauncher].mnTargetID = targetID; + return true; + } + + /** + * @return true if launcher is ready to launch. Launch readiness + * conditions depend on meLaunchMode for the launcher + * @see teWeaponLaunchMode + */ + bool tcLauncherState::ReadyToLaunch(unsigned nLauncher) + { + using namespace Database; + if (nLauncher > launchers.size()) + { + std::cerr << "Bad launcher index" << std::endl; + return false; + } + tsLData& ldata = launchers[nLauncher]; + + if (ldata.mnCurrent <= 0) {return false;} // launcher empty + if (ldata.mfTimeToReady > 0) {return false;} // launcher not ready + + switch (ldata.meLaunchMode) + { + case DATUM_ONLY: // needs a datum programmed to launch + { + return (ldata.msDatum.mfLat_rad != 0) || (ldata.msDatum.mfLon_rad != 0); + } + case SA_TRACK: // needs a track (launching platform) to launch, semi-active or command guidance + case SEEKER_TRACK: // needs a track to launch, seeker sensor checked before associating + { + wxASSERT(simState); + + if (ldata.mnTargetID == NULL_INDEX) return false; // needs a target + tcMissileDBObject *pMissileDBObj = dynamic_cast<tcMissileDBObject*>(ldata.mpChildDBObj); + if (pMissileDBObj==NULL) + { + std::cerr << "ReadyToLaunch -- Error: SA_TRACK guidance with non-missile" << std::endl; + return false; + } + + tnPoolIndex nSensorKey = pMissileDBObj->GetPrimarySeekerKey(); + tcGameObject *targetObj = simState->GetObject(ldata.mnTargetID); + + float seekerAz = parent->mcKin.mfHeading_rad + ldata.pointingAngle; + tsGeoPoint seekerLoc; + seekerLoc.Set((float)parent->mcKin.mfLon_rad,(float)parent->mcKin.mfLat_rad); + bool canDetect = simState->RadarCanDetect(nSensorKey,targetObj,seekerLoc,seekerAz); + return canDetect; + } + + case AUTO: // will launch and either proceed unguided or autonomously search out target + { + bool hasDatum = (ldata.msDatum.mfLat_rad != 0) || (ldata.msDatum.mfLon_rad != 0); + bool hasTarget = (ldata.mnTargetID == NULL_INDEX); + return hasDatum || hasTarget; + } + default: + std::cerr << "Bad meLaunchMode" << std::endl; + return false; + } + return false; + } + /** * *************** *** 170,173 **** --- 267,271 ---- } + /** * *************** *** 177,180 **** --- 275,286 ---- mnCount = 0; launchers.clear(); + parent = NULL; + } + + tcLauncherState::tcLauncherState(tcGameObject *parentObj) + : parent(parentObj) + { + mnCount = 0; + launchers.clear(); } *************** *** 189,192 **** --- 295,299 ---- } mnCount = (int)launchers.size(); + parent = NULL; } Index: tcPlatformObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcPlatformObject.cpp,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tcPlatformObject.cpp 29 Jan 2004 00:05:45 -0000 1.11 --- tcPlatformObject.cpp 30 Jan 2004 01:02:35 -0000 1.12 *************** *** 48,59 **** void tcPlatformObject::DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) { ! if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.launchers[anLauncher].msDatum.Set(p.x, p.y); } ! void tcPlatformObject::DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) { ! if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.launchers[anLauncher].mnTargetID = anID; } --- 48,61 ---- void tcPlatformObject::DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) { ! mcLauncherState.SetLauncherDatum(anLauncher, p.x, p.y); } ! /** ! * @return false if target cannot be designated, out of seeker coverage or no fire ! * @return false control support available. ! */ ! bool tcPlatformObject::DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) { ! return mcLauncherState.SetLauncherTarget(anLauncher, anID); } *************** *** 421,424 **** --- 423,461 ---- } + + /** + * Set fire control sensors for launchers. If launcher + * has a non-null fire control sensor, then find and set + * it. + */ + void tcPlatformObject::SetFireControlSensors() + { + // + for(int nLauncher=0;nLauncher<mpDBObject->mnNumLaunchers;nLauncher++) + { + std::string fcSensor = + mcLauncherState.launchers[nLauncher].mpLauncherDBObj->fireControlSensorClass; + // search for sensor and add if match + bool bSearching = fcSensor.length() > 1; + for(size_t n=0; (n<mapSensorState.size()) && bSearching; n++) + { + tcRadar* radar = dynamic_cast<tcRadar*>(mapSensorState[n]); + if (radar) + { + if (fcSensor == radar->mpDBObj->mzClass.mz) + { + mcLauncherState.SetFireControlSensor(nLauncher, radar); + bSearching = false; + } + } + } + if (bSearching) + { + fprintf(stderr, "%s: Failed to find fc sensor, %s, for launcher %d\n", + mpDBObject->mzClass.mz, fcSensor.c_str(), nLauncher); + } + } + } + tcPlatformObject::tcPlatformObject(tcGenericDBObject *obj) : tcGameObject(obj) *************** *** 436,449 **** fuel_kg = mpDBObject->mfFuelCapacity_kg; // start with max fuel - // add launchers - mcLauncherState.mnCount = 0; - - for(int nLauncher=0;nLauncher<mpDBObject->mnNumLaunchers;nLauncher++) - { - tnPoolIndex nLauncherKey = database->GetKey(mpDBObject->maLauncherClass[nLauncher]); - float launcherAz_deg = mpDBObject->launcherAz[nLauncher]; - mcLauncherState.AddFullLauncher(database, nLauncherKey, C_PIOVER180*launcherAz_deg); - } - // add sensors if (mpDBObject->mnNumSensors > tcGenericDBObject::MAXSENSORS) --- 473,476 ---- *************** *** 483,486 **** --- 510,527 ---- } } + // add launchers + mcLauncherState.SetParent(this); + mcLauncherState.mnCount = 0; + + for(int nLauncher=0;nLauncher<mpDBObject->mnNumLaunchers;nLauncher++) + { + tnPoolIndex nLauncherKey = database->GetKey(mpDBObject->maLauncherClass[nLauncher]); + float launcherAz_deg = mpDBObject->launcherAz[nLauncher]; + mcLauncherState.AddFullLauncher(database, nLauncherKey, C_PIOVER180*launcherAz_deg); + } + + SetFireControlSensors(); + + model->SetupAnimation(this); *************** *** 494,497 **** --- 535,539 ---- mcGS = o.mcGS; mcLauncherState = o.mcLauncherState; + mcLauncherState.SetParent(this); mcLaunchRequest = o.mcLaunchRequest; mpDBObject = o.mpDBObject; Index: tcRadarSensorState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcRadarSensorState.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcRadarSensorState.cpp 29 Jan 2004 00:05:45 -0000 1.3 --- tcRadarSensorState.cpp 30 Jan 2004 01:02:50 -0000 1.4 *************** *** 45,48 **** --- 45,49 ---- mnMode = mpDBObj->mbDetectsAir ? SSMODE_FCSURVEILLANCE : SSMODE_SURVEILLANCE; mfSensorHeight_m = 10.0f; + isSemiactive = mpDBObj->isSemiactive; return true; } *************** *** 133,136 **** --- 134,148 ---- /** + * Sets illuminator info for semi-active radars. + */ + void tcRadar::SetIlluminator(long illum_id, unsigned sensor_idx) + { + wxASSERT(isSemiactive); + + illuminatorID = illum_id; + illuminatorSensorIdx = sensor_idx; + } + + /** * */ *************** *** 185,188 **** --- 197,205 ---- mpDBObj = NULL; mnDBKey = NULL_INDEX; + + fireControlTrackCount = 0; + illuminatorID = -1; + illuminatorSensorIdx = 0; + isSemiactive = false; } Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** tcSimState.cpp 29 Jan 2004 00:05:45 -0000 1.25 --- tcSimState.cpp 30 Jan 2004 01:02:50 -0000 1.26 *************** *** 166,170 **** } /********************************************************************/ ! bool tcSimState::DesignateLauncherTarget(tnPoolIndex anKey, tnPoolIndex anTargetKey, unsigned anLauncher) { int bFound; tcGameObject *po; --- 166,171 ---- } /********************************************************************/ ! bool tcSimState::DesignateLauncherTarget(tnPoolIndex anKey, tnPoolIndex anTargetKey, unsigned anLauncher) ! { int bFound; tcGameObject *po; *************** *** 180,183 **** --- 181,198 ---- tcLauncherState *pLauncherState; po->GetLauncherState(pLauncherState); + if (pLauncherState->ReadyToLaunch(anLauncher)) + { + pPlatformObj->DesignateLauncherTarget(anTargetKey, anLauncher); + if (mpUserInfo->IsOwnAlliance(pPlatformObj->mnAlliance)) { + mpSound->PlayEffect(SEFFECT_NOISYBEEP); + } + return true; + } + else + { + return false; + } + /* + if (pLauncherState==NULL) {return false;} if (anLauncher>=(unsigned)pLauncherState->mnCount) {return false;} // invalid anLauncher *************** *** 215,218 **** --- 230,234 ---- return false; // don't designate for other launch modes for now } + */ } *************** *** 1723,1726 **** --- 1739,1743 ---- goalTracker = new tcGoalTracker(); tcGoal::AttachSimState(this); + tcLauncherState::AttachSimState(this); mcSensorMap.CreateMapForAlliance(1); |
From: <ddc...@pr...> - 2004-01-31 03:50:29
|
Update of /cvsroot/gcblue/gcb_wx/src/database In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/src/database Modified Files: tcAirDBObject.cpp tcRadarDBObject.cpp Log Message: Index: tcAirDBObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcAirDBObject.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tcAirDBObject.cpp 4 Jan 2004 22:24:52 -0000 1.5 --- tcAirDBObject.cpp 29 Jan 2004 00:05:22 -0000 1.6 *************** *** 38,41 **** --- 38,42 ---- if (mbLoad) { + *csv >> mfAltThrustDecay_pm; *csv >> mfAfterburnFuelRate_kgps; *csv >> mfAfterburnThrust_N; *************** *** 54,57 **** --- 55,59 ---- else { + *csv << mfAltThrustDecay_pm; *csv << mfAfterburnFuelRate_kgps; *csv << mfAfterburnThrust_N; *************** *** 79,82 **** --- 81,85 ---- csv->SetWriteLineBlock(false); + *csv << "Thrust altitude decay factor [1/m]"; *csv << "AfterburnFuelRate_kgps"; *csv << "AfterburnThrust_N"; *************** *** 109,112 **** --- 112,116 ---- { mnClassID = DTYPE_AIR; + mfAltThrustDecay_pm = obj.mfAltThrustDecay_pm; mfAfterburnFuelRate_kgps = obj.mfAfterburnFuelRate_kgps; mfAfterburnThrust_N = obj.mfAfterburnThrust_N; Index: tcRadarDBObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcRadarDBObject.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcRadarDBObject.cpp 4 Jan 2004 22:24:52 -0000 1.3 --- tcRadarDBObject.cpp 29 Jan 2004 00:05:23 -0000 1.4 *************** *** 112,115 **** --- 112,116 ---- *csv >> mfERP_dBW; *csv >> mfMinRangeRate_mps; + *csv >> maxFireControlTracks; *csv >> val; mbDetectsSurface = val != 0; *csv >> val; mbDetectsAir = val != 0; *************** *** 120,123 **** --- 121,125 ---- *csv << mfERP_dBW; *csv << mfMinRangeRate_mps; + *csv << (long)maxFireControlTracks; *csv << (long)mbDetectsSurface; *csv << (long)mbDetectsAir; *************** *** 134,137 **** --- 136,140 ---- *csv << "ERP_dBW"; *csv << "MinRangeRate_mps"; + *csv << "MaxFireControlTracks"; *csv << "DetectsSurface"; *csv << "DetectsAir"; |
From: <ddc...@pr...> - 2004-01-31 02:45:58
|
Update of /cvsroot/gcblue/gcb_wx/include/scriptinterface In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/include/scriptinterface Modified Files: tcPlatformInterface.h tcScenarioInterface.h tcSimPythonInterface.h Log Message: Index: tcPlatformInterface.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/scriptinterface/tcPlatformInterface.h,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** tcPlatformInterface.h 8 Jan 2004 23:54:27 -0000 1.11 --- tcPlatformInterface.h 29 Jan 2004 00:05:03 -0000 1.12 *************** *** 89,97 **** float GetAltitude() {return mpPlatformObj->mcKin.mfAlt_m;} float GetFuel() const; ! float GetMaxAltitude() {return mpPlatformObj->mpDBObject->mfMaxAltitude_m;} ! float GetSpeed() {return mpPlatformObj->mcKin.mfSpeed_kts;} ! float GetMaxSpeed() {return mpPlatformObj->mpDBObject->mfMaxSpeed_kts;} ! float GetHeading() {return C_180OVERPI*mpPlatformObj->mcKin.mfHeading_rad;} ! float GetHeadingRad() {return mpPlatformObj->mcKin.mfHeading_rad;} float GetTerrainElevation(); bool HasThrottle(); --- 89,97 ---- float GetAltitude() {return mpPlatformObj->mcKin.mfAlt_m;} float GetFuel() const; ! float GetMaxAltitude(); ! float GetSpeed(); ! float GetMaxSpeed(); ! float GetHeading(); ! float GetHeadingRad(); float GetTerrainElevation(); bool HasThrottle(); Index: tcScenarioInterface.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/scriptinterface/tcScenarioInterface.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcScenarioInterface.h 5 Jan 2004 02:48:02 -0000 1.7 --- tcScenarioInterface.h 29 Jan 2004 00:05:05 -0000 1.8 *************** *** 63,67 **** double alt; ///< alt in meters double heading; ///< heading in deg ! double speed; ///< fractional speed or throttle setting, 0 to 1 void AddOrder(tcOrder order); --- 63,68 ---- double alt; ///< alt in meters double heading; ///< heading in deg ! double speed; ///< speed in knots ! double throttle; ///< throttle setting, 0 to 1, or > 1 for afterburner void AddOrder(tcOrder order); Index: tcSimPythonInterface.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/scriptinterface/tcSimPythonInterface.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** tcSimPythonInterface.h 29 Dec 2003 01:10:25 -0000 1.8 --- tcSimPythonInterface.h 29 Jan 2004 00:05:05 -0000 1.9 *************** *** 89,92 **** --- 89,93 ---- void ProcessCallback(std::string command, long anData, int param); void ProcessHotKey(unsigned int key, unsigned int flags); + void ProcessSecondaryHook(long id); void ReportError(const char* text); void SelectFlightInterface(void) {meMenuMode = FLIGHT_MENU;} |
From: <ddc...@pr...> - 2004-01-31 02:32:46
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/src/sim Modified Files: Game.cpp tcAeroAirObject.cpp tcAirObject.cpp tcCreditView.cpp tcFlightPort.cpp tcLauncherState.cpp tcMapView.cpp tcMissileObject.cpp tcObjectControl.cpp tcPlatformObject.cpp tcRadarSensorState.cpp tcSimState.cpp tcSurfaceObject.cpp Log Message: Index: Game.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/Game.cpp,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** Game.cpp 20 Jan 2004 03:02:53 -0000 1.55 --- Game.cpp 29 Jan 2004 00:05:26 -0000 1.56 *************** *** 74,77 **** --- 74,78 ---- EVT_COMMAND(ID_STARTGAME, wxEVT_COMMAND_BUTTON_CLICKED , tcGame::StartGame) EVT_COMMAND(ID_NEWHOOK, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::NewHook) + EVT_COMMAND(ID_SECONDARYHOOK, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SecondaryHook) EVT_COMMAND(ID_SETBRIEFING, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SetBriefingMode) EVT_COMMAND(ID_SETPAUSE, wxEVT_COMMAND_BUTTON_CLICKED, tcGame::SetPauseMode) *************** *** 240,243 **** --- 241,245 ---- { meScreenMode = CREDIT; + mcSound.PlayMusic("tension1"); } *************** *** 256,259 **** --- 258,262 ---- if (meGameMode == GM_START) { + if (meScreenMode == CREDIT) mcSound.PlayMusic("loop1"); meScreenMode = START; } *************** *** 1434,1437 **** --- 1437,1443 ---- tacticalMap->mbBypassPythonCallback = (mm == MENUMODE_PLATFORMEDIT); wxPoint point = event.GetPosition(); + // workaround to keep popup submenus on screen + if (point.x > mnWidth - 250) point.x = mnWidth - 250; + if (point.y > mnHeight - 200) point.y = mnHeight - 200; popupControl->Track(point); } *************** *** 1707,1710 **** --- 1713,1737 ---- } + + /** + * Used for quick mouse-targeting of another platform. + * Map posts this event when right mouse button is + * clicked over another platform. + * Python script is used to do the targeting to allow + * this to be customized. + */ + void tcGame::SecondaryHook(wxCommandEvent& event) + { + long hookID = tacticalMap->GetHookID(); + long nSecondaryHookID = event.m_extraLong; + + if ((hookID == NULL_INDEX) || (hookID == nSecondaryHookID)) + { + return; + } + pythonInterface->ProcessSecondaryHook(nSecondaryHookID); + + } + /* ** deferred methods * **/ #if 0 Index: tcAeroAirObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcAeroAirObject.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcAeroAirObject.cpp 5 Jan 2004 02:48:03 -0000 1.3 --- tcAeroAirObject.cpp 29 Jan 2004 00:05:38 -0000 1.4 *************** *** 182,187 **** if (throttleFraction <= 1.0f) { ! fThrust_N = mpDBObject->mfMaxThrust_N*throttleFraction; ! fuel_kg -= throttleFraction * mpDBObject->mfFuelRate_kgps * dt_s * damagePenalty; } else --- 182,190 ---- if (throttleFraction <= 1.0f) { ! // apply engine thrust and fuel consumption decrease with altitude ! float adjustedThrottle = throttleFraction * ! expf(- mcKin.mfAlt_m * mpDBObject->mfAltThrustDecay_pm); ! fThrust_N = mpDBObject->mfMaxThrust_N * adjustedThrottle; ! fuel_kg -= adjustedThrottle * mpDBObject->mfFuelRate_kgps * dt_s * damagePenalty; } else *************** *** 237,255 **** float lift_N = weight_N * cosf(k.mfClimbAngle_rad); float Cl = lift_N / (rhv2 * mpDBObject->mfWingArea_sm); ! angleOfAttack = Cl*liftCoeffToAoa; - float inducedDrag_N = mpDBObject->mfKdi * Cl * lift_N; ! if (Cl > 0.9f*mpDBObject->mfMaxCl) { throttleFraction = 1.0f; ! SetAltitude(k.mfAlt_m - 100.0f*(Cl-0.9f*mpDBObject->mfMaxCl)); // max throttle and dive to avoid impending stall ! } ! else if (Cl > mpDBObject->mfMaxCl) { throttleFraction = 1.0f; ! SetAltitude(k.mfAlt_m - 200.0f); // max throttle and dive to get out of stall } float netForce_N = fThrust_N - fDrag_N - inducedDrag_N - weight_N *sinf(k.mfClimbAngle_rad); --- 240,266 ---- float lift_N = weight_N * cosf(k.mfClimbAngle_rad); float Cl = lift_N / (rhv2 * mpDBObject->mfWingArea_sm); ! float inducedDrag_N; ! if (Cl > mpDBObject->mfMaxCl) { throttleFraction = 1.0f; ! SetAltitude(k.mfAlt_m - 50.0f*mpDBObject->mfMaxCl); // max throttle and dive to get out of stall ! Cl = mpDBObject->mfMaxCl; ! inducedDrag_N = 0; // stall, no induced drag ! } ! else if (Cl > 0.9f*mpDBObject->mfMaxCl) { throttleFraction = 1.0f; ! SetAltitude(k.mfAlt_m - 500.0f*(Cl-0.9f*mpDBObject->mfMaxCl)); // max throttle and dive to avoid impending stall ! inducedDrag_N = mpDBObject->mfKdi * Cl * Cl * lift_N; ! } ! else ! { ! inducedDrag_N = mpDBObject->mfKdi * Cl * Cl * lift_N; } + angleOfAttack = Cl*liftCoeffToAoa; + float netForce_N = fThrust_N - fDrag_N - inducedDrag_N - weight_N *sinf(k.mfClimbAngle_rad); Index: tcAirObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcAirObject.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tcAirObject.cpp 8 Dec 2003 03:06:36 -0000 1.5 --- tcAirObject.cpp 29 Jan 2004 00:05:38 -0000 1.6 *************** *** 24,28 **** #endif ! #include "tcairobject.h" /******************************************************************************/ --- 24,29 ---- #endif ! #include "tcAirObject.h" ! #include "tcGenericDBObject.h" /******************************************************************************/ *************** *** 179,183 **** dh = heading_end - heading_start; ! if (dh == 0) { // skip rest of function if no heading change mcKin.mfRoll_rad = 0; return; --- 180,185 ---- dh = heading_end - heading_start; ! if ((dh <= 0.00004)&&(dh >= -0.00004)) // skip rest of function if negligible heading change ! { mcKin.mfRoll_rad = 0; return; *************** *** 190,193 **** --- 192,196 ---- // if heading rate exceeds max due to roll rate limit then restrict heading rate float droll_max = 80.0f*C_PIOVER180*dt_s; + float roll_max = roll_start + droll_max; float roll_min = roll_start - droll_max; Index: tcCreditView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcCreditView.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tcCreditView.cpp 14 Jan 2004 01:13:22 -0000 1.7 --- tcCreditView.cpp 29 Jan 2004 00:05:38 -0000 1.8 *************** *** 36,44 **** using namespace Gdiplus; ! void tcCreditView::AddCredit(tcString& s, float afTrailSpace, bool abBold) { if (mnCredits >= MAX_CREDITS) {return;} maCredit[mnCredits].mfTrailSpace = afTrailSpace; ! maCredit[mnCredits].mbBold = abBold; maCredit[mnCredits++].mzCaption = s; } --- 36,44 ---- using namespace Gdiplus; ! void tcCreditView::AddCredit(tcString& s, float afTrailSpace, int effect) { if (mnCredits >= MAX_CREDITS) {return;} maCredit[mnCredits].mfTrailSpace = afTrailSpace; ! maCredit[mnCredits].mnEffect = effect; maCredit[mnCredits++].mzCaption = s; } *************** *** 49,148 **** s = "------- C R E D I T S -------"; ! AddCredit(s, 40.0f, true); s = "Dewitt \"Cole\" Colclough"; ! AddCredit(s, 25.0f, true); s = "Project manager and lead developer\n"; ! AddCredit(s, 80.0f, false); s = "Marcelo C\341ceres (op4_delta)"; ! AddCredit(s, 25.0f, true); s = "3D art"; ! AddCredit(s, 60.0f, false); s = "Marco Belli"; ! AddCredit(s, 25.0f, true); s = "Developer - Sound, Linux port"; ! AddCredit(s, 60.0f, false); s = "Jason Morris"; ! AddCredit(s, 25.0f, true); s = "Developer"; ! AddCredit(s, 60.0f, false); - s = "Testers\n...\n"; - AddCredit(s, 60.0f, false); s = "Some 2D art courtesy of U.S. Navy, www.news.navy.mil/view_galleries.asp \n"; ! AddCredit(s, 60.0f, false); s = "3D sky code\n"; ! AddCredit(s, 25.0f, false); s = "Combat Simulator Project, csp.sourceforge.net \n"; ! AddCredit(s, 60.0f, true); s = "Map data based on GTOPO30 archive distributed by the \nLand Processes Distributed Active Archive Center (LP DAAC)\nlpdaac.usgs.gov \n"; ! AddCredit(s, 100.0f, false); s = "Thanks to the developers of these software libraries:\n"; ! AddCredit(s, 30.0f, false); s = "wxWindows\n"; ! AddCredit(s, 20.0f, false); s = "www.wxwindows.org\n"; ! AddCredit(s, 30.0f, false); s = "Python 2.3\n"; ! AddCredit(s, 20.0f, false); s = "www.python.org\n"; ! AddCredit(s, 30.0f, false); s = "Boost Python\n"; ! AddCredit(s, 20.0f, false); s = "www.boost.org\n"; ! AddCredit(s, 30.0f, false); s = "OpenSceneGraph\n"; ! AddCredit(s, 20.0f, false); s = "openscenegraph.sourceforge.net\n"; ! AddCredit(s, 60.0f, false); s = "Special thanks to:"; ! AddCredit(s, 30.0f, false); s = "Harpoon HQ, www.harpoonhq.com\n"; ! AddCredit(s, 30.0f, false); s = "Mille-Sabords, www.mille-sabords.com\n"; ! AddCredit(s, 30.0f, false); s = "Seawolves Surface Division, www.seawolves.org/fc\n"; ! AddCredit(s, 30.0f, false); s = "and\n"; ! AddCredit(s, 30.0f, false); s = "To those who offered advice through e-mail and \nthe global_conflict discussion group"; ! AddCredit(s, 50.0f, false); s = "GLOBAL CONFLICT BLUE"; ! AddCredit(s, 20.0f, false); s = "An open source project"; ! AddCredit(s, 20.0f, false); ! s = "www.gcblue.sourceforge.net"; ! AddCredit(s, 20.0f, false); s = "Copyright (C) 2002-2004, All rights reserved.\n"; ! AddCredit(s, 60.0f, false); --- 49,160 ---- s = "------- C R E D I T S -------"; ! AddCredit(s, 40.0f, 1); s = "Dewitt \"Cole\" Colclough"; ! AddCredit(s, 25.0f, 1); s = "Project manager and lead developer\n"; ! AddCredit(s, 80.0f, 0); s = "Marcelo C\341ceres (op4_delta)"; ! AddCredit(s, 25.0f, 1); s = "3D art"; ! AddCredit(s, 60.0f, 0); s = "Marco Belli"; ! AddCredit(s, 25.0f, 1); s = "Developer - Sound, Linux port"; ! AddCredit(s, 60.0f, 0); s = "Jason Morris"; ! AddCredit(s, 25.0f, 1); s = "Developer"; ! AddCredit(s, 60.0f, 0); ! ! s = "Test\n"; ! AddCredit(s, 23.0f, 1); ! ! AddCredit(tcString("Marco Belli"), 12.0f, 2); ! AddCredit(tcString("Marcelo C\341ceres"), 12.0f, 2); ! AddCredit(tcString("Rob Carpenter"), 12.0f, 2); ! AddCredit(tcString("Paul Daly"), 12.0f, 2); ! AddCredit(tcString("Dust"), 12.0f, 2); ! AddCredit(tcString("Jason Morris"), 12.0f, 2); ! AddCredit(tcString("Andrew Platfoot"), 12.0f, 2); ! AddCredit(tcString("Justin Priestman"), 12.0f, 2); ! AddCredit(tcString("Gregg Smith"), 38.0f+12.0f, 2); ! s = "Some 2D art courtesy of U.S. Navy, www.news.navy.mil/view_galleries.asp \n"; ! AddCredit(s, 60.0f, 0); s = "3D sky code\n"; ! AddCredit(s, 25.0f, 0); s = "Combat Simulator Project, csp.sourceforge.net \n"; ! AddCredit(s, 60.0f, 1); s = "Map data based on GTOPO30 archive distributed by the \nLand Processes Distributed Active Archive Center (LP DAAC)\nlpdaac.usgs.gov \n"; ! AddCredit(s, 100.0f, 0); s = "Thanks to the developers of these software libraries:\n"; ! AddCredit(s, 30.0f, 0); s = "wxWindows\n"; ! AddCredit(s, 20.0f, 0); s = "www.wxwindows.org\n"; ! AddCredit(s, 30.0f, 0); s = "Python 2.3\n"; ! AddCredit(s, 20.0f, 0); s = "www.python.org\n"; ! AddCredit(s, 30.0f, 0); s = "Boost Python\n"; ! AddCredit(s, 20.0f, 0); s = "www.boost.org\n"; ! AddCredit(s, 30.0f, 0); s = "OpenSceneGraph\n"; ! AddCredit(s, 20.0f, 0); s = "openscenegraph.sourceforge.net\n"; ! AddCredit(s, 60.0f, 0); s = "Special thanks to:"; ! AddCredit(s, 30.0f, 0); s = "Harpoon HQ, www.harpoonhq.com\n"; ! AddCredit(s, 30.0f, 0); s = "Mille-Sabords, www.mille-sabords.com\n"; ! AddCredit(s, 30.0f, 0); s = "Seawolves Surface Division, www.seawolves.org/fc\n"; ! AddCredit(s, 30.0f, 0); s = "and\n"; ! AddCredit(s, 30.0f, 0); s = "To those who offered advice through e-mail and \nthe global_conflict discussion group"; ! AddCredit(s, 120.0f, 0); s = "GLOBAL CONFLICT BLUE"; ! AddCredit(s, 20.0f, 0); s = "An open source project"; ! AddCredit(s, 20.0f, 0); ! s = "www.gcblue.com"; ! AddCredit(s, 20.0f, 0); s = "Copyright (C) 2002-2004, All rights reserved.\n"; ! AddCredit(s, 60.0f, 0); *************** *** 158,161 **** --- 170,179 ---- return false; } + mpFontSmall = new Font(&ff,12,FontStyleRegular,UnitPixel); + if (mpFontSmall == NULL) { + WTL("tcCreditView - mpFontSmall creation failed\n"); + return false; + } + mpBrush = new SolidBrush(Color(0xFEFFFFFF)); // color is ARGB if (mpBrush == NULL) { *************** *** 194,198 **** ! float fY = (float)mnHeight - 0.5f*(float)nDeltaTime; float fX = 0.5f*(float)mnWidth; --- 212,216 ---- ! float fY = (float)mnHeight - 2*0.5f*(float)nDeltaTime; float fX = 0.5f*(float)mnWidth; *************** *** 244,248 **** } else if (fY <= (float)mnHeight) { ! if (n > nFlashId) { nFlashId = n; bFlash = true; --- 262,266 ---- } else if (fY <= (float)mnHeight) { ! if ((n > nFlashId)&&(maCredit[n].mnEffect == 1)) { nFlashId = n; bFlash = true; *************** *** 251,255 **** bFlash = false; } ! Font *pFont = (maCredit[n].mbBold) ? mpFontLarge : mpFont; mpBrush->SetColor(Color(nColorFade)); // font color --- 269,282 ---- bFlash = false; } ! Font *pFont = mpFont; ! if (maCredit[n].mnEffect == 1) ! { ! pFont = mpFontLarge; ! } ! else if (maCredit[n].mnEffect == 2) ! { ! pFont = mpFontSmall; ! } ! mpBrush->SetColor(Color(nColorFade)); // font color *************** *** 283,287 **** } ! void tcCreditView::Rewind() { mnStartTime = mcTime.snCount_30Hz; mbDrawRewind = true; --- 310,315 ---- } ! void tcCreditView::Rewind() ! { mnStartTime = mcTime.snCount_30Hz; mbDrawRewind = true; *************** *** 299,302 **** --- 327,332 ---- { mpFont = NULL; + mpFontLarge = NULL; + mpFontSmall = NULL; mpBrush = NULL; mpSound = NULL; *************** *** 308,311 **** --- 338,342 ---- if (mpFont != NULL) {delete mpFont;} if (mpFontLarge != NULL) {delete mpFontLarge;} + if (mpFontSmall != NULL) {delete mpFontSmall;} if (mpBrush != NULL) {delete mpBrush;} if (mpPen != NULL) {delete mpPen;} Index: tcFlightPort.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcFlightPort.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tcFlightPort.cpp 5 Jan 2004 02:48:03 -0000 1.5 --- tcFlightPort.cpp 29 Jan 2004 00:05:38 -0000 1.6 *************** *** 31,34 **** --- 31,35 ---- #include "tcAirObject.h" #include "tcFlightportDBObject.h" + #include "tcGenericDBObject.h" Index: tcLauncherState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcLauncherState.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcLauncherState.cpp 4 Jan 2004 22:24:53 -0000 1.2 --- tcLauncherState.cpp 29 Jan 2004 00:05:40 -0000 1.3 *************** *** 19,22 **** --- 19,27 ---- #include "tcLauncherState.h" + #include "tcDatabase.h" + #include "tcGenericDBObject.h" + #include "tcLauncherDBObject.h" + #include "tcMissileDBObject.h" + #include "tcRadarSensorState.h" tcDatabase* tcLauncherState::mpDatabase; *************** *** 36,39 **** --- 41,45 ---- return; } + if (mnCount >= tcGenericDBObject::MAXLAUNCHERS) { *************** *** 56,84 **** return; } ! ma[mnCount].mnChildDBKey = nChildKey; ! ma[mnCount].mpChildDBObj = pChildDBObj; ! ma[mnCount].mnDBKey = anKey; ! ma[mnCount].mpLauncherDBObj = ldata; ! ma[mnCount].mbActive = 1; ! ma[mnCount].mnCurrent = ldata->mnCapacity; ! ma[mnCount].mfTimeToReady = 0; ! ma[mnCount].msDatum.mfLon_rad=0; ! ma[mnCount].msDatum.mfLat_rad=0; ! ma[mnCount].mnTargetID=NULL_INDEX; ! ma[mnCount].meLaunchMode = AUTO; ! ma[mnCount].mnPending = 0; ! ma[mnCount].pointingAngle = azimuth_rad; // set detailed launch mode if missile tcMissileDBObject* pMissileDBObj = dynamic_cast<tcMissileDBObject*>(pDatabase->GetObject(nChildKey)); if (pMissileDBObj != NULL) { ! ma[mnCount].meLaunchMode = pMissileDBObj->GetLaunchMode(); ! ma[mnCount].mnTargetFlags = pMissileDBObj->mnTargetFlags; } else { ! ma[mnCount].mnTargetFlags = LAND_TARGET; } ! mnCount++; } --- 62,113 ---- return; } ! ! tsLData new_launcher; ! ! new_launcher.mnChildDBKey = nChildKey; ! new_launcher.mpChildDBObj = pChildDBObj; ! new_launcher.mnDBKey = anKey; ! new_launcher.mpLauncherDBObj = ldata; ! new_launcher.mbActive = 1; ! new_launcher.mnCurrent = ldata->mnCapacity; ! new_launcher.mfTimeToReady = 0; ! new_launcher.msDatum.mfLon_rad=0; ! new_launcher.msDatum.mfLat_rad=0; ! new_launcher.mnTargetID=NULL_INDEX; ! new_launcher.meLaunchMode = AUTO; ! new_launcher.mnPending = 0; ! new_launcher.pointingAngle = azimuth_rad; ! new_launcher.fireControlSensor = NULL; // set detailed launch mode if missile tcMissileDBObject* pMissileDBObj = dynamic_cast<tcMissileDBObject*>(pDatabase->GetObject(nChildKey)); if (pMissileDBObj != NULL) { ! new_launcher.meLaunchMode = pMissileDBObj->GetLaunchMode(); ! new_launcher.mnTargetFlags = pMissileDBObj->mnTargetFlags; } else { ! new_launcher.mnTargetFlags = LAND_TARGET; } ! launchers.push_back(new_launcher); ! mnCount = (int)launchers.size(); ! } ! ! ! int tcLauncherState::GetLauncherQuantity(unsigned anLauncher) ! { ! if (anLauncher > launchers.size()) {return -1;} ! return launchers[anLauncher].mnCurrent - launchers[anLauncher].mnPending; ! } ! ! bool tcLauncherState::IsDatumLaunch(unsigned anLauncher) ! { ! if (anLauncher > launchers.size()) {return false;} ! return launchers[anLauncher].meLaunchMode == DATUM_ONLY; ! } ! bool tcLauncherState::IsSeekerLaunch(unsigned anLauncher) ! { ! if (anLauncher > launchers.size()) {return false;} ! return launchers[anLauncher].meLaunchMode == SEEKER_TRACK; } *************** *** 93,96 **** --- 122,126 ---- for(int i=0;(i<mnCount)&&(i<tcGenericDBObject::MAXLAUNCHERS);i++) { + /* file.Read(&ma[i],sizeof(tsLData)); // replace serialized pointer *************** *** 98,105 **** --- 128,137 ---- ma[i].mpLauncherDBObj = dynamic_cast<tcLauncherDBObject*>(pDatabaseObj); ma[i].mpChildDBObj = mpDatabase->GetObject(ma[i].mnChildDBKey); + */ } } else { + /* file.Write(&mnCount,sizeof(mnCount)); for(int i=0;(i<mnCount)&&(i<tcGenericDBObject::MAXLAUNCHERS);i++) *************** *** 107,110 **** --- 139,143 ---- file.Write(&ma[i],sizeof(tsLData)); } + */ } } *************** *** 116,125 **** { std::string s; ! if ((int)anLauncher > mnCount) { s = "err"; return s; } ! teWeaponLaunchMode lm = ma[anLauncher].meLaunchMode; if (lm == DATUM_ONLY) { --- 149,158 ---- { std::string s; ! if (anLauncher > launchers.size()) { s = "err"; return s; } ! teWeaponLaunchMode lm = launchers[anLauncher].meLaunchMode; if (lm == DATUM_ONLY) { *************** *** 143,146 **** --- 176,180 ---- { mnCount = 0; + launchers.clear(); } *************** *** 150,163 **** tcLauncherState::tcLauncherState(tcLauncherState& lstate) { ! for(int i=0;i<tcGenericDBObject::MAXLAUNCHERS;i++) { ! ma[i].mnDBKey = lstate.ma[i].mnDBKey; ! ma[i].mbActive = lstate.ma[i].mbActive; ! ma[i].mnCurrent = lstate.ma[i].mnCurrent; ! ma[i].mfTimeToReady = lstate.ma[i].mfTimeToReady; ! ma[i].mnTargetID = lstate.ma[i].mnTargetID; ! ma[i].msDatum = lstate.ma[i].msDatum; } ! mnCount = lstate.mnCount; } --- 184,192 ---- tcLauncherState::tcLauncherState(tcLauncherState& lstate) { ! for(unsigned i=0;i<lstate.launchers.size();i++) { ! launchers.push_back(lstate.launchers[i]); } ! mnCount = (int)launchers.size(); } Index: tcMapView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcMapView.cpp,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** tcMapView.cpp 20 Jan 2004 03:02:53 -0000 1.16 --- tcMapView.cpp 29 Jan 2004 00:05:40 -0000 1.17 *************** *** 1272,1275 **** --- 1272,1277 ---- } + + /***********************************************************************************/ int tcTacticalMapView::Hook(wxPoint pscreen) *************** *** 1288,1294 **** --- 1290,1318 ---- return mnHookID; + } + + /***********************************************************************************/ + long tcTacticalMapView::HookSecondary(wxPoint pscreen) + { + long nMinID; + if (mnHookID == NULL_INDEX) return -1; + nMinID = GetClosest(pscreen); + + if ((nMinID != (long)mnHookID) && (nMinID != -1)) + { + wxCommandEvent command(wxEVT_COMMAND_BUTTON_CLICKED, ID_SECONDARYHOOK) ; + command.SetEventObject(this); + command.m_extraLong = nMinID; + AddPendingEvent(command); + return nMinID; + } + else + { + return -1; + } } + /***********************************************************************************/ int tcTacticalMapView::GetClosest(wxPoint pscreen) { *************** *** 1299,1303 **** // search for hook ! fHookDistance = mfScale_radppel*15.0f; // 15 pixels fMinDistance = 1e15f; nMinID = NULL_INDEX; --- 1323,1327 ---- // search for hook ! fHookDistance = mfScale_radppel*16.0f; // 16 pixels fMinDistance = 1e15f; nMinID = NULL_INDEX; *************** *** 1330,1337 **** dx = sinf(fDirection_rad)*dr; dy = cosf(fDirection_rad)*dr; ! mrectCurrentView.Offset(dx,dy); ! mrectViewBounds.ApplyBounds(mrectCurrentView); ! CalcViewParameters(); } --- 1354,1363 ---- dx = sinf(fDirection_rad)*dr; dy = cosf(fDirection_rad)*dr; + + tcPoint p; + p.x = mrectCurrentView.XCenter() + dx; + p.y = mrectCurrentView.YCenter() + dy; ! SetView(p, mrectCurrentView.Width()); } *************** *** 1486,1491 **** return; // old returned true } ! ! tcWindow::SkipMouseEvent(event); return; // old returned false } --- 1512,1519 ---- return; // old returned true } ! if ((mnHookID == NULL_INDEX)||(HookSecondary(point) == -1)) ! { ! tcWindow::SkipMouseEvent(event); ! } return; // old returned false } Index: tcMissileObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcMissileObject.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tcMissileObject.cpp 4 Jan 2004 22:24:53 -0000 1.4 --- tcMissileObject.cpp 29 Jan 2004 00:05:43 -0000 1.5 *************** *** 142,146 **** ! if (msKState.mfAltitude_m <= 12.0) { if (fInterceptPitch_rad < 0) {fInterceptPitch_rad = 0;} --- 142,146 ---- ! if (msKState.mfAltitude_m <= 4.0) { if (fInterceptPitch_rad < 0) {fInterceptPitch_rad = 0;} Index: tcObjectControl.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcObjectControl.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** tcObjectControl.cpp 4 Jan 2004 22:24:53 -0000 1.9 --- tcObjectControl.cpp 29 Jan 2004 00:05:45 -0000 1.10 *************** *** 659,668 **** for(int i=0;i<mnLaunchers;i++) { ! tsLData *pLauncher = &pLauncherState->ma[i]; int nLaunchCount = pLauncher->mnCurrent; mpSS->mpDatabase->GetObjectClass(pLauncher->mnChildDBKey,zClass); mcWeaponPanel.SetCaption(zClass.mz, i, 0); mcWeaponPanel.mastrCaption[i][1].Format("%d",nLaunchCount); ! switch(pLauncherState->ma[i].meLaunchMode) { case AUTO: --- 659,668 ---- for(int i=0;i<mnLaunchers;i++) { ! tsLData *pLauncher = &pLauncherState->launchers[i]; int nLaunchCount = pLauncher->mnCurrent; mpSS->mpDatabase->GetObjectClass(pLauncher->mnChildDBKey,zClass); mcWeaponPanel.SetCaption(zClass.mz, i, 0); mcWeaponPanel.mastrCaption[i][1].Format("%d",nLaunchCount); ! switch(pLauncherState->launchers[i].meLaunchMode) { case AUTO: *************** *** 1490,1494 **** { tcSensorState *pSensorState = pSS->at(i); ! tcRadarSensorState *pRadarSS = dynamic_cast<tcRadarSensorState*>(pSensorState); bool bActive = pSensorState->mbActive ? true : false; if ((pRadarSS)&&(bActive)) --- 1490,1494 ---- { tcSensorState *pSensorState = pSS->at(i); ! tcRadar *pRadarSS = dynamic_cast<tcRadar*>(pSensorState); bool bActive = pSensorState->mbActive ? true : false; if ((pRadarSS)&&(bActive)) Index: tcPlatformObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcPlatformObject.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tcPlatformObject.cpp 16 Jan 2004 00:04:14 -0000 1.10 --- tcPlatformObject.cpp 29 Jan 2004 00:05:45 -0000 1.11 *************** *** 25,28 **** --- 25,30 ---- #include "tcPlatformObject.h" + #include "tcGenericDBObject.h" + #include "tcLauncherDBObject.h" #include "tcString.h" #include "tcRadarSensorState.h" *************** *** 44,55 **** } ! void tcPlatformObject::DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) { if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.ma[anLauncher].msDatum.Set(p.x, p.y); } ! void tcPlatformObject::DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) { if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.ma[anLauncher].mnTargetID = anID; } --- 46,59 ---- } ! void tcPlatformObject::DesignateLauncherDatum(tcPoint p, unsigned int anLauncher) ! { if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.launchers[anLauncher].msDatum.Set(p.x, p.y); } ! void tcPlatformObject::DesignateLauncherTarget(tnPoolIndex anID, unsigned anLauncher) ! { if (anLauncher >= (unsigned)mcLauncherState.mnCount) {return;} ! mcLauncherState.launchers[anLauncher].mnTargetID = anID; } *************** *** 121,125 **** const float dh_thresh = 10.0f*C_PIOVER180; const float k_dh = 1.0f/dh_thresh; ! if (absdh_rad < dh_thresh) { dh_max *= absdh_rad*k_dh; } --- 125,130 ---- const float dh_thresh = 10.0f*C_PIOVER180; const float k_dh = 1.0f/dh_thresh; ! if (absdh_rad < dh_thresh) ! { dh_max *= absdh_rad*k_dh; } *************** *** 128,131 **** --- 133,148 ---- if (dh_rad < dh_min) {dh_rad = dh_min;} // restrict to turn rate else if (dh_rad > dh_max) {dh_rad = dh_max;} + + + // simple way to smooth heading rate changes when not near goal + if (absdh_rad > dh_thresh) + { + float ddh_rad = dh_rad - lastHeadingDelta; + const float ddh_max = 0.0002f; + if (ddh_rad < -ddh_max) dh_rad = lastHeadingDelta - ddh_max; + else if (ddh_rad > ddh_max) dh_rad = lastHeadingDelta + ddh_max; + } + + lastHeadingDelta = dh_rad; mcKin.mfHeading_rad += dh_rad; *************** *** 159,167 **** /*** update launcher state (reload time) ***/ ! void tcPlatformObject::UpdateLauncherState(float dt_s) { ! for(int i=0;i<mcLauncherState.mnCount;i++) { ! if (mcLauncherState.ma[i].mbActive) { ! if (mcLauncherState.ma[i].mfTimeToReady > 0) { ! mcLauncherState.ma[i].mfTimeToReady -= dt_s; } } --- 176,188 ---- /*** update launcher state (reload time) ***/ ! void tcPlatformObject::UpdateLauncherState(float dt_s) ! { ! for(int i=0;i<mcLauncherState.mnCount;i++) ! { ! if (mcLauncherState.launchers[i].mbActive) ! { ! if (mcLauncherState.launchers[i].mfTimeToReady > 0) ! { ! mcLauncherState.launchers[i].mfTimeToReady -= dt_s; } } *************** *** 213,217 **** for (int k=0;k<nSensors;k++) { tcSensorState *pSensorState = mapSensorState[k]; ! if (dynamic_cast<tcRadarSensorState*>(pSensorState)) { if (pSensorState->mbActive) {return true;} } --- 234,238 ---- for (int k=0;k<nSensors;k++) { tcSensorState *pSensorState = mapSensorState[k]; ! if (dynamic_cast<tcRadar*>(pSensorState)) { if (pSensorState->mbActive) {return true;} } *************** *** 229,232 **** --- 250,254 ---- mcAI.ClearOrders(); fuel_kg = 0; + lastHeadingDelta = 0; } /******************************************************************************/ *************** *** 236,244 **** tsLData *pLauncher; ! for (int n=0;n<nLaunchers;n++) { ! pLauncher = &mcLauncherState.ma[n]; ! if ((pLauncher->mbActive)&&(pLauncher->mnPending > 0)) { bool bLaunch = (pLauncher->mnCurrent > 0)&&(pLauncher->mfTimeToReady <= 0); ! if (bLaunch) { pLauncher->mnCurrent--; pLauncher->mnPending--; --- 258,269 ---- tsLData *pLauncher; ! for (int n=0;n<nLaunchers;n++) ! { ! pLauncher = &mcLauncherState.launchers[n]; ! if ((pLauncher->mbActive)&&(pLauncher->mnPending > 0)) ! { bool bLaunch = (pLauncher->mnCurrent > 0)&&(pLauncher->mfTimeToReady <= 0); ! if (bLaunch) ! { pLauncher->mnCurrent--; pLauncher->mnPending--; *************** *** 276,280 **** if ((anLauncher<0)||(anLauncher>=mcLauncherState.mnCount)) {return;} ! pLauncher = &mcLauncherState.ma[anLauncher]; if (!pLauncher->mbActive) {return;} pLauncher->mnPending += anQuantity; --- 301,305 ---- if ((anLauncher<0)||(anLauncher>=mcLauncherState.mnCount)) {return;} ! pLauncher = &mcLauncherState.launchers[anLauncher]; if (!pLauncher->mbActive) {return;} pLauncher->mnPending += anQuantity; *************** *** 304,307 **** --- 329,333 ---- mcGS.SetAltitude(mcKin.mfAlt_m); fuel_kg = mpDBObject->mfFuelCapacity_kg; + lastHeadingDelta = 0; } *************** *** 321,327 **** } ! for(int i=0;i<nLaunchers;i++) { ! s.Format(" LAU%d: %s x %d\n",i,mcLauncherState.ma[i].mpLauncherDBObj->mzChildClass.mz, ! mcLauncherState.ma[i].mnCurrent); file.WriteString(s.GetBuffer()); } --- 347,354 ---- } ! for(int i=0;i<nLaunchers;i++) ! { ! s.Format(" LAU%d: %s x %d\n",i,mcLauncherState.launchers[i].mpLauncherDBObj->mzChildClass.mz, ! mcLauncherState.launchers[i].mnCurrent); file.WriteString(s.GetBuffer()); } *************** *** 434,438 **** if (tcRadarDBObject *pRadarDBObj = dynamic_cast<tcRadarDBObject*>(pDBObj)) { ! tcRadarSensorState *pRadarSS = new tcRadarSensorState; pRadarSS->InitFromDB(database, nSensorKey, lookAz_rad); pRadarSS->mpDBObj = pRadarDBObj; --- 461,465 ---- if (tcRadarDBObject *pRadarDBObj = dynamic_cast<tcRadarDBObject*>(pDBObj)) { ! tcRadar *pRadarSS = new tcRadar; pRadarSS->InitFromDB(database, nSensorKey, lookAz_rad); pRadarSS->mpDBObj = pRadarDBObj; *************** *** 457,460 **** --- 484,489 ---- } model->SetupAnimation(this); + + lastHeadingDelta = 0; } /******************************************************************************/ Index: tcRadarSensorState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcRadarSensorState.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcRadarSensorState.cpp 4 Jan 2004 22:24:53 -0000 1.2 --- tcRadarSensorState.cpp 29 Jan 2004 00:05:45 -0000 1.3 *************** *** 21,29 **** #include "nsNav.h" #include "tcRadarSensorState.h" /** * */ ! bool tcRadarSensorState::InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad) { tcSensorState::InitFromDB(apDatabase, anKey, mountAzimuth_rad); --- 21,37 ---- #include "nsNav.h" #include "tcRadarSensorState.h" + #include "tcGameObject.h" + #include "tcSurfaceObject.h" + #include "tcAirObject.h" + #include "tcMissileObject.h" + #include "tcGenericDBObject.h" + #include "tcMissileDBObject.h" + + // break up this file later /** * */ ! bool tcRadar::InitFromDB(tcDatabase *apDatabase, tnPoolIndex anKey, float mountAzimuth_rad) { tcSensorState::InitFromDB(apDatabase, anKey, mountAzimuth_rad); *************** *** 32,36 **** if (mpDBObj == NULL) { ! WTL("Error - tcRadarSensorState::InitFromDB - Not found in db or bad class for key"); return false; } --- 40,44 ---- if (mpDBObj == NULL) { ! WTL("Error - tcRadar::InitFromDB - Not found in db or bad class for key"); return false; } *************** *** 43,47 **** * */ ! bool tcRadarSensorState::IsDetected(const tsRadarTargetInfo& asRTI, float& rfRange_km) { float fTargetAz_rad; --- 51,55 ---- * */ ! bool tcRadar::CanDetectTarget(const tcGameObject* target, float& range_km) { float fTargetAz_rad; *************** *** 54,57 **** --- 62,91 ---- return false; } + bool isSurface = false; + bool isAir = false; + float rcs_dBsm; + if (const tcSurfaceObject* surfaceObj = dynamic_cast<const tcSurfaceObject*>(target)) + { + rcs_dBsm = surfaceObj->mpDBObject->mfRcs_dbsm; + isSurface = true; + } + else if (const tcAirObject* airObj = dynamic_cast<const tcAirObject*>(target)) + { + rcs_dBsm = airObj->mpDBObject->mfRcs_dbsm; + isAir = true; + } + else if (const tcMissileObject* missileObj = dynamic_cast<const tcMissileObject*>(target)) + { + rcs_dBsm = missileObj->mpDBObject->mfRcs_dbsm; + isAir = true; + } + else + { + std::cerr << "CanDetectTarget called with illegal target class\n"; + return false; + } + + + const tcKinematics *kin = &target->mcKin; if (mpDBObj->mfFieldOfView_deg >= 360.0f) { *************** *** 61,86 **** { fTargetAz_rad = nsNav::GCHeadingApprox_rad(msCurrentPos.mfLat_rad,msCurrentPos.mfLon_rad, ! asRTI.mfLat_rad,asRTI.mfLon_rad); float fHalfFOV_rad = 0.5f*C_PIOVER180*mpDBObj->mfFieldOfView_deg; fCoverageAz1 = mfLookAz_rad - fHalfFOV_rad; fCoverageAz2 = mfLookAz_rad + fHalfFOV_rad; bInSearchVolume = AngleWithinRange(fTargetAz_rad,fCoverageAz1,fCoverageAz2) != 0; ! if (!bInSearchVolume) {rfRange_km=0;return false;} } ! float fRadarHorizon = C_RADARHOR*(sqrtf(asRTI.mfAlt_m) +sqrtf(msCurrentPos.mfAlt_m)); fTargetRange_km = C_RADTOKM*nsNav::GCDistanceApprox_rad(msCurrentPos.mfLat_rad,msCurrentPos.mfLon_rad, ! asRTI.mfLat_rad,asRTI.mfLon_rad); ! rfRange_km = fTargetRange_km; if (fTargetRange_km > fRadarHorizon) { return false; } ! if (40.0f*(log10f(mpDBObj->mfRefRange_km) - log10f(fTargetRange_km)) ! >= asRTI.mfRCS_dbsm) { ! bool bTargetTypeMatch = (mpDBObj->mbDetectsAir && asRTI.mfAlt_m > 0) || ! (mpDBObj->mbDetectsSurface && asRTI.mfAlt_m == 0); return bTargetTypeMatch; // detected --- 95,120 ---- { fTargetAz_rad = nsNav::GCHeadingApprox_rad(msCurrentPos.mfLat_rad,msCurrentPos.mfLon_rad, ! kin->mfLat_rad,kin->mfLon_rad); float fHalfFOV_rad = 0.5f*C_PIOVER180*mpDBObj->mfFieldOfView_deg; fCoverageAz1 = mfLookAz_rad - fHalfFOV_rad; fCoverageAz2 = mfLookAz_rad + fHalfFOV_rad; bInSearchVolume = AngleWithinRange(fTargetAz_rad,fCoverageAz1,fCoverageAz2) != 0; ! if (!bInSearchVolume) {range_km=0;return false;} } ! float fRadarHorizon = C_RADARHOR*(sqrtf(kin->mfAlt_m) +sqrtf(msCurrentPos.mfAlt_m)); fTargetRange_km = C_RADTOKM*nsNav::GCDistanceApprox_rad(msCurrentPos.mfLat_rad,msCurrentPos.mfLon_rad, ! kin->mfLat_rad,kin->mfLon_rad); ! range_km = fTargetRange_km; if (fTargetRange_km > fRadarHorizon) { return false; } ! if (40.0f*(log10f(mpDBObj->mfRefRange_km) - log10f(fTargetRange_km)) ! >= rcs_dBsm) { ! bool bTargetTypeMatch = (mpDBObj->mbDetectsAir && isAir) || ! (mpDBObj->mbDetectsSurface && isSurface); return bTargetTypeMatch; // detected *************** *** 93,97 **** * */ ! void tcRadarSensorState::Serialize(tcFile& file, bool mbLoad) { tcSensorState::Serialize(file, mbLoad); --- 127,131 ---- * */ ! void tcRadar::Serialize(tcFile& file, bool mbLoad) { tcSensorState::Serialize(file, mbLoad); *************** *** 101,105 **** * */ ! tcRadarSensorState& tcRadarSensorState::operator=(tcRadarSensorState& ss) { tcSensorState::operator =(ss); --- 135,139 ---- * */ ! tcRadar& tcRadar::operator=(tcRadar& ss) { tcSensorState::operator =(ss); *************** *** 112,118 **** * */ ! tcRadarSensorState* tcRadarSensorState::Clone(void) { ! tcRadarSensorState *pNew = new tcRadarSensorState(); *pNew = *this; return pNew; --- 146,152 ---- * */ ! tcRadar* tcRadar::Clone(void) { ! tcRadar *pNew = new tcRadar(); *pNew = *this; return pNew; *************** *** 120,126 **** /** * */ ! tcRadarSensorState::tcRadarSensorState() { mnMode = 0; // mode if mbActive --- 154,184 ---- /** + * @return true if track is available and radar can detect target. + */ + bool tcRadar::IsTrackAvailable(const tcGameObject* target) + { + return false; + } + + /** + * if track is available and detectable, reserve a track. + * The current approach to semi-active guidance is to require each + * missile to request one track per target, even if it is the same + * target as a pre-existing track. + */ + bool tcRadar::RequestTrack(const tcGameObject* target) + { + return false; + } + + bool tcRadar::ReleaseTrack() + { + return false; + } + + /** * */ ! tcRadar::tcRadar() { mnMode = 0; // mode if mbActive *************** *** 132,134 **** * */ ! tcRadarSensorState::~tcRadarSensorState() {} \ No newline at end of file --- 190,192 ---- * */ ! tcRadar::~tcRadar() {} \ No newline at end of file Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** tcSimState.cpp 20 Jan 2004 03:02:53 -0000 1.24 --- tcSimState.cpp 29 Jan 2004 00:05:45 -0000 1.25 *************** *** 126,130 **** * correctly. */ ! bool tcSimState::RadarCanDetect(tnPoolIndex anSensorKey, const tsRadarTargetInfo& asRTI, tsGeoPoint asSensorLocation, float afSensorAz) { --- 126,130 ---- * correctly. */ ! bool tcSimState::RadarCanDetect(tnPoolIndex anSensorKey, const tcGameObject* target, tsGeoPoint asSensorLocation, float afSensorAz) { *************** *** 132,136 **** if (mcDefaultRadar.InitFromDB(mpDatabase,anSensorKey,0)==false) {return false;} mcDefaultRadar.UpdateCoverage(asSensorLocation,afSensorAz); ! return mcDefaultRadar.IsDetected(asRTI,fRange_km); } --- 132,136 ---- if (mcDefaultRadar.InitFromDB(mpDatabase,anSensorKey,0)==false) {return false;} mcDefaultRadar.UpdateCoverage(asSensorLocation,afSensorAz); ! return mcDefaultRadar.CanDetectTarget(target,fRange_km); } *************** *** 182,186 **** if (pLauncherState==NULL) {return false;} if (anLauncher>=(unsigned)pLauncherState->mnCount) {return false;} // invalid anLauncher ! tsLData *pLauncher = &pLauncherState->ma[anLauncher]; if (pLauncher->mnCurrent <= 0) {return false;} // launcher empty if (pLauncher->mfTimeToReady > 0) {return false;} // launcher not ready --- 182,186 ---- if (pLauncherState==NULL) {return false;} if (anLauncher>=(unsigned)pLauncherState->mnCount) {return false;} // invalid anLauncher ! tsLData *pLauncher = &pLauncherState->launchers[anLauncher]; if (pLauncher->mnCurrent <= 0) {return false;} // launcher empty if (pLauncher->mfTimeToReady > 0) {return false;} // launcher not ready *************** *** 194,209 **** tnPoolIndex nSensorKey = mpDatabase->GetKey(pMissileDBObj->maSensorClass[0]); - tsRadarTargetInfo sRTI; - sRTI.mfAlt_m = pTargetObj->mcKin.mfAlt_m; - sRTI.mfHeading_rad = pTargetObj->mcKin.mfHeading_rad; - sRTI.mfLat_rad= (float)pTargetObj->mcKin.mfLat_rad; - sRTI.mfLon_rad= (float)pTargetObj->mcKin.mfLon_rad; - sRTI.mfRCS_dbsm = 0; // TODO: add RCS - sRTI.mfSpeed_mps = pTargetObj->mcKin.mfSpeed_kts*C_KTSTOMPS; float fSeekerAz = po->mcKin.mfHeading_rad; // TODO: add launcher angle effect tsGeoPoint sSeekerLoc; sSeekerLoc.Set((float)po->mcKin.mfLon_rad,(float)po->mcKin.mfLat_rad); ! bool bCanDetect = RadarCanDetect(nSensorKey,sRTI,sSeekerLoc,fSeekerAz); ! if (bCanDetect) { pPlatformObj->DesignateLauncherTarget(anTargetKey, anLauncher); if (mpUserInfo->IsOwnAlliance(pPlatformObj->mnAlliance)) { --- 194,203 ---- tnPoolIndex nSensorKey = mpDatabase->GetKey(pMissileDBObj->maSensorClass[0]); float fSeekerAz = po->mcKin.mfHeading_rad; // TODO: add launcher angle effect tsGeoPoint sSeekerLoc; sSeekerLoc.Set((float)po->mcKin.mfLon_rad,(float)po->mcKin.mfLat_rad); ! bool bCanDetect = RadarCanDetect(nSensorKey,pTargetObj,sSeekerLoc,fSeekerAz); ! if (bCanDetect) ! { pPlatformObj->DesignateLauncherTarget(anTargetKey, anLauncher); if (mpUserInfo->IsOwnAlliance(pPlatformObj->mnAlliance)) { *************** *** 484,488 **** apGameObj->GetLauncherState(pLauncherState); if (pLauncherState == NULL) {return false;} ! pLauncher = &pLauncherState->ma[anLauncher]; int nLaunchCount = pLauncher->mnCurrent - pLauncher->mnPending; --- 478,482 ---- apGameObj->GetLauncherState(pLauncherState); if (pLauncherState == NULL) {return false;} ! pLauncher = &pLauncherState->launchers[anLauncher]; int nLaunchCount = pLauncher->mnCurrent - pLauncher->mnPending; *************** *** 533,537 **** bool bSearching = true; for(int n=0;(n<nLaunchers)&&(bSearching);n++) { ! tsLData *pLauncher = &pSurfaceObj->mcLauncherState.ma[n]; bool bLauncherReady = (pLauncher->mbActive)&& (pLauncher->mfTimeToReady <= 0)&& --- 527,531 ---- bool bSearching = true; for(int n=0;(n<nLaunchers)&&(bSearching);n++) { ! tsLData *pLauncher = &pSurfaceObj->mcLauncherState.launchers[n]; bool bLauncherReady = (pLauncher->mbActive)&& (pLauncher->mfTimeToReady <= 0)&& *************** *** 616,620 **** case SSMODE_FCSURVEILLANCE: { ! tcRadarSensorState *pRadarSS = dynamic_cast<tcRadarSensorState*>(pSensorState); if (pRadarSS) { UpdateFireControl(pplat,pRadarSS); --- 610,614 ---- case SSMODE_FCSURVEILLANCE: { ! tcRadar *pRadarSS = dynamic_cast<tcRadar*>(pSensorState); if (pRadarSS) { UpdateFireControl(pplat,pRadarSS); *************** *** 638,642 **** } else if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pplat)) { ! tcRadarSensorState *pRadarSS = pMissileObj->GetSensorState(); if((pRadarSS!=NULL)&&(pRadarSS->UpdateScan(mfSimTime))) { switch (pRadarSS->mnMode) { --- 632,636 ---- } else if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pplat)) { ! tcRadar *pRadarSS = pMissileObj->GetSensorState(); if((pRadarSS!=NULL)&&(pRadarSS->UpdateScan(mfSimTime))) { switch (pRadarSS->mnMode) { *************** *** 655,661 **** /********************************************************************/ void tcSimState::ProcessRadarDetection(tcGameObject *apRadarPlat,tcGameObject *apTarget, ! tcRadarSensorState *apRadarSS) { - tsRadarTargetInfo sRTI; float fRange_km; --- 649,654 ---- /********************************************************************/ void tcSimState::ProcessRadarDetection(tcGameObject *apRadarPlat,tcGameObject *apTarget, ! tcRadar *apRadarSS) { float fRange_km; *************** *** 663,671 **** if (apRadarPlat->mnAlliance == apTarget->mnAlliance) {return;} ! sRTI.mfLat_rad = (float)apTarget->mcKin.mfLat_rad; ! sRTI.mfLon_rad = (float)apTarget->mcKin.mfLon_rad; ! sRTI.mfAlt_m = apTarget->mcKin.mfAlt_m; ! sRTI.mfRCS_dbsm = 0; ! bool bDetected = apRadarSS->IsDetected(sRTI,fRange_km); if (!bDetected) {return;} --- 656,660 ---- if (apRadarPlat->mnAlliance == apTarget->mnAlliance) {return;} ! bool bDetected = apRadarSS->CanDetectTarget(apTarget,fRange_km); if (!bDetected) {return;} *************** *** 717,721 **** /********************************************************************/ ! bool tcSimState::IsDetectedESM(tcESMSensorState *apESM, tcRadarSensorState *apEmitterRadar, tcGameObject *apEmitterPlatform, float& rfAz_rad) { --- 706,710 ---- /********************************************************************/ ! bool tcSimState::IsDetectedESM(tcESMSensorState *apESM, tcRadar *apEmitterRadar, tcGameObject *apEmitterPlatform, float& rfAz_rad) { *************** *** 746,750 **** if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(apTarget)) { ! tcRadarSensorState *pRadarSS = pMissileObj->GetSensorState(); bDetected = IsDetectedESM(apESMSS, pRadarSS, apTarget, fAz_rad); if ((bDetected)&&(nEmitters < MAX_EMITTERS)) { --- 735,739 ---- if (tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(apTarget)) { ! tcRadar *pRadarSS = pMissileObj->GetSensorState(); bDetected = IsDetectedESM(apESMSS, pRadarSS, apTarget, fAz_rad); if ((bDetected)&&(nEmitters < MAX_EMITTERS)) { *************** *** 757,761 **** int nSensors = (int)pSensorArray->size(); for (int n=0;n<nSensors;n++) { ! tcRadarSensorState *pRadarSS = dynamic_cast<tcRadarSensorState*>(pSensorArray->at(n)); if (pRadarSS) { if (IsDetectedESM(apESMSS, pRadarSS, apTarget, fAz_rad)) { --- 746,750 ---- int nSensors = (int)pSensorArray->size(); for (int n=0;n<nSensors;n++) { ! tcRadar *pRadarSS = dynamic_cast<tcRadar*>(pSensorArray->at(n)); if (pRadarSS) { if (IsDetectedESM(apESMSS, pRadarSS, apTarget, fAz_rad)) { *************** *** 858,862 **** if (nTargetID != applat->mnID) { // no self detection pTarget = GetObject(nTargetID); ! tcRadarSensorState *pRadarSS = dynamic_cast<tcRadarSensorState*>(apSensorState); if (pRadarSS) { ProcessRadarDetection(applat,pTarget,pRadarSS); --- 847,851 ---- if (nTargetID != applat->mnID) { // no self detection pTarget = GetObject(nTargetID); ! tcRadar *pRadarSS = dynamic_cast<tcRadar*>(apSensorState); if (pRadarSS) { ProcessRadarDetection(applat,pTarget,pRadarSS); *************** *** 871,875 **** #define N_TARGET_KEYS 100 #define N_FC_KEYS 32 ! void tcSimState::UpdateFireControl(tcGameObject *apGameObj, tcRadarSensorState *apRadarSS) { tnPoolIndex aTargetKeys[N_TARGET_KEYS]; tnPoolIndex aFCKeys[N_FC_KEYS]; --- 860,864 ---- #define N_TARGET_KEYS 100 #define N_FC_KEYS 32 ! void tcSimState::UpdateFireControl(tcGameObject *apGameObj, tcRadar *apRadarSS) { tnPoolIndex aTargetKeys[N_TARGET_KEYS]; tnPoolIndex aFCKeys[N_FC_KEYS]; *************** *** 890,905 **** for(int k=0;(k<nCount)&&(nFCCount<N_FC_KEYS);k++) { nTargetID = aTargetKeys[k]; ! if (nTargetID != apGameObj->mnID) { // no self detection bool bDetected = false; int bTargetExists = maPlatformState.Lookup(nTargetID,pTargetObj); bool bOwnAlliance = (pTargetObj->mnAlliance == apGameObj->mnAlliance); float fRange_km; ! if ((bTargetExists)&&(!bOwnAlliance)) { // no own-alliance detections ! tsRadarTargetInfo sRTI; ! sRTI.mfLat_rad = (float)pTargetObj->mcKin.mfLat_rad; ! sRTI.mfLon_rad = (float)pTargetObj->mcKin.mfLon_rad; ! sRTI.mfAlt_m = pTargetObj->mcKin.mfAlt_m; ! sRTI.mfRCS_dbsm = 0; ! bDetected = apRadarSS->IsDetected(sRTI,fRange_km) == 1; } if (bDetected) { --- 879,891 ---- for(int k=0;(k<nCount)&&(nFCCount<N_FC_KEYS);k++) { nTargetID = aTargetKeys[k]; ! if (nTargetID != apGameObj->mnID) // no self detection ! { bool bDetected = false; int bTargetExists = maPlatformState.Lookup(nTargetID,pTargetObj); bool bOwnAlliance = (pTargetObj->mnAlliance == apGameObj->mnAlliance); float fRange_km; ! if ((bTargetExists)&&(!bOwnAlliance)) // no own-alliance detections ! { ! bDetected = apRadarSS->CanDetectTarget(pTargetObj,fRange_km) == 1; } if (bDetected) { *************** *** 1020,1024 **** } /********************************************************************/ ! void tcSimState::UpdateSeeker(tcGameObject *applat, tcRadarSensorState *apRadarSS) { long nTargetID; tsGeoPoint currentpos; --- 1006,1010 ---- } /********************************************************************/ ! void tcSimState::UpdateSeeker(tcGameObject *applat, tcRadar *apRadarSS) { long nTargetID; tsGeoPoint currentpos; *************** *** 1031,1035 **** float fRange,fMinRange; int bFound; - tsRadarTargetInfo sRTI; int bDetectable; --- 1017,1020 ---- *************** *** 1050,1059 **** bFound = maPlatformState.Lookup(nTargetID,ptarget); if (bFound) { // own-alliance is allowed - sRTI.mfLat_rad = (float)ptarget->mcKin.mfLat_rad; - sRTI.mfLon_rad = (float)ptarget->mcKin.mfLon_rad; - sRTI.mfAlt_m = ptarget->mcKin.mfAlt_m; - sRTI.mfRCS_dbsm = 0; float fRange_km; ! bDetectable = apRadarSS->IsDetected(sRTI,fRange_km); if (bDetectable) { // update track info --- 1035,1040 ---- bFound = maPlatformState.Lookup(nTargetID,ptarget); if (bFound) { // own-alliance is allowed float fRange_km; ! bDetectable = apRadarSS->CanDetectTarget(ptarget,fRange_km); if (bDetectable) { // update track info *************** *** 1100,1109 **** if (nTargetID != applat->mnID) { // no self detection bFound = maPlatformState.Lookup(nTargetID,ptarget); ! if (bFound) { ! sRTI.mfLat_rad = (float)ptarget->mcKin.mfLat_rad; ! sRTI.mfLon_rad = (float)ptarget->mcKin.mfLon_rad; ! sRTI.mfAlt_m = ptarget->mcKin.mfAlt_m; ! sRTI.mfRCS_dbsm = 0; ! bDetectable = apRadarSS->IsDetected(sRTI,fRange); // (tsGeoPoint,float rcs_dbsm) if ((bDetectable)&&(fRange<fMinRange)) { nMinID = nTargetID; --- 1081,1087 ---- if (nTargetID != applat->mnID) { // no self detection bFound = maPlatformState.Lookup(nTargetID,ptarget); ! if (bFound) ! { ! bDetectable = apRadarSS->CanDetectTarget(ptarget,fRange); // (tsGeoPoint,float rcs_dbsm) if ((bDetectable)&&(fRange<fMinRange)) { nMinID = nTargetID; *************** *** 1166,1170 **** plaunchingplatform->GetLauncherState(pLauncherState); if (pLauncherState != NULL) { ! tsLData *pLauncher = &pLauncherState->ma[anLauncher]; if (pLauncher->meLaunchMode == DATUM_ONLY) { pMissileObj->msWaypoint = pLauncher->msDatum; --- 1144,1148 ---- plaunchingplatform->GetLauncherState(pLauncherState); if (pLauncherState != NULL) { ! tsLData *pLauncher = &pLauncherState->launchers[anLauncher]; if (pLauncher->meLaunchMode == DATUM_ONLY) { pMissileObj->msWaypoint = pLauncher->msDatum; Index: tcSurfaceObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSurfaceObject.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcSurfaceObject.cpp 8 Dec 2003 03:06:36 -0000 1.6 --- tcSurfaceObject.cpp 29 Jan 2004 00:05:54 -0000 1.7 *************** *** 26,29 **** --- 26,30 ---- #include "tcSurfaceObject.h" + #include "tcGenericDBObject.h" #include "tcMapData.h" |
From: <ddc...@pr...> - 2004-01-30 22:53:10
|
Update of /cvsroot/gcblue/gcb_wx/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/scripts Modified Files: Menu.py Log Message: Index: Menu.py =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/scripts/Menu.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Menu.py 16 Jan 2004 00:04:14 -0000 1.3 --- Menu.py 29 Jan 2004 00:05:21 -0000 1.4 *************** *** 2,5 **** --- 2,6 ---- from HotKey import * from FlightPort import * + from SecondaryHook import * ###### Track menu scripts ##### |
Update of /cvsroot/gcblue/gcb_wx/src/database In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4640/src/database Modified Files: tcDatabase.cpp tcDatabaseObject.cpp tcLauncherDBObject.cpp tcMissileDBObject.cpp tcRadarDBObject.cpp Log Message: Index: tcDatabase.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcDatabase.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tcDatabase.cpp 4 Jan 2004 22:24:52 -0000 1.5 --- tcDatabase.cpp 30 Jan 2004 01:02:34 -0000 1.6 *************** *** 977,983 **** ! tcDatabase::tcDatabase() { mstrCurrentFile = "NULL"; mnVersion = VERSION_CURRENT; } --- 977,985 ---- ! tcDatabase::tcDatabase() ! { mstrCurrentFile = "NULL"; mnVersion = VERSION_CURRENT; + tcDatabaseObject::AttachDatabase(this); } Index: tcDatabaseObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcDatabaseObject.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tcDatabaseObject.cpp 10 Jan 2004 21:55:31 -0000 1.4 --- tcDatabaseObject.cpp 30 Jan 2004 01:02:34 -0000 1.5 *************** *** 26,29 **** --- 26,30 ---- #include "tcDatabaseObject.h" + #include "tcDatabase.h" #include "math_constants.h" #include "randfn.h" *************** *** 36,40 **** namespace Database { ! UINT16 IdxToClassification(int anIdx) { --- 37,42 ---- namespace Database { ! tcDatabase* tcDatabaseObject::database = NULL; ! UINT16 IdxToClassification(int anIdx) { Index: tcLauncherDBObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcLauncherDBObject.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcLauncherDBObject.cpp 7 Dec 2003 01:53:36 -0000 1.2 --- tcLauncherDBObject.cpp 30 Jan 2004 01:02:35 -0000 1.3 *************** *** 78,81 **** --- 78,82 ---- *csv >> mnCapacity; *csv >> s; mzChildClass = s.c_str(); + *csv >> fireControlSensorClass; int i; mnConfigurations = 0; *************** *** 96,100 **** *csv << (long)mnCapacity; *csv << mzChildClass.mz; ! for(unsigned i=0;i<MAX_LAUNCHER_CONFIGURATIONS;i++) { --- 97,102 ---- *csv << (long)mnCapacity; *csv << mzChildClass.mz; ! *csv << fireControlSensorClass; ! for(unsigned i=0;i<MAX_LAUNCHER_CONFIGURATIONS;i++) { *************** *** 122,126 **** *csv << "Basic capacity"; *csv << "Basic class"; ! for(unsigned i=0;i<MAX_LAUNCHER_CONFIGURATIONS;i++) { --- 124,128 ---- *csv << "Basic capacity"; *csv << "Basic class"; ! *csv << "Fire control sensor class"; for(unsigned i=0;i<MAX_LAUNCHER_CONFIGURATIONS;i++) { *************** *** 143,146 **** --- 145,149 ---- mnCapacity = 0; mzChildClass = "NOCHILDCLASS"; + fireControlSensorClass = ""; for(unsigned i=0;i<MAX_LAUNCHER_CONFIGURATIONS;i++) { *************** *** 162,165 **** --- 165,169 ---- } mnConfigurations = obj.mnConfigurations; + fireControlSensorClass = obj.fireControlSensorClass; } Index: tcMissileDBObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcMissileDBObject.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcMissileDBObject.cpp 8 Dec 2003 03:06:36 -0000 1.3 --- tcMissileDBObject.cpp 30 Jan 2004 01:02:35 -0000 1.4 *************** *** 29,32 **** --- 29,33 ---- //#include "aerror.h" #include "CsvTranslator.h" + #include "tcDatabase.h" *************** *** 54,57 **** --- 55,70 ---- } + tnPoolIndex tcMissileDBObject::GetPrimarySeekerKey() + { + wxASSERT(database); + if (primarySeekerKey != NULL_INDEX) return primarySeekerKey; + primarySeekerKey = database->GetKey(maSensorClass[0]); + if (primarySeekerKey == NULL_INDEX) + { + std::cerr << "tcMissileDBObject::GetPrimarySeekerKey -- not found" << std::endl; + } + return primarySeekerKey; + } + void tcMissileDBObject::PrintToFile(tcFile& file) { *************** *** 186,189 **** --- 199,205 ---- } *csv >> mnTargetFlags; + + // set other params that do not come from database file + primarySeekerKey = NULL_INDEX; } else *************** *** 311,314 **** --- 327,331 ---- maFlightProfile[i] = obj.maFlightProfile[i]; } + primarySeekerKey = NULL_INDEX; } *************** *** 347,350 **** --- 364,368 ---- maFlightProfile[0].meAltitudeMode = AM_ASL; maFlightProfile[0].meGuidanceMode = GM_COMMAND; + primarySeekerKey = NULL_INDEX; } Index: tcRadarDBObject.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/database/tcRadarDBObject.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tcRadarDBObject.cpp 29 Jan 2004 00:05:23 -0000 1.4 --- tcRadarDBObject.cpp 30 Jan 2004 01:02:35 -0000 1.5 *************** *** 113,116 **** --- 113,117 ---- *csv >> mfMinRangeRate_mps; *csv >> maxFireControlTracks; + *csv >> val; isSemiactive = val != 0; *csv >> val; mbDetectsSurface = val != 0; *csv >> val; mbDetectsAir = val != 0; *************** *** 122,125 **** --- 123,127 ---- *csv << mfMinRangeRate_mps; *csv << (long)maxFireControlTracks; + *csv << (long)isSemiactive; *csv << (long)mbDetectsSurface; *csv << (long)mbDetectsAir; *************** *** 137,140 **** --- 139,143 ---- *csv << "MinRangeRate_mps"; *csv << "MaxFireControlTracks"; + *csv << "IsSemiactive"; *csv << "DetectsSurface"; *csv << "DetectsAir"; |
From: <ddc...@pr...> - 2004-01-29 06:42:57
|
Update of /cvsroot/gcblue/gcb_wx/include/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/include/common Modified Files: wxcommands.h Log Message: Index: wxcommands.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/common/wxcommands.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** wxcommands.h 3 Jan 2004 00:45:12 -0000 1.6 --- wxcommands.h 29 Jan 2004 00:04:59 -0000 1.7 *************** *** 42,45 **** --- 42,46 ---- ID_SKIPBRIEFING, ///< skip tactical briefing ID_BUTTONREDRAW, ///< posted by button to force parent to redraw + ID_SECONDARYHOOK, ///< used for quick targeting and possibly other functions }; |
From: <ddc...@pr...> - 2004-01-29 01:04:15
|
Update of /cvsroot/gcblue/gcb_wx In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193 Modified Files: GCblue.vcproj Log Message: Index: GCblue.vcproj =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/GCblue.vcproj,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** GCblue.vcproj 20 Jan 2004 03:02:52 -0000 1.34 --- GCblue.vcproj 29 Jan 2004 00:04:49 -0000 1.35 *************** *** 45,49 **** AdditionalLibraryDirectories="" IgnoreDefaultLibraryNames="libcd.lib;libcid.lib;msvcrt.lib;python23.lib" ! DelayLoadDLLs="Producerd.dll" GenerateDebugInformation="TRUE" ProgramDatabaseFile="$(OutDir)/GCblue.pdb" --- 45,49 ---- AdditionalLibraryDirectories="" IgnoreDefaultLibraryNames="libcd.lib;libcid.lib;msvcrt.lib;python23.lib" ! DelayLoadDLLs="" GenerateDebugInformation="TRUE" ProgramDatabaseFile="$(OutDir)/GCblue.pdb" |
From: <ddc...@pr...> - 2004-01-29 00:25:51
|
Update of /cvsroot/gcblue/gcb_wx/include/database In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4193/include/database Modified Files: tcAirDBObject.h tcMissileDBObject.h tcRadarDBObject.h Log Message: Index: tcAirDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcAirDBObject.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tcAirDBObject.h 9 Dec 2003 00:36:03 -0000 1.4 --- tcAirDBObject.h 29 Jan 2004 00:05:01 -0000 1.5 *************** *** 44,47 **** --- 44,48 ---- { public: + float mfAltThrustDecay_pm; ///< [1/m] available thrust decay with altitude float mfAfterburnFuelRate_kgps; ///< [kg/s] with afterburners float mfAfterburnThrust_N; ///< [N] afterburners engine thrust Index: tcMissileDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcMissileDBObject.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcMissileDBObject.h 7 Dec 2003 01:53:36 -0000 1.2 --- tcMissileDBObject.h 29 Jan 2004 00:05:03 -0000 1.3 *************** *** 61,65 **** #define MAX_MISSILE_FLIGHT_SEGMENTS 8 ! typedef enum _weaponlaunchmode { DATUM_ONLY, ///< needs a datum programmed to launch --- 61,65 ---- #define MAX_MISSILE_FLIGHT_SEGMENTS 8 ! enum teWeaponLaunchMode { DATUM_ONLY, ///< needs a datum programmed to launch *************** *** 67,71 **** SEEKER_TRACK, ///< needs a track to launch, seeker sensor checked before associating AUTO ///< will launch and either proceed unguided or autonomously search out target ! } teWeaponLaunchMode; #define SURFACE_TARGET 0x0001 --- 67,71 ---- SEEKER_TRACK, ///< needs a track to launch, seeker sensor checked before associating AUTO ///< will launch and either proceed unguided or autonomously search out target ! }; #define SURFACE_TARGET 0x0001 Index: tcRadarDBObject.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/database/tcRadarDBObject.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tcRadarDBObject.h 7 Dec 2003 01:53:36 -0000 1.2 --- tcRadarDBObject.h 29 Jan 2004 00:05:03 -0000 1.3 *************** *** 36,39 **** --- 36,40 ---- float mfERP_dBW; ///< [dBW] effective radiated power, peak float mfMinRangeRate_mps; ///< minimum detectable range rate + unsigned int maxFireControlTracks; ///< max number of simultaneous fire control tracks bool mbDetectsSurface; ///< set true if detects surface targets bool mbDetectsAir; ///< set true if detects airborne targets |
From: <ddc...@pr...> - 2004-01-25 17:38:11
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11285/src/sim Modified Files: Tag: v0_5_0 Game.cpp tc3DViewer.cpp tcCreditView.cpp tcMapView.cpp Log Message: Bug with arrow scroll causing bad symbol placement for initial map view Index: Game.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/Game.cpp,v retrieving revision 1.52.2.1 retrieving revision 1.52.2.2 diff -C2 -d -r1.52.2.1 -r1.52.2.2 *** Game.cpp 19 Jan 2004 21:20:58 -0000 1.52.2.1 --- Game.cpp 25 Jan 2004 17:36:28 -0000 1.52.2.2 *************** *** 129,132 **** --- 129,134 ---- mnLeftMargin = 200; mnBottomMargin = 200; + + std::cout << "Game constructor success" << std::endl; } *************** *** 238,241 **** --- 240,244 ---- { meScreenMode = CREDIT; + mcSound.PlayMusic("tension1"); } *************** *** 254,257 **** --- 257,261 ---- if (meGameMode == GM_START) { + if (meScreenMode == CREDIT) mcSound.PlayMusic("loop1"); meScreenMode = START; } *************** *** 318,326 **** --- 322,333 ---- startTime = wxDateTime::Now(); + std::cout << "Time init success" << std::endl; try { StartMusic(); + std::cout << "Music start success" << std::endl; Initialize3DViewer(); + std::cout << "3D viewer init success" << std::endl; /* ** Init graphics engine * **/ *************** *** 385,390 **** --- 392,399 ---- catch(...) { + wxMessageBox("Unrecognized exception","Fatal error",wxICON_ERROR); throw; } + std::cout << "Game init success" << std::endl << std::endl; } *************** *** 421,424 **** --- 430,434 ---- mcSound.PlayMusic("loop1"); + mcSound.QueueMusic("tension1"); } Index: tc3DViewer.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tc3DViewer.cpp,v retrieving revision 1.24.2.2 retrieving revision 1.24.2.3 diff -C2 -d -r1.24.2.2 -r1.24.2.3 *** tc3DViewer.cpp 20 Jan 2004 03:03:10 -0000 1.24.2.2 --- tc3DViewer.cpp 25 Jan 2004 17:36:29 -0000 1.24.2.3 *************** *** 884,887 **** --- 884,889 ---- mnHeight(size.GetHeight()), mnWidth(size.GetWidth()) { + std::cout << "3DViewer constructor entry" << std::endl; + SetBackgroundColour(*wxBLACK); wxWindow::Show(false); *************** *** 918,921 **** --- 920,924 ---- camera = new Producer::Camera(); + std::cout << "Producer::Camera init success" << std::endl; // causes warning C4312: 'type cast' : conversion from 'WXWidget' to 'HWND' of greater size *************** *** 924,927 **** --- 927,932 ---- render_surface = new tcRenderSurface(hwnd); + std::cout << "RenderSurface init success" << std::endl; + render_surface.get()->ref(); // prevents heap exception in debug mode, memory is modified after delete camera->setRenderSurface(render_surface.get()); *************** *** 946,949 **** --- 951,955 ---- camera_group->realize(Producer::CameraGroup::SingleThreaded); // other option is Producer::CameraGroup::ThreadPerCamera camera_group->setInstrumentationMode(FALSE); + std::cout << "Camera setup success" << std::endl; osgDB::Registry::instance()->setDataFilePathList("3d"); *************** *** 962,973 **** orthoProjection->setMatrix(osg::Matrix::ortho2D(0,size.GetWidth(),0,size.GetHeight())); orthoProjection->addChild(hudObjects.get()); InitState(); InitLight(); ! CreateScene(); InitSceneView(); } --- 968,984 ---- orthoProjection->setMatrix(osg::Matrix::ortho2D(0,size.GetWidth(),0,size.GetHeight())); orthoProjection->addChild(hudObjects.get()); + std::cout << "Scenegraph init success" << std::endl; InitState(); + std::cout << "InitState success" << std::endl; InitLight(); ! std::cout << "InitLight success" << std::endl; ! CreateScene(); + std::cout << "CreateScene success" << std::endl; InitSceneView(); + std::cout << "InitSceneView success" << std::endl; } Index: tcCreditView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcCreditView.cpp,v retrieving revision 1.6.2.2 retrieving revision 1.6.2.3 diff -C2 -d -r1.6.2.2 -r1.6.2.3 *** tcCreditView.cpp 19 Jan 2004 21:20:58 -0000 1.6.2.2 --- tcCreditView.cpp 25 Jan 2004 17:36:29 -0000 1.6.2.3 *************** *** 36,44 **** using namespace Gdiplus; ! void tcCreditView::AddCredit(tcString& s, float afTrailSpace, bool abBold) { if (mnCredits >= MAX_CREDITS) {return;} maCredit[mnCredits].mfTrailSpace = afTrailSpace; ! maCredit[mnCredits].mbBold = abBold; maCredit[mnCredits++].mzCaption = s; } --- 36,44 ---- using namespace Gdiplus; ! void tcCreditView::AddCredit(tcString& s, float afTrailSpace, int effect) { if (mnCredits >= MAX_CREDITS) {return;} maCredit[mnCredits].mfTrailSpace = afTrailSpace; ! maCredit[mnCredits].mnEffect = effect; maCredit[mnCredits++].mzCaption = s; } *************** *** 49,148 **** s = "------- C R E D I T S -------"; ! AddCredit(s, 40.0f, true); s = "Dewitt \"Cole\" Colclough"; ! AddCredit(s, 25.0f, true); s = "Project manager and lead developer\n"; ! AddCredit(s, 80.0f, false); s = "Marcelo C\341ceres (op4_delta)"; ! AddCredit(s, 25.0f, true); s = "3D art"; ! AddCredit(s, 60.0f, false); s = "Marco Belli"; ! AddCredit(s, 25.0f, true); s = "Developer - Sound, Linux port"; ! AddCredit(s, 60.0f, false); s = "Jason Morris"; ! AddCredit(s, 25.0f, true); s = "Developer"; ! AddCredit(s, 60.0f, false); - // s = "Testers\n...\n"; - // AddCredit(s, 60.0f, false); s = "Some 2D art courtesy of U.S. Navy, www.news.navy.mil/view_galleries.asp \n"; ! AddCredit(s, 60.0f, false); s = "3D sky code\n"; ! AddCredit(s, 25.0f, false); s = "Combat Simulator Project, csp.sourceforge.net \n"; ! AddCredit(s, 60.0f, true); s = "Map data based on GTOPO30 archive distributed by the \nLand Processes Distributed Active Archive Center (LP DAAC)\nlpdaac.usgs.gov \n"; ! AddCredit(s, 100.0f, false); s = "Thanks to the developers of these software libraries:\n"; ! AddCredit(s, 30.0f, false); s = "wxWindows\n"; ! AddCredit(s, 20.0f, false); s = "www.wxwindows.org\n"; ! AddCredit(s, 30.0f, false); s = "Python 2.3\n"; ! AddCredit(s, 20.0f, false); s = "www.python.org\n"; ! AddCredit(s, 30.0f, false); s = "Boost Python\n"; ! AddCredit(s, 20.0f, false); s = "www.boost.org\n"; ! AddCredit(s, 30.0f, false); s = "OpenSceneGraph\n"; ! AddCredit(s, 20.0f, false); s = "openscenegraph.sourceforge.net\n"; ! AddCredit(s, 60.0f, false); s = "Special thanks to:"; ! AddCredit(s, 30.0f, false); s = "Harpoon HQ, www.harpoonhq.com\n"; ! AddCredit(s, 30.0f, false); s = "Mille-Sabords, www.mille-sabords.com\n"; ! AddCredit(s, 30.0f, false); s = "Seawolves Surface Division, www.seawolves.org/fc\n"; ! AddCredit(s, 30.0f, false); s = "and\n"; ! AddCredit(s, 30.0f, false); s = "To those who offered advice through e-mail and \nthe global_conflict discussion group"; ! AddCredit(s, 120.0f, false); s = "GLOBAL CONFLICT BLUE"; ! AddCredit(s, 20.0f, false); s = "An open source project"; ! AddCredit(s, 20.0f, false); s = "www.gcblue.com"; ! AddCredit(s, 20.0f, false); s = "Copyright (C) 2002-2004, All rights reserved.\n"; ! AddCredit(s, 60.0f, false); --- 49,160 ---- s = "------- C R E D I T S -------"; ! AddCredit(s, 40.0f, 1); s = "Dewitt \"Cole\" Colclough"; ! AddCredit(s, 25.0f, 1); s = "Project manager and lead developer\n"; ! AddCredit(s, 80.0f, 0); s = "Marcelo C\341ceres (op4_delta)"; ! AddCredit(s, 25.0f, 1); s = "3D art"; ! AddCredit(s, 60.0f, 0); s = "Marco Belli"; ! AddCredit(s, 25.0f, 1); s = "Developer - Sound, Linux port"; ! AddCredit(s, 60.0f, 0); s = "Jason Morris"; ! AddCredit(s, 25.0f, 1); s = "Developer"; ! AddCredit(s, 60.0f, 0); ! ! s = "Test\n"; ! AddCredit(s, 23.0f, 1); ! ! AddCredit(tcString("Marco Belli"), 12.0f, 2); ! AddCredit(tcString("Marcelo C\341ceres"), 12.0f, 2); ! AddCredit(tcString("Rob Carpenter"), 12.0f, 2); ! AddCredit(tcString("Paul Daly"), 12.0f, 2); ! AddCredit(tcString("Dust"), 12.0f, 2); ! AddCredit(tcString("Jason Morris"), 12.0f, 2); ! AddCredit(tcString("Andrew Platfoot"), 12.0f, 2); ! AddCredit(tcString("Justin Priestman"), 12.0f, 2); ! AddCredit(tcString("Gregg Smith"), 38.0f+12.0f, 2); ! s = "Some 2D art courtesy of U.S. Navy, www.news.navy.mil/view_galleries.asp \n"; ! AddCredit(s, 60.0f, 0); s = "3D sky code\n"; ! AddCredit(s, 25.0f, 0); s = "Combat Simulator Project, csp.sourceforge.net \n"; ! AddCredit(s, 60.0f, 1); s = "Map data based on GTOPO30 archive distributed by the \nLand Processes Distributed Active Archive Center (LP DAAC)\nlpdaac.usgs.gov \n"; ! AddCredit(s, 100.0f, 0); s = "Thanks to the developers of these software libraries:\n"; ! AddCredit(s, 30.0f, 0); s = "wxWindows\n"; ! AddCredit(s, 20.0f, 0); s = "www.wxwindows.org\n"; ! AddCredit(s, 30.0f, 0); s = "Python 2.3\n"; ! AddCredit(s, 20.0f, 0); s = "www.python.org\n"; ! AddCredit(s, 30.0f, 0); s = "Boost Python\n"; ! AddCredit(s, 20.0f, 0); s = "www.boost.org\n"; ! AddCredit(s, 30.0f, 0); s = "OpenSceneGraph\n"; ! AddCredit(s, 20.0f, 0); s = "openscenegraph.sourceforge.net\n"; ! AddCredit(s, 60.0f, 0); s = "Special thanks to:"; ! AddCredit(s, 30.0f, 0); s = "Harpoon HQ, www.harpoonhq.com\n"; ! AddCredit(s, 30.0f, 0); s = "Mille-Sabords, www.mille-sabords.com\n"; ! AddCredit(s, 30.0f, 0); s = "Seawolves Surface Division, www.seawolves.org/fc\n"; ! AddCredit(s, 30.0f, 0); s = "and\n"; ! AddCredit(s, 30.0f, 0); s = "To those who offered advice through e-mail and \nthe global_conflict discussion group"; ! AddCredit(s, 120.0f, 0); s = "GLOBAL CONFLICT BLUE"; ! AddCredit(s, 20.0f, 0); s = "An open source project"; ! AddCredit(s, 20.0f, 0); s = "www.gcblue.com"; ! AddCredit(s, 20.0f, 0); s = "Copyright (C) 2002-2004, All rights reserved.\n"; ! AddCredit(s, 60.0f, 0); *************** *** 158,161 **** --- 170,179 ---- return false; } + mpFontSmall = new Font(&ff,12,FontStyleRegular,UnitPixel); + if (mpFontSmall == NULL) { + WTL("tcCreditView - mpFontSmall creation failed\n"); + return false; + } + mpBrush = new SolidBrush(Color(0xFEFFFFFF)); // color is ARGB if (mpBrush == NULL) { *************** *** 194,198 **** ! float fY = (float)mnHeight - 0.5f*(float)nDeltaTime; float fX = 0.5f*(float)mnWidth; --- 212,216 ---- ! float fY = (float)mnHeight - 2*0.5f*(float)nDeltaTime; float fX = 0.5f*(float)mnWidth; *************** *** 244,248 **** } else if (fY <= (float)mnHeight) { ! if (n > nFlashId) { nFlashId = n; bFlash = true; --- 262,266 ---- } else if (fY <= (float)mnHeight) { ! if ((n > nFlashId)&&(maCredit[n].mnEffect == 1)) { nFlashId = n; bFlash = true; *************** *** 251,255 **** bFlash = false; } ! Font *pFont = (maCredit[n].mbBold) ? mpFontLarge : mpFont; mpBrush->SetColor(Color(nColorFade)); // font color --- 269,282 ---- bFlash = false; } ! Font *pFont = mpFont; ! if (maCredit[n].mnEffect == 1) ! { ! pFont = mpFontLarge; ! } ! else if (maCredit[n].mnEffect == 2) ! { ! pFont = mpFontSmall; ! } ! mpBrush->SetColor(Color(nColorFade)); // font color *************** *** 283,287 **** } ! void tcCreditView::Rewind() { mnStartTime = mcTime.snCount_30Hz; mbDrawRewind = true; --- 310,315 ---- } ! void tcCreditView::Rewind() ! { mnStartTime = mcTime.snCount_30Hz; mbDrawRewind = true; *************** *** 299,302 **** --- 327,332 ---- { mpFont = NULL; + mpFontLarge = NULL; + mpFontSmall = NULL; mpBrush = NULL; mpSound = NULL; *************** *** 308,311 **** --- 338,342 ---- if (mpFont != NULL) {delete mpFont;} if (mpFontLarge != NULL) {delete mpFontLarge;} + if (mpFontSmall != NULL) {delete mpFontSmall;} if (mpBrush != NULL) {delete mpBrush;} if (mpPen != NULL) {delete mpPen;} Index: tcMapView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcMapView.cpp,v retrieving revision 1.15.2.1 retrieving revision 1.15.2.2 diff -C2 -d -r1.15.2.1 -r1.15.2.2 *** tcMapView.cpp 19 Jan 2004 21:20:58 -0000 1.15.2.1 --- tcMapView.cpp 25 Jan 2004 17:36:30 -0000 1.15.2.2 *************** *** 1330,1337 **** dx = sinf(fDirection_rad)*dr; dy = cosf(fDirection_rad)*dr; ! mrectCurrentView.Offset(dx,dy); ! mrectViewBounds.ApplyBounds(mrectCurrentView); ! CalcViewParameters(); } --- 1330,1339 ---- dx = sinf(fDirection_rad)*dr; dy = cosf(fDirection_rad)*dr; + + tcPoint p; + p.x = mrectCurrentView.XCenter() + dx; + p.y = mrectCurrentView.YCenter() + dy; ! SetView(p, mrectCurrentView.Width()); } |
From: <ddc...@pr...> - 2004-01-25 17:37:50
|
Update of /cvsroot/gcblue/gcb_wx/src/graphics In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11285/src/graphics Modified Files: Tag: v0_5_0 tcwindow.cpp Log Message: Bug with arrow scroll causing bad symbol placement for initial map view Index: tcwindow.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/graphics/tcwindow.cpp,v retrieving revision 1.14.2.1 retrieving revision 1.14.2.2 diff -C2 -d -r1.14.2.1 -r1.14.2.2 *** tcwindow.cpp 19 Jan 2004 21:20:58 -0000 1.14.2.1 --- tcwindow.cpp 25 Jan 2004 17:36:25 -0000 1.14.2.2 *************** *** 57,61 **** void tcWindow::OnShow(wxShowEvent& event) { ! fprintf(stdout, "Show event: [%s]\n",GetName()); return; } --- 57,61 ---- void tcWindow::OnShow(wxShowEvent& event) { ! // fprintf(stdout, "Show event: [%s]\n",GetName()); return; } |
From: <ddc...@pr...> - 2004-01-25 17:37:50
|
Update of /cvsroot/gcblue/gcb_wx/res In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11285/res Modified Files: Tag: v0_5_0 GCblue.rc Log Message: Bug with arrow scroll causing bad symbol placement for initial map view Index: GCblue.rc =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/res/GCblue.rc,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** GCblue.rc 17 Dec 2003 00:06:04 -0000 1.2 --- GCblue.rc 25 Jan 2004 17:36:22 -0000 1.2.2.1 *************** *** 120,133 **** BLOCK "040904b0" BEGIN ! VALUE "Comments", "Experimental sim build, version X5" VALUE "CompanyName", "Global Conflict Blue Open Source Development" ! VALUE "FileDescription", "Global Conflict Blue Application" VALUE "FileVersion", "0, 0, 0, 7" VALUE "InternalName", "GlobalConflict" ! VALUE "LegalCopyright", "Copyright (C) 2002-2003, Dewitt Colclough and the Global Conflict Blue Team, All Rights Reserved." VALUE "OriginalFilename", "GCblue" VALUE "ProductName", "GlobalConflict Blue" VALUE "ProductVersion", "0, 0, 0, 7" ! VALUE "SpecialBuild", "X5" END END --- 120,133 ---- BLOCK "040904b0" BEGIN ! VALUE "Comments", "Pre-alpha test build, version 0.5.1" VALUE "CompanyName", "Global Conflict Blue Open Source Development" ! VALUE "FileDescription", "Global Conflict Blue Application, version 0.5.1" VALUE "FileVersion", "0, 0, 0, 7" VALUE "InternalName", "GlobalConflict" ! VALUE "LegalCopyright", "Copyright (C) 2002-2004, Dewitt Colclough and the Global Conflict Blue Team, All Rights Reserved." VALUE "OriginalFilename", "GCblue" VALUE "ProductName", "GlobalConflict Blue" VALUE "ProductVersion", "0, 0, 0, 7" ! VALUE "SpecialBuild", "0.5.1" END END |
From: <ddc...@pr...> - 2004-01-25 17:37:37
|
Update of /cvsroot/gcblue/gcb_wx/include/sim In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11285/include/sim Modified Files: Tag: v0_5_0 tcCreditView.h Log Message: Bug with arrow scroll causing bad symbol placement for initial map view Index: tcCreditView.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tcCreditView.h,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** tcCreditView.h 30 Nov 2003 17:23:52 -0000 1.3 --- tcCreditView.h 25 Jan 2004 17:36:09 -0000 1.3.2.1 *************** *** 39,46 **** tcString mzCaption; float mfTrailSpace; ! bool mbBold; }; public: ! void AddCredit(tcString& s, float afTrailSpace, bool abBold); void AttachSound(tcSound *apSound) {mpSound=apSound;} bool Init(void); --- 39,46 ---- tcString mzCaption; float mfTrailSpace; ! int mnEffect; ///< 0 - standard text, 1 - bold, 2 - small }; public: ! void AddCredit(tcString& s, float afTrailSpace, int effect); void AttachSound(tcSound *apSound) {mpSound=apSound;} bool Init(void); *************** *** 53,60 **** virtual ~tcCreditView(void); private: ! enum {MAX_CREDITS = 64}; Gdiplus::SolidBrush *mpBrush; Gdiplus::Font *mpFont; Gdiplus::Font *mpFontLarge; Gdiplus::Pen *mpPen; tcTime mcTime; --- 53,61 ---- virtual ~tcCreditView(void); private: ! enum {MAX_CREDITS = 96}; Gdiplus::SolidBrush *mpBrush; Gdiplus::Font *mpFont; Gdiplus::Font *mpFontLarge; + Gdiplus::Font *mpFontSmall; Gdiplus::Pen *mpPen; tcTime mcTime; |
From: <ddc...@us...> - 2004-01-20 03:03:14
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1:/tmp/cvs-serv12634/src/sim Modified Files: Tag: v0_5_0 tc3DViewer.cpp Log Message: Index: tc3DViewer.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tc3DViewer.cpp,v retrieving revision 1.24.2.1 retrieving revision 1.24.2.2 diff -C2 -d -r1.24.2.1 -r1.24.2.2 *** tc3DViewer.cpp 19 Jan 2004 21:20:58 -0000 1.24.2.1 --- tc3DViewer.cpp 20 Jan 2004 03:03:10 -0000 1.24.2.2 *************** *** 620,625 **** * distance exceeds shiftDistance, then set the origin * to current camera position. */ ! void tc3DViewer::UpdateOrigin() { float camx = cameraPosition.x(); --- 620,626 ---- * distance exceeds shiftDistance, then set the origin * to current camera position. + * @return true if origin updated */ ! bool tc3DViewer::UpdateOrigin() { float camx = cameraPosition.x(); *************** *** 627,631 **** float camRadius = sqrtf(camx*camx + camy*camy); ! if (camRadius >= shiftDistance) { double newLon = XToLon(cameraPosition.x()); --- 628,632 ---- float camRadius = sqrtf(camx*camx + camy*camy); ! if ((camRadius >= shiftDistance)&&(isActive)) { double newLon = XToLon(cameraPosition.x()); *************** *** 636,640 **** --- 637,643 ---- cameraPosition.y() = 0; SetOrigin(newLon, newLat); + return true; } + return false; } *************** *** 840,845 **** if (!simState) return; - UpdateModels(); - if (lastHook != hookID) { --- 843,846 ---- *************** *** 856,861 **** } ! UpdateOrigin(); UpdateCamera(); UpdateSky(dateZulu); --- 857,869 ---- } ! UpdateModels(); UpdateCamera(); + + if (UpdateOrigin()) + { + UpdateModels(); + UpdateCamera(); + } + UpdateSky(dateZulu); |
From: <ddc...@us...> - 2004-01-20 03:03:14
|
Update of /cvsroot/gcblue/gcb_wx/include/sim In directory sc8-pr-cvs1:/tmp/cvs-serv12634/include/sim Modified Files: Tag: v0_5_0 tc3DViewer.h Log Message: Index: tc3DViewer.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tc3DViewer.h,v retrieving revision 1.18.2.1 retrieving revision 1.18.2.2 diff -C2 -d -r1.18.2.1 -r1.18.2.2 *** tc3DViewer.h 19 Jan 2004 21:20:57 -0000 1.18.2.1 --- tc3DViewer.h 20 Jan 2004 03:03:10 -0000 1.18.2.2 *************** *** 178,182 **** void UpdateCamera(); void UpdateChildModels(tcGameObject *gameObj); ! void UpdateOrigin(); void UpdateModels(); void UpdateSky(DateZulu& dateZulu); --- 178,182 ---- void UpdateCamera(); void UpdateChildModels(tcGameObject *gameObj); ! bool UpdateOrigin(); void UpdateModels(); void UpdateSky(DateZulu& dateZulu); |
From: <ddc...@us...> - 2004-01-20 03:02:57
|
Update of /cvsroot/gcblue/gcb_wx/src/sim In directory sc8-pr-cvs1:/tmp/cvs-serv12457/src/sim Modified Files: Game.cpp tc3DViewer.cpp tcMapView.cpp tcSimState.cpp Log Message: Index: Game.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/Game.cpp,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -d -r1.54 -r1.55 *** Game.cpp 18 Jan 2004 18:42:41 -0000 1.54 --- Game.cpp 20 Jan 2004 03:02:53 -0000 1.55 *************** *** 37,41 **** #include "tcCustomControl.h" #include "commandlist.h" // for custom command queue handler - #include "tcrendersurface.h" #include "tcHookInfo.h" #include "tcOOBView.h" --- 37,40 ---- *************** *** 106,109 **** --- 105,111 ---- Show(FALSE); + glCanvas = new wxGLCanvas(this, -1, wxPoint(0,0), size, 0, "GLCanvas", 0, wxNullPalette); + glCanvas->SetBackgroundColour(*wxBLACK); + pythonInterface = new tcSimPythonInterface(); goalTracker = mcSimState.GetGoalTracker(); *************** *** 333,337 **** /*** Init edit control ***/ ! editControl = new tcEditControl(this, wxPoint(200,200),wxSize(100,50)); mcDatabase.LoadDBCSV(); --- 335,339 ---- /*** Init edit control ***/ ! editControl = new tcEditControl(glCanvas, wxPoint(200,200),wxSize(100,50)); mcDatabase.LoadDBCSV(); *************** *** 375,378 **** --- 377,382 ---- meGameMode = GM_START; meScreenMode = START; + + wxWindow::Show(TRUE); } catch(std::string s) *************** *** 392,399 **** void tcGame::Initialize3DViewer() { smallViewerPosition = wxPoint(mnWidth - 380, 0); smallViewerSize = wxSize(380, 200); ! viewer = new tc3DViewer(this, smallViewerPosition, smallViewerSize); viewer->SetActive(false); --- 396,405 ---- void tcGame::Initialize3DViewer() { + wxASSERT(glCanvas); + smallViewerPosition = wxPoint(mnWidth - 380, 0); smallViewerSize = wxSize(380, 200); ! viewer = new tc3DViewer(glCanvas, smallViewerPosition, smallViewerSize); viewer->SetActive(false); *************** *** 428,432 **** void tcGame::InitializeStartView() { ! startView = new tcStartView(this, wxPoint(0,0), frameSize); startView->SetYMirror(mnHeight); --- 434,440 ---- void tcGame::InitializeStartView() { ! wxASSERT(glCanvas); ! ! startView = new tcStartView(glCanvas, wxPoint(0,0), frameSize); startView->SetYMirror(mnHeight); *************** *** 455,459 **** void tcGame::InitializeOptionsView() { ! optionsView = new tcOptionsView(this, wxPoint(0,0), frameSize); optionsView->SetYMirror(mnHeight); --- 463,467 ---- void tcGame::InitializeOptionsView() { ! optionsView = new tcOptionsView(glCanvas, wxPoint(0,0), frameSize); optionsView->SetYMirror(mnHeight); *************** *** 482,486 **** { int leftConsoleHeight = mnHeight-mnBottomMargin; ! briefingConsoleLeft = new tcButtonConsole(this, wxPoint(0,0), wxSize(mnBriefingWidth,leftConsoleHeight)); if (!briefingConsoleLeft) --- 490,494 ---- { int leftConsoleHeight = mnHeight-mnBottomMargin; ! briefingConsoleLeft = new tcButtonConsole(glCanvas, wxPoint(0,0), wxSize(mnBriefingWidth,leftConsoleHeight)); if (!briefingConsoleLeft) *************** *** 507,511 **** briefingConsoleLeft->AddButton(wxRect(10,leftConsoleHeight-20,50,14), ID_SKIPBRIEFING, " SKIP"); ! briefingConsoleBottom = new tcSoundConsole(this, wxPoint(0,mnHeight-mnBottomMargin), wxSize(mnWidth,mnBottomMargin)); if (!briefingConsoleBottom) --- 515,519 ---- briefingConsoleLeft->AddButton(wxRect(10,leftConsoleHeight-20,50,14), ID_SKIPBRIEFING, " SKIP"); ! briefingConsoleBottom = new tcSoundConsole(glCanvas, wxPoint(0,mnHeight-mnBottomMargin), wxSize(mnWidth,mnBottomMargin)); if (!briefingConsoleBottom) *************** *** 536,540 **** void tcGame::InitializeCreditView() { ! creditView = new tcCreditView(this, wxPoint(0,0), frameSize); creditView->SetYMirror(mnHeight); --- 544,548 ---- void tcGame::InitializeCreditView() { ! creditView = new tcCreditView(glCanvas, wxPoint(0,0), frameSize); creditView->SetYMirror(mnHeight); *************** *** 575,579 **** void tcGame::InitializeScenarioSelectView() { ! scenarioSelectView = new tcScenarioSelectView(this, wxPoint(0,0), frameSize); scenarioSelectView->SetYMirror(mnHeight); --- 583,587 ---- void tcGame::InitializeScenarioSelectView() { ! scenarioSelectView = new tcScenarioSelectView(glCanvas, wxPoint(0,0), frameSize); scenarioSelectView->SetYMirror(mnHeight); *************** *** 602,606 **** mrectMap.right = mnWidth; //GetSystemMetrics(SM_CXFULLSCREEN); mrectMap.bottom = mnHeight - 200; //GetSystemMetrics(SM_CYFULLSCREEN); ! tacticalMap = new tcTacticalMapView(this, wxPoint(mrectMap.left,mrectMap.top), wxSize(mrectMap.right-mrectMap.left, mrectMap.bottom-mrectMap.top)); tacticalMapSize = TM_LARGE; --- 610,614 ---- mrectMap.right = mnWidth; //GetSystemMetrics(SM_CXFULLSCREEN); mrectMap.bottom = mnHeight - 200; //GetSystemMetrics(SM_CYFULLSCREEN); ! tacticalMap = new tcTacticalMapView(glCanvas, wxPoint(mrectMap.left,mrectMap.top), wxSize(mrectMap.right-mrectMap.left, mrectMap.bottom-mrectMap.top)); tacticalMapSize = TM_LARGE; *************** *** 635,639 **** mrectLowerLeft.bottom = mnHeight; ! infoConsole = new tcSoundConsole(this, wxPoint(mrectLowerLeft.left,mrectLowerLeft.top), wxSize(200,200)); if (!infoConsole) --- 643,647 ---- mrectLowerLeft.bottom = mnHeight; ! infoConsole = new tcSoundConsole(glCanvas, wxPoint(mrectLowerLeft.left,mrectLowerLeft.top), wxSize(200,200)); if (!infoConsole) *************** *** 660,664 **** /* ** hookInfo init * **/ ! hookInfo = new tcHookInfo(this, wxPoint(mrectLowerLeft.right,mrectLowerLeft.top), wxSize(200,200)); --- 668,672 ---- /* ** hookInfo init * **/ ! hookInfo = new tcHookInfo(glCanvas, wxPoint(mrectLowerLeft.right,mrectLowerLeft.top), wxSize(200,200)); *************** *** 684,688 **** // objectControl init ! objectControl = new tcObjectControl(this, wxPoint(mrectLowerLeft.right+200,mrectLowerLeft.top), wxSize(mnWidth-400,200)); if (!objectControl) --- 692,696 ---- // objectControl init ! objectControl = new tcObjectControl(glCanvas, wxPoint(mrectLowerLeft.right+200,mrectLowerLeft.top), wxSize(mnWidth-400,200)); if (!objectControl) *************** *** 712,716 **** mrectOOB.right = 200; mrectOOB.bottom = mnHeight-200; ! oobView = new tcOOBView(this, wxPoint(mrectOOB.left,mrectOOB.top), wxSize(mrectOOB.right-mrectOOB.left, mrectOOB.bottom-mrectOOB.top)); if (!oobView) --- 720,724 ---- mrectOOB.right = 200; mrectOOB.bottom = mnHeight-200; ! oobView = new tcOOBView(glCanvas, wxPoint(mrectOOB.left,mrectOOB.top), wxSize(mrectOOB.right-mrectOOB.left, mrectOOB.bottom-mrectOOB.top)); if (!oobView) *************** *** 741,745 **** rpopup.bottom = 700; ! popupControl = new tcPopupControl(this, wxPoint(rpopup.left, rpopup.top), wxSize(rpopup.right - rpopup.left, rpopup.bottom - rpopup.top)); if (!popupControl) --- 749,753 ---- rpopup.bottom = 700; ! popupControl = new tcPopupControl(glCanvas, wxPoint(rpopup.left, rpopup.top), wxSize(rpopup.right - rpopup.left, rpopup.bottom - rpopup.top)); if (!popupControl) *************** *** 760,763 **** --- 768,772 ---- popupControl->SetActive(false); popupControl->SetBlend(true); + popupControl->Show(true); // to prevent artifact when displaying for first time popupControl->SetSkipCount(0); popupControl->Raise(); // bring popup to top of windows hierarchy to receive mouse events *************** *** 936,940 **** } ! void tcGame::SetTacticalMapSize(teTacticalMapSize mapSize) { if (mapSize == tacticalMapSize) return; --- 945,949 ---- } ! void tcGame::SetTacticalMapSize(tcGame::teTacticalMapSize mapSize) { if (mapSize == tacticalMapSize) return; Index: tc3DViewer.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tc3DViewer.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** tc3DViewer.cpp 18 Jan 2004 18:42:41 -0000 1.27 --- tc3DViewer.cpp 20 Jan 2004 03:02:53 -0000 1.28 *************** *** 28,38 **** #endif #include "tc3DViewer.h" - #include "tcrendersurface.h" #include "math_constants.h" ! #include <Producer/Camera> ! #include <Producer/CameraGroup> ! #include <Producer/CameraConfig> ! #include <Producer/Math> #include <osg/CullStack> #include <osg/Depth> --- 28,36 ---- #endif + #include "wx/glcanvas.h" + #include "tc3DViewer.h" #include "math_constants.h" ! #include <osg/BlendFunc> #include <osg/CullStack> #include <osg/Depth> *************** *** 43,49 **** #include <osgDB/Registry> #include <osgDB/ReadFile> - #include <osgProducer/OsgCameraGroup> #include <osg/PositionAttitudeTransform> #include <osgUtil/CullVisitor> #include <osgUtil/UpdateVisitor> #include <osgText/Font> --- 41,47 ---- #include <osgDB/Registry> #include <osgDB/ReadFile> #include <osg/PositionAttitudeTransform> #include <osgUtil/CullVisitor> + #include <osgUtil/SceneView> #include <osgUtil/UpdateVisitor> #include <osgText/Font> *************** *** 168,172 **** void tc3DViewer::OnRButtonDown(wxMouseEvent& event) { ! event.Skip(); } --- 166,170 ---- void tc3DViewer::OnRButtonDown(wxMouseEvent& event) { ! // event.Skip(); // stop event to suppress popup } *************** *** 182,188 **** int parentHeight = parentSize.GetHeight(); int correctedY = parentHeight - (pos.y + size.GetHeight()); ! camera->setProjectionRectangle(pos.x,correctedY,size.GetWidth(),size.GetHeight()); mnWidth = size.GetWidth(); mnHeight = size.GetHeight(); // update orthographic projection for HUD objects orthoProjection->setMatrix(osg::Matrix::ortho2D(0,(double)size.GetWidth(),0,(double)size.GetHeight())); --- 180,190 ---- int parentHeight = parentSize.GetHeight(); int correctedY = parentHeight - (pos.y + size.GetHeight()); ! sceneView->setViewport(pos.x,correctedY,size.GetWidth(),size.GetHeight()); ! mnWidth = size.GetWidth(); mnHeight = size.GetHeight(); + + UpdateProjectionMatrix(size); + // update orthographic projection for HUD objects orthoProjection->setMatrix(osg::Matrix::ortho2D(0,(double)size.GetWidth(),0,(double)size.GetHeight())); *************** *** 359,369 **** foggedObjects->setStateSet(fogState); ! worldObjects = new osg::Group; terrainManager = new tc3DTerrain(); osg::ref_ptr<osg::Node> terrainNode = terrainManager->GetTerrainNode().get(); osg::StateSet *terrainState = terrainNode->getOrCreateStateSet(); terrainState->setMode(GL_LIGHTING, osg::StateAttribute::ON); skyTransform = new osg::PositionAttitudeTransform; --- 361,392 ---- foggedObjects->setStateSet(fogState); + { + worldObjects = new osg::Group; ! osg::StateSet *objectState = worldObjects->getOrCreateStateSet(); ! osg::BlendFunc *blendFunction = new osg::BlendFunc; ! blendFunction->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA); ! objectState->setAttributeAndModes(blendFunction, osg::StateAttribute::ON); ! ! ! // osg::Depth* depth = new osg::Depth(osg::Depth::LESS, zmin, zmax); ! // objectState->setAttributeAndModes(depth, osg::StateAttribute::OFF ); ! } terrainManager = new tc3DTerrain(); osg::ref_ptr<osg::Node> terrainNode = terrainManager->GetTerrainNode().get(); + osg::StateSet *terrainState = terrainNode->getOrCreateStateSet(); terrainState->setMode(GL_LIGHTING, osg::StateAttribute::ON); + terrainState->setMode(GL_CULL_FACE, StateAttribute::OFF); + osg::Depth* depth = new osg::Depth; + depth->setFunction(osg::Depth::LESS); + depth->setRange(0, 1); + depth->setWriteMask(true); + terrainState->setAttributeAndModes(depth,StateAttribute::ON); + // terrainState->setRenderBinDetails(0, "RenderBin"); + + //osg::Depth* tdepth = new osg::Depth(osg::Depth::LESS, 2.0, 200000.0); + //terrainState->setAttributeAndModes(tdepth, osg::StateAttribute::ON ); skyTransform = new osg::PositionAttitudeTransform; *************** *** 386,390 **** void tc3DViewer::CreateSky() { ! osg::StateSet* globalStateSet = camera_group->getGlobalStateSet(); wxASSERT(globalStateSet); --- 409,413 ---- void tc3DViewer::CreateSky() { ! osg::StateSet* globalStateSet = sceneView->getGlobalStateSet(); wxASSERT(globalStateSet); *************** *** 448,451 **** --- 471,476 ---- void tc3DViewer::Frame() { + wxASSERT(sceneView.valid()); + if (isFrozen && isActive) { *************** *** 453,463 **** isFrozen = false; } ! if (isActive && camera_group.valid()) { ! camera_group->frame(); } else { ! if (render_surface.valid()) render_surface->swapBuffers(); } } --- 478,492 ---- isFrozen = false; } ! if (isActive && sceneView.valid()) { ! sceneView->update(); ! sceneView->cull(); ! sceneView->draw(); ! glFinish(); ! Swap(); } else { ! Swap(); } } *************** *** 509,513 **** if (!obj) return; ! Producer::Vec3 targetPosition; if (lookAtTarget || moveWithTarget) { --- 538,542 ---- if (!obj) return; ! osg::Vec3 targetPosition; if (lookAtTarget || moveWithTarget) { *************** *** 516,520 **** if (moveWithTarget) { ! Producer::Vec3 camOffset; if (usePolarOffset) { --- 545,549 ---- if (moveWithTarget) { ! osg::Vec3 camOffset; if (usePolarOffset) { *************** *** 522,526 **** float camy = cosf(cameraEl)*cosf(cameraAz); float camz = sinf(cameraEl); ! camOffset = Producer::Vec3(camx,camy,camz)*cameraRange; } else --- 551,555 ---- float camy = cosf(cameraEl)*cosf(cameraAz); float camz = sinf(cameraEl); ! camOffset = osg::Vec3(camx,camy,camz)*cameraRange; } else *************** *** 528,532 **** camOffset = cameraPositionOffset; } ! Producer::Matrix m = Producer::Matrix::translate(camOffset); cameraPosition = targetPosition*m; } --- 557,561 ---- camOffset = cameraPositionOffset; } ! osg::Matrix m = osg::Matrix::translate(camOffset); cameraPosition = targetPosition*m; } *************** *** 545,554 **** float camy = cosf(cameraLookEl)*cosf(cameraLookAz); float camz = sinf(cameraLookEl); ! Producer::Vec3 lookOffset = Producer::Vec3(camx,camy,camz); ! Producer::Matrix m = Producer::Matrix::translate(lookOffset); cameraTarget = cameraPosition*m; } ! ! camera->setViewByLookat(cameraPosition, cameraTarget, Producer::Vec3(0,0,1)); // update skyTransform based on camera position --- 574,582 ---- float camy = cosf(cameraLookEl)*cosf(cameraLookAz); float camz = sinf(cameraLookEl); ! osg::Vec3 lookOffset(camx,camy,camz); ! osg::Matrix m = osg::Matrix::translate(lookOffset); cameraTarget = cameraPosition*m; } ! sceneView->setViewMatrixAsLookAt(cameraPosition, cameraTarget, osg::Vec3(0,0,1)); // update skyTransform based on camera position *************** *** 612,617 **** * distance exceeds shiftDistance, then set the origin * to current camera position. */ ! void tc3DViewer::UpdateOrigin() { float camx = cameraPosition.x(); --- 640,646 ---- * distance exceeds shiftDistance, then set the origin * to current camera position. + * @return true if updated */ ! bool tc3DViewer::UpdateOrigin() { float camx = cameraPosition.x(); *************** *** 619,623 **** float camRadius = sqrtf(camx*camx + camy*camy); ! if (camRadius >= shiftDistance) { double newLon = XToLon(cameraPosition.x()); --- 648,652 ---- float camRadius = sqrtf(camx*camx + camy*camy); ! if ((camRadius >= shiftDistance)&&(isActive)) { double newLon = XToLon(cameraPosition.x()); *************** *** 628,632 **** --- 657,663 ---- cameraPosition.y() = 0; SetOrigin(newLon, newLat); + return true; } + return false; } *************** *** 640,649 **** * @return camera position in world coordinates. */ ! Producer::Vec3 tc3DViewer::GetCameraPosition() { float x = LonToX(cameraLongitude); float y = LatToY(cameraLatitude); float z = cameraAltitude; ! return Producer::Vec3(x,y,z); } --- 671,680 ---- * @return camera position in world coordinates. */ ! osg::Vec3 tc3DViewer::GetCameraPosition() { float x = LonToX(cameraLongitude); float y = LatToY(cameraLatitude); float z = cameraAltitude; ! return osg::Vec3(x,y,z); } *************** *** 651,660 **** * @return object position in world coordinates. */ ! Producer::Vec3 tc3DViewer::GetObjectPosition(tcGameObject *obj) { float x = LonToX(obj->mcKin.mfLon_rad); float y = LatToY(obj->mcKin.mfLat_rad); float z = obj->mcKin.mfAlt_m; ! return Producer::Vec3(x,y,z); } --- 682,691 ---- * @return object position in world coordinates. */ ! osg::Vec3 tc3DViewer::GetObjectPosition(tcGameObject *obj) { float x = LonToX(obj->mcKin.mfLon_rad); float y = LatToY(obj->mcKin.mfLat_rad); float z = obj->mcKin.mfAlt_m; ! return osg::Vec3(x,y,z); } *************** *** 678,716 **** } ! /** ! * This didn't accomplish anything useful. I tried to use ! * this to automatically undo the OpenGL state changes applied ! * by tcGraphicsEngine to do the 2D drawing. ! */ ! void tc3DViewer::DirtyAll() { - osgProducer::OsgCameraGroup::SceneHandlerList& shvec = camera_group->getSceneHandlerList(); - Producer::ref_ptr<osgProducer::OsgSceneHandler> sh = shvec.at(0); - osgUtil::SceneView* sv = sh->getSceneView(); - sv->getState()->dirtyAllModes(); - sv->getState()->dirtyAllAttributes(); - } ! void tc3DViewer::InitSceneView() ! { ! osgProducer::OsgCameraGroup::SceneHandlerList& shvec = camera_group->getSceneHandlerList(); ! if (shvec.size() != 1) ! { ! wxMessageBox("Bad scenehandlerlist in camera_group"); ! return; ! } ! Producer::ref_ptr<osgProducer::OsgSceneHandler> sh = shvec.at(0); ! osgUtil::SceneView* sv = sh->getSceneView(); ! sv->setDefaults(); ! // set up the clear mask. ! osgUtil::RenderStage *stage = sv->getRenderStage(); ! stage->setClearDepth(1e6); ! sv->setComputeNearFarMode(osgUtil::CullVisitor::DO_NOT_COMPUTE_NEAR_FAR); ! sv->setLightingMode(osgUtil::SceneView::NO_SCENEVIEW_LIGHT); ! //sv->setComputeNearFarMode(osgUtil::CullVisitor::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES); /* NO_CULLING = 0x0, --- 709,740 ---- } ! void tc3DViewer::InitSceneView(wxPoint pos, wxSize size) { ! sceneView = new osgUtil::SceneView(); ! wxASSERT(sceneView->getDisplaySettings()==NULL); ! displaySettings = new osg::DisplaySettings; ! // displaySettings->setRGB(true); ! //displaySettings->setDoubleBuffer(true); ! displaySettings->setDepthBuffer(true); ! //displaySettings->setMinimumNumAlphaBits(4); ! sceneView->setDisplaySettings(displaySettings.get()); ! sceneView->setDefaults(); ! wxWindow *parent = wxWindow::GetParent(); ! wxSize parentSize = parent->GetSize(); ! int parentHeight = parentSize.GetHeight(); ! int correctedY = parentHeight - (pos.y + size.GetHeight()); ! UpdateProjectionMatrix(size); ! ! sceneView->setViewport(pos.x,correctedY,size.GetWidth(),size.GetHeight()); ! sceneView->setComputeNearFarMode(osgUtil::CullVisitor::DO_NOT_COMPUTE_NEAR_FAR); ! sceneView->setLightingMode(osgUtil::SceneView::NO_SCENEVIEW_LIGHT); ! sceneView->setBackgroundColor(osg::Vec4(0, 0, 0, 1.0f)); ! ! //sceneView->setComputeNearFarMode(osgUtil::CullVisitor::COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES); /* NO_CULLING = 0x0, *************** *** 722,747 **** ENABLE_ALL_CULLING */ ! sv->setCullingMode( ! osg::CullStack::FAR_PLANE_CULLING | ! osg::CullStack::NEAR_PLANE_CULLING //osg::CullStack::VIEW_FRUSTUM_CULLING // osg::CullStack::SMALL_FEATURE_CULLING ); ! } void tc3DViewer::InitState() { ! // set the global state (taken from osgProducer::Viewer::setUpViewer ) ! osg::ref_ptr<osg::StateSet> globalStateSet = new osg::StateSet; ! camera_group->setGlobalStateSet(globalStateSet.get()); { ! #if 0 ! globalStateSet->setGlobalDefaults(); // enable depth testing by default. ! osg::Depth* depth = new osg::Depth(osg::Depth::LEQUAL, 8.0, 100000.0); globalStateSet->setAttributeAndModes(depth, osg::StateAttribute::ON ); ! globalStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON); #endif --- 746,790 ---- ENABLE_ALL_CULLING */ ! sceneView->setCullingMode( ! osg::CullStack::FAR_PLANE_CULLING ! | osg::CullStack::NEAR_PLANE_CULLING //osg::CullStack::VIEW_FRUSTUM_CULLING // osg::CullStack::SMALL_FEATURE_CULLING ); ! // set up the clear mask. ! osgUtil::RenderStage *stage = sceneView->getRenderStage(); ! stage->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); ! stage->setClearDepth(1.0f); ! stage->setClearColor(osg::Vec4(0,0,0,1.0f)); ! ! frameStamp = new osg::FrameStamp; ! frameStamp->setReferenceTime(gameTime); ! sceneView->setFrameStamp(frameStamp.get()); + updateVisitor = new osgUtil::UpdateVisitor(); + updateVisitor->setFrameStamp(frameStamp.get()); + sceneView->setUpdateVisitor(updateVisitor.get()); + } + /** + * set global state at root node + */ void tc3DViewer::InitState() { ! osg::StateSet * globalStateSet = sceneView->getGlobalStateSet(); ! if (!globalStateSet) { ! globalStateSet = new osg::StateSet; ! sceneView->setGlobalStateSet(globalStateSet); ! } ! { ! ! #if 1 ! //globalStateSet->setGlobalDefaults(); // enable depth testing by default. ! osg::Depth* depth = new osg::Depth(osg::Depth::LESS, 0, 1); globalStateSet->setAttributeAndModes(depth, osg::StateAttribute::ON ); ! //globalStateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON); #endif *************** *** 757,766 **** globalStateSet->setMode(GL_LIGHTING, osg::StateAttribute::ON); // set up an alphafunc by default to speed up blending operations. osg::AlphaFunc* alphafunc = new osg::AlphaFunc; alphafunc->setFunction(osg::AlphaFunc::GREATER,0.0f); globalStateSet->setAttributeAndModes(alphafunc, osg::StateAttribute::ON); - - rootnode->setStateSet(globalStateSet.get()); } } --- 800,814 ---- globalStateSet->setMode(GL_LIGHTING, osg::StateAttribute::ON); + /* + osg::BlendFunc *blendFunction = new osg::BlendFunc; + blendFunction->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA); + globalStateSet->setAttributeAndModes(blendFunction, osg::StateAttribute::ON); + globalStateSet->setMode(GL_CULL_FACE, StateAttribute::OFF); + */ + // set up an alphafunc by default to speed up blending operations. osg::AlphaFunc* alphafunc = new osg::AlphaFunc; alphafunc->setFunction(osg::AlphaFunc::GREATER,0.0f); globalStateSet->setAttributeAndModes(alphafunc, osg::StateAttribute::ON); } } *************** *** 785,789 **** textState->setMode(GL_LIGHTING, osg::StateAttribute::OFF); textState->setMode(GL_FOG, osg::StateAttribute::OFF); ! textGeode->setStateSet(textState); textGeode->addDrawable(viewerText.get()); --- 833,846 ---- textState->setMode(GL_LIGHTING, osg::StateAttribute::OFF); textState->setMode(GL_FOG, osg::StateAttribute::OFF); ! textState->setMode(GL_DEPTH, osg::StateAttribute::OFF); ! textState->setMode(GL_BLEND, osg::StateAttribute::OFF); ! ! /* ! osg::Depth* depth = new osg::Depth; ! depth->setFunction(osg::Depth::ALWAYS); ! depth->setRange(1.0, 1.0); ! depth->setWriteMask(false); ! textState->setAttributeAndModes(depth,StateAttribute::OFF); ! */ textGeode->addDrawable(viewerText.get()); *************** *** 796,799 **** --- 853,861 ---- } + void tc3DViewer::Swap() + { + glCanvas->SwapBuffers(); + } + void tc3DViewer::ToggleFog() { *************** *** 833,838 **** if (!simState) return; - UpdateModels(); - if (lastHook != hookID) { --- 895,898 ---- *************** *** 849,872 **** } ! UpdateOrigin(); UpdateCamera(); UpdateSky(dateZulu); ! camera_group->getFrameStamp()->setFrameNumber(camera_group->getFrameStamp()->getFrameNumber()+1); ! static double simtime = 0; ! camera_group->getFrameStamp()->setReferenceTime(simtime+=0.02); ! updateVisitor->setTraversalNumber(camera_group->getFrameStamp()->getFrameNumber()); ! // update the scene by traversing it with the the update visitor which will ! // call all node update callbacks and animations. ! camera_group->getSceneData()->accept(*updateVisitor); } ! tc3DViewer::tc3DViewer(wxWindow *parent, const wxPoint& pos, const wxSize& size, const wxString& name) : ! wxWindow(parent, -1, pos, size, wxTRANSPARENT_WINDOW, name), mnHeight(size.GetHeight()), mnWidth(size.GetWidth()) { SetBackgroundColour(*wxBLACK); Show(FALSE); --- 909,949 ---- } ! UpdateModels(); ! UpdateCamera(); + + if (UpdateOrigin()) + { + UpdateModels(); + UpdateCamera(); + } + + UpdateSky(dateZulu); ! frameStamp->setFrameNumber(frameStamp->getFrameNumber()+1); ! frameStamp->setReferenceTime(gameTime); ! updateVisitor->setTraversalNumber(frameStamp->getFrameNumber()); ! } ! ! /** ! * Updates sceneView projection matrix. Call once at initialization ! * and once after any window size change. ! */ ! void tc3DViewer::UpdateProjectionMatrix(const wxSize& windowSize) ! { ! wxASSERT(sceneView.valid()); + float aspectRatio = (float)windowSize.GetWidth() / (float)windowSize.GetHeight(); + sceneView->setProjectionMatrixAsPerspective(45.0, aspectRatio, zmin, zmax); } ! tc3DViewer::tc3DViewer(wxGLCanvas *parent, const wxPoint& pos, const wxSize& size, const wxString& name) : ! wxWindow(parent, -1, pos, size, wxTRANSPARENT_WINDOW | wxNO_FULL_REPAINT_ON_RESIZE, name), mnHeight(size.GetHeight()), mnWidth(size.GetWidth()) { + glCanvas = parent; SetBackgroundColour(*wxBLACK); Show(FALSE); *************** *** 878,881 **** --- 955,961 ---- latOrigin_rad = 0; lonOrigin_rad = 0; + zmin = 2.0f; + zmax = 131072.0f; + shiftDistance = 50000.0f; *************** *** 902,942 **** ObjectUpdater::AttachViewer(this); ! camera = new Producer::Camera(); ! ! // causes warning C4312: 'type cast' : conversion from 'WXWidget' to 'HWND' of greater size ! // but no known problems with this ! HWND hwnd = (HWND)parent->GetHandle(); // returns handle to this window ! ! render_surface = new tcRenderSurface(hwnd); // leaks memory! ! render_surface.get()->ref(); // prevents heap exception in debug mode, memory is modified after delete ! camera->setRenderSurface(render_surface.get()); ! ! // OSG convention is X east, Y north, Z up ! camera->setViewByLookat( 0.0f, 200.0f, 300.0f, /// Position of the eye ! 0.0f, 0.0f, 0.0f, /// Point the eye is looking at ! 0.0f, 0.0f, 1.0f ); /// Up ! ! wxSize parentSize = parent->GetSize(); ! int parentHeight = parentSize.GetHeight(); ! int correctedY = parentHeight - (pos.y + size.GetHeight()); ! ! camera->setProjectionRectangle(pos.x,correctedY,size.GetWidth(),size.GetHeight()); ! ! // If using camera group, use this code ! camera_config = new Producer::CameraConfig(); ! camera_config->addCamera("Camera 1", camera.get()); ! ! camera_group = new osgProducer::OsgCameraGroup(camera_config.get()); ! ! camera_group->realize(Producer::CameraGroup::SingleThreaded); // other option is Producer::CameraGroup::ThreadPerCamera ! camera_group->setInstrumentationMode(FALSE); osgDB::Registry::instance()->setDataFilePathList("3d"); ! updateVisitor = new osgUtil::UpdateVisitor(); ! updateVisitor->setFrameStamp(camera_group->getFrameStamp()); rootnode = new osg::Group; ! camera_group->setSceneData(rootnode.get()); hudObjects = new osg::MatrixTransform; --- 982,997 ---- ObjectUpdater::AttachViewer(this); ! InitSceneView(pos, size); osgDB::Registry::instance()->setDataFilePathList("3d"); ! #ifndef _DEBUG ! // to suppress "Number display lists deleted" stdout text ! // doesn't work with OSG 0.9.5, should work with 0.9.6 and beyond ! osg::setNotifyLevel(osg::NOTICE); ! #endif rootnode = new osg::Group; ! sceneView->setSceneData(rootnode.get()); hudObjects = new osg::MatrixTransform; *************** *** 953,958 **** CreateScene(); - - InitSceneView(); } --- 1008,1011 ---- Index: tcMapView.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcMapView.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** tcMapView.cpp 9 Jan 2004 21:48:40 -0000 1.15 --- tcMapView.cpp 20 Jan 2004 03:02:53 -0000 1.16 *************** *** 163,166 **** --- 163,167 ---- // mnWidth and mnHeight updated by tcWindow::OnSize terrainView->SetSize(wxRect(pos.x,pos.y,mnWidth,mnHeight)); + CalcViewParameters(); } *************** *** 539,543 **** else if (mnGameMode == GAMEMODE_PAUSED) { ! sText.Format("%s (PAUSED)",dateTime.c_str()); mpBrush->SetColor(Color(254,125,125,255)); } --- 540,544 ---- else if (mnGameMode == GAMEMODE_PAUSED) { ! sText.Format("%s ",dateTime.c_str()); mpBrush->SetColor(Color(254,125,125,255)); } Index: tcSimState.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/sim/tcSimState.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** tcSimState.cpp 10 Jan 2004 21:55:31 -0000 1.23 --- tcSimState.cpp 20 Jan 2004 03:02:53 -0000 1.24 *************** *** 263,267 **** } /********************************************************************/ ! void tcSimState::UpdateWeaponHits() { long aKeyList[512]; int nCount; --- 263,271 ---- } /********************************************************************/ ! /** ! * break this up, too many nested conditionals ! */ ! void tcSimState::UpdateWeaponHits() ! { long aKeyList[512]; int nCount; *************** *** 272,300 **** nCount = GetAllWeaponObjects(aKeyList,512); ! for(int k=0;k<nCount;k++) { bFound = maPlatformState.Lookup(aKeyList[k],pobj); tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pobj); ! if (bFound&&(pMissileObj != NULL)) { bool bTarget = (pMissileObj->GetGuidanceParameters(gp) == 1); bFound = (bTarget) ? maPlatformState.Lookup(gp.mnTargetID,ptarget) : false; ! if (bFound) { fRange_m = 1000.0f*pobj->mcKin.RangeToKmAlt(ptarget->mcKin); ! float fFactor = 0.0005f*(pobj->mcKin.mfSpeed_kts + ptarget->mcKin.mfSpeed_kts + 2000.0f); ! if (fRange_m < fFactor*50.0f) { ! float fDamage = pMissileObj->mpDBObject->mfDamage; ! float fDamageFract = GetFractionalDamage(fDamage, ptarget); ! ptarget->mfDamageLevel += fDamageFract; ! pobj->mfDamageLevel += 1.0f; // missile destroys itself on impact ! tcString s; ! s.Format("weapon %d hit target %d, range %3.1f m, time %.1f s", ! aKeyList[k],gp.mnTargetID,fRange_m,mfSimTime); ! WTL(s.GetBuffer()); ! if (mpUserInfo->IsOwnAlliance(ptarget->mnAlliance)) { ! mpSound->PlayEffect(SEFFECT_IMPLOSION); ! } ! else { ! mpSound->PlayEffect(SEFFECT_EXPLOSION2); } } } --- 276,328 ---- nCount = GetAllWeaponObjects(aKeyList,512); ! for(int k=0;k<nCount;k++) ! { bFound = maPlatformState.Lookup(aKeyList[k],pobj); tcMissileObject *pMissileObj = dynamic_cast<tcMissileObject*>(pobj); ! if (bFound&&(pMissileObj != NULL)) ! { bool bTarget = (pMissileObj->GetGuidanceParameters(gp) == 1); bFound = (bTarget) ? maPlatformState.Lookup(gp.mnTargetID,ptarget) : false; ! if (bFound) ! { fRange_m = 1000.0f*pobj->mcKin.RangeToKmAlt(ptarget->mcKin); ! float fFactor = 0.01f*(pobj->mcKin.mfSpeed_kts + ptarget->mcKin.mfSpeed_kts + 2000.0f); ! if (fRange_m < fFactor) ! { ! float dx,dy,dz,tclosest; ! tclosest = ptarget->mcKin.CalculateCollisionPoint(pMissileObj->mcKin, ! dx,dy,dz); ! if (tclosest <= 0.03) ! { ! float trueRange2 = dx*dx + dy*dy + dz*dz; ! if (trueRange2 < 64.0f) // 8.0 m range ! { ! tcString s; ! s.Format("weapon %d hit target %d, range^2: %3.1f m, time %.1f s", ! aKeyList[k],gp.mnTargetID,trueRange2,mfSimTime); ! WTL(s.GetBuffer()); ! std::cout << s.GetBuffer(); ! fprintf(stdout," collision relative time: %f, dx:%f dy:%f dz:%f\n", ! tclosest,dx,dy,dz); ! float fDamage = pMissileObj->mpDBObject->mfDamage; ! float fDamageFract = GetFractionalDamage(fDamage, ptarget); ! ptarget->mfDamageLevel += fDamageFract; ! pobj->mfDamageLevel += 1.0f; // missile destroys itself on impact ! ! ! if (mpUserInfo->IsOwnAlliance(ptarget->mnAlliance)) ! { ! mpSound->PlayEffect(SEFFECT_IMPLOSION); ! } ! else ! { ! mpSound->PlayEffect(SEFFECT_EXPLOSION2); ! } ! } } + + + } } |
From: <ddc...@us...> - 2004-01-20 03:02:56
|
Update of /cvsroot/gcblue/gcb_wx/src/graphics In directory sc8-pr-cvs1:/tmp/cvs-serv12457/src/graphics Modified Files: ObjectUpdater.cpp cspSky.cpp tc3DModel.cpp tcwindow.cpp Removed Files: tcrendersurface.cpp Log Message: Index: ObjectUpdater.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/graphics/ObjectUpdater.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ObjectUpdater.cpp 16 Jan 2004 00:04:14 -0000 1.5 --- ObjectUpdater.cpp 20 Jan 2004 03:02:53 -0000 1.6 *************** *** 99,104 **** // not correct for child objects ! Producer::Vec3 cp = viewer->GetCameraPosition(); ! osg::Vec3 cameraDelta = osg::Vec3(x,y,z) - osg::Vec3(cp.x(),cp.y(),cp.z()); distanceFromCamera = cameraDelta.length(); --- 99,103 ---- // not correct for child objects ! osg::Vec3 cameraDelta = osg::Vec3(x,y,z) - viewer->GetCameraPosition(); distanceFromCamera = cameraDelta.length(); Index: cspSky.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/graphics/cspSky.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** cspSky.cpp 22 Dec 2003 02:32:37 -0000 1.5 --- cspSky.cpp 20 Jan 2004 03:02:53 -0000 1.6 *************** *** 502,506 **** ! Moon::Moon(): AstronomicalBody() { _radius = 1738000.0; m_Latitude = -100.0; --- 502,507 ---- ! Moon::Moon(): AstronomicalBody() ! { _radius = 1738000.0; m_Latitude = -100.0; *************** *** 527,558 **** // set up the drawstate. ! osg::StateSet* dstate = new osg::StateSet; ! dstate->setMode(GL_CULL_FACE,osg::StateAttribute::OFF); ! dstate->setMode(GL_LIGHTING,osg::StateAttribute::OFF); ! dstate->setTextureAttributeAndModes(0, m_Texture.get(),osg::StateAttribute::ON); ! dstate->setMode(GL_CLIP_PLANE0, osg::StateAttribute::OFF); ! dstate->setMode(GL_CLIP_PLANE1, osg::StateAttribute::OFF); ! dstate->setMode(GL_CLIP_PLANE2, osg::StateAttribute::OFF); ! dstate->setMode(GL_CLIP_PLANE3, osg::StateAttribute::OFF); ! dstate->setMode(GL_CLIP_PLANE4, osg::StateAttribute::OFF); ! dstate->setMode(GL_CLIP_PLANE5, osg::StateAttribute::OFF); ! dstate->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON); osg::BlendFunc *bf = new osg::BlendFunc; bf->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA); ! dstate->setAttributeAndModes(bf, osg::StateAttribute::ON); ! osg::Depth *depth = new osg::Depth; ! ! depth->setFunction(osg::Depth::LEQUAL); ! depth->setRange(10.0, 1000000.0); ! dstate->setAttributeAndModes(depth, osg::StateAttribute::ON); ! /* depth->setFunction(osg::Depth::ALWAYS); depth->setRange(1.0, 1.0); ! dstate->setAttributeAndModes(depth, osg::StateAttribute::OFF); ! */ // set up the geoset. Geometry* geom = new Geometry; ! geom->setStateSet(dstate); Vec3Array* coords = new Vec3Array(4); --- 528,558 ---- // set up the drawstate. ! osg::StateSet* stateSet = new osg::StateSet; ! stateSet->setMode(GL_CULL_FACE,osg::StateAttribute::OFF); ! stateSet->setMode(GL_LIGHTING,osg::StateAttribute::OFF); ! stateSet->setTextureAttributeAndModes(0, m_Texture.get(),osg::StateAttribute::ON); ! stateSet->setMode(GL_CLIP_PLANE0, osg::StateAttribute::OFF); ! stateSet->setMode(GL_CLIP_PLANE1, osg::StateAttribute::OFF); ! stateSet->setMode(GL_CLIP_PLANE2, osg::StateAttribute::OFF); ! stateSet->setMode(GL_CLIP_PLANE3, osg::StateAttribute::OFF); ! stateSet->setMode(GL_CLIP_PLANE4, osg::StateAttribute::OFF); ! stateSet->setMode(GL_CLIP_PLANE5, osg::StateAttribute::OFF); osg::BlendFunc *bf = new osg::BlendFunc; bf->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA); ! stateSet->setAttributeAndModes(bf, osg::StateAttribute::ON); ! ! stateSet->setRenderBinDetails(-2,"RenderBin"); ! ! osg::Depth *depth = new osg::Depth; depth->setFunction(osg::Depth::ALWAYS); depth->setRange(1.0, 1.0); ! depth->setWriteMask(false); ! stateSet->setAttributeAndModes(depth, osg::StateAttribute::OFF); ! ! // set up the geoset. Geometry* geom = new Geometry; ! geom->setStateSet(stateSet); Vec3Array* coords = new Vec3Array(4); *************** *** 579,595 **** m_Moon = geom; ! //dstate->setMode(GL_FOG, osg::StateAttribute::OFF); ! //dstate->setRenderBinDetails(-2,"RenderBin"); m_Transform = new osg::MatrixTransform; m_Billboard = new AstroBillboard; m_Billboard->setCullingActive(false); ! m_Billboard->setStateSet(dstate); m_Billboard->addDrawable(m_Moon.get()); m_Billboard->setAxes(osg::Vec3(0.0,1.0,0.0), osg::Vec3(0.0,0.0,1.0), osg::Vec3(0.0,1.0,0.0)); m_Transform->addChild(m_Billboard.get()); ! m_Transform->setStateSet(dstate); m_Transform->setCullingActive(false); ! // moon->setStateSet(dstate); } --- 579,595 ---- m_Moon = geom; ! //stateSet->setMode(GL_FOG, osg::StateAttribute::OFF); ! //stateSet->setRenderBinDetails(-2,"RenderBin"); m_Transform = new osg::MatrixTransform; m_Billboard = new AstroBillboard; m_Billboard->setCullingActive(false); ! m_Billboard->setStateSet(stateSet); m_Billboard->addDrawable(m_Moon.get()); m_Billboard->setAxes(osg::Vec3(0.0,1.0,0.0), osg::Vec3(0.0,0.0,1.0), osg::Vec3(0.0,1.0,0.0)); m_Transform->addChild(m_Billboard.get()); ! m_Transform->setStateSet(stateSet); m_Transform->setCullingActive(false); ! // moon->setStateSet(stateSet); } *************** *** 1018,1027 **** dstate->setMode(GL_CLIP_PLANE4, osg::StateAttribute::OFF); dstate->setMode(GL_CLIP_PLANE5, osg::StateAttribute::OFF); ! dstate->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF); osg::Depth *depth = new osg::Depth; depth->setFunction(osg::Depth::ALWAYS); ! depth->setRange(1.0, 1.0); dstate->setAttributeAndModes(depth, osg::StateAttribute::OFF); setStateSet(dstate); } --- 1018,1029 ---- dstate->setMode(GL_CLIP_PLANE4, osg::StateAttribute::OFF); dstate->setMode(GL_CLIP_PLANE5, osg::StateAttribute::OFF); ! osg::Depth *depth = new osg::Depth; depth->setFunction(osg::Depth::ALWAYS); ! depth->setRange(1.0, 1.0); ! depth->setWriteMask(false); dstate->setAttributeAndModes(depth, osg::StateAttribute::OFF); setStateSet(dstate); + } *************** *** 1203,1209 **** m_SkyDome->setColorBinding(Geometry::BIND_PER_VERTEX); ! // XXX XXX StateSet *dstate = new StateSet; ! ! if (1) { Image *image = new Image(); image->allocateImage(64, 64, 1, GL_RGB, GL_UNSIGNED_BYTE); --- 1205,1209 ---- m_SkyDome->setColorBinding(Geometry::BIND_PER_VERTEX); ! { Image *image = new Image(); image->allocateImage(64, 64, 1, GL_RGB, GL_UNSIGNED_BYTE); *************** *** 1234,1266 **** dome_state->setMode(GL_LIGHTING, StateAttribute::OFF); dome_state->setMode(GL_CULL_FACE, StateAttribute::OFF); - dome_state->setMode(GL_DEPTH_TEST, StateAttribute::OFF); dome_state->setMode(GL_FOG, osg::StateAttribute::OFF); ! dome_state->setRenderBinDetails(-2,"RenderBin"); osg::Depth* depth = new osg::Depth; depth->setFunction(osg::Depth::ALWAYS); depth->setRange(1.0, 1.0); dome_state->setAttributeAndModes(depth,StateAttribute::OFF); ! } ! // clear the depth to the far plane. ! /* XXX XXX ! osg::Depth* depth = new osg::Depth; ! depth->setFunction(osg::Depth::ALWAYS); ! depth->setRange(1.0, 1.0); ! dstate->setAttributeAndModes(depth,StateAttribute::OFF); ! */ - - m_StarDome = new StarSystem(); - StateSet *star_state = m_StarDome->getOrCreateStateSet(); - star_state->setMode(GL_LIGHTING, StateAttribute::OFF); - star_state->setMode(GL_CULL_FACE, StateAttribute::OFF); - star_state->setMode(GL_DEPTH_TEST, StateAttribute::ON); // had to change from CSP, must've messed up code? - star_state->setMode(GL_FOG, osg::StateAttribute::OFF); - osg::Depth* depth = new osg::Depth; - depth->setFunction(osg::Depth::LEQUAL); // changed from CSP, was ALWAYS - depth->setRange(10.0, 1000000.0); - star_state->setAttributeAndModes(depth,StateAttribute::ON); // changed from CSP - osg::Geode *geode = new osg::Geode(); geode->addDrawable(m_SkyDome.get()); --- 1234,1261 ---- dome_state->setMode(GL_LIGHTING, StateAttribute::OFF); dome_state->setMode(GL_CULL_FACE, StateAttribute::OFF); dome_state->setMode(GL_FOG, osg::StateAttribute::OFF); ! // render bins: skydome and stars = -3, moon = -2, terrain = -1, rest = 0 (default) ! dome_state->setRenderBinDetails(-3,"RenderBin"); osg::Depth* depth = new osg::Depth; depth->setFunction(osg::Depth::ALWAYS); depth->setRange(1.0, 1.0); + depth->setWriteMask(false); dome_state->setAttributeAndModes(depth,StateAttribute::OFF); ! } ! { ! m_StarDome = new StarSystem(); ! StateSet *star_state = m_StarDome->getOrCreateStateSet(); ! star_state->setMode(GL_LIGHTING, StateAttribute::OFF); ! star_state->setMode(GL_CULL_FACE, StateAttribute::OFF); ! star_state->setMode(GL_FOG, osg::StateAttribute::OFF); ! star_state->setRenderBinDetails(-3,"RenderBin"); ! osg::Depth* depth = new osg::Depth; ! depth->setFunction(osg::Depth::ALWAYS); ! depth->setRange(1.0, 1.0); ! depth->setWriteMask(false); ! star_state->setAttributeAndModes(depth,StateAttribute::OFF); ! } osg::Geode *geode = new osg::Geode(); geode->addDrawable(m_SkyDome.get()); Index: tc3DModel.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/graphics/tc3DModel.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tc3DModel.cpp 18 Jan 2004 18:42:41 -0000 1.4 --- tc3DModel.cpp 20 Jan 2004 03:02:53 -0000 1.5 *************** *** 179,183 **** if (foundAnimation) { ! std::cout << " Found matching animation\n"; osg::MatrixTransform* mt = dynamic_cast<osg::MatrixTransform*>(ret_node->asTransform()); if (mt) --- 179,183 ---- if (foundAnimation) { ! //std::cout << "Found matching animation\n"; osg::MatrixTransform* mt = dynamic_cast<osg::MatrixTransform*>(ret_node->asTransform()); if (mt) Index: tcwindow.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/graphics/tcwindow.cpp,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** tcwindow.cpp 18 Jan 2004 18:42:41 -0000 1.15 --- tcwindow.cpp 20 Jan 2004 03:02:53 -0000 1.16 *************** *** 50,53 **** --- 50,54 ---- EVT_ENTER_WINDOW(tcWindow::OnEnterWindow) EVT_LEAVE_WINDOW(tcWindow::OnLeaveWindow) + EVT_SHOW(tcWindow::OnShow) EVT_SIZE(tcWindow::OnSize) END_EVENT_TABLE() *************** *** 100,103 **** --- 101,112 ---- } + /** + * Do nothing for show event. + */ + void tcWindow::OnShow(wxShowEvent& event) + { + return; + } + void tcWindow::OnKeyDown(wxKeyEvent& event) { *************** *** 107,116 **** void tcWindow::OnLButtonDown(wxMouseEvent& event) { ! event.Skip(); } void tcWindow::OnLButtonUp(wxMouseEvent& event) { ! event.Skip(); } --- 116,125 ---- void tcWindow::OnLButtonDown(wxMouseEvent& event) { ! SkipMouseEvent(event); } void tcWindow::OnLButtonUp(wxMouseEvent& event) { ! SkipMouseEvent(event); } *************** *** 137,141 **** void tcWindow::OnRButtonDown(wxMouseEvent& event) { ! event.Skip(); } --- 146,150 ---- void tcWindow::OnRButtonDown(wxMouseEvent& event) { ! SkipMouseEvent(event); } *************** *** 231,241 **** if (abActive) { wxWindow::Enable(true); - wxWindow::Show(TRUE); } else { wxWindow::Enable(false); - wxWindow::Show(FALSE); } mbActive=abActive; --- 240,252 ---- if (abActive) { + if (!wxWindow::IsShown()) + { + wxWindow::Show(TRUE); + } wxWindow::Enable(true); } else { wxWindow::Enable(false); } mbActive=abActive; *************** *** 568,576 **** tcWindow::tcWindow(wxWindow *parent, const wxPoint& pos, const wxSize& size, const wxString& name) : ! wxWindow(parent, -1, pos, size, wxTRANSPARENT_WINDOW| wxNO_FULL_REPAINT_ON_RESIZE, name), //| wxNO_FULL_REPAINT_ON_RESIZE |wxCLIP_CHILDREN mnHeight(size.GetHeight()), mnWidth(size.GetWidth()) { ! SetBackgroundColour(*wxBLACK); ! Show(FALSE); mbCloned = false; mbActive = false; --- 579,587 ---- tcWindow::tcWindow(wxWindow *parent, const wxPoint& pos, const wxSize& size, const wxString& name) : ! wxWindow(parent, -1, pos, size, wxTRANSPARENT_WINDOW | wxNO_FULL_REPAINT_ON_RESIZE, name), //| wxNO_FULL_REPAINT_ON_RESIZE |wxCLIP_CHILDREN mnHeight(size.GetHeight()), mnWidth(size.GetWidth()) { ! wxWindow::SetBackgroundColour(*wxBLACK); ! wxWindow::Show(FALSE); mbCloned = false; mbActive = false; --- tcrendersurface.cpp DELETED --- |
From: <ddc...@us...> - 2004-01-20 03:02:56
|
Update of /cvsroot/gcblue/gcb_wx/include/sim In directory sc8-pr-cvs1:/tmp/cvs-serv12457/include/sim Modified Files: Game.h tc3DViewer.h Log Message: Index: Game.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/Game.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** Game.h 5 Jan 2004 02:48:02 -0000 1.22 --- Game.h 20 Jan 2004 03:02:52 -0000 1.23 *************** *** 139,142 **** --- 139,143 ---- int mnLeftMargin; // width of left auxiliary windows int mnBottomMargin; // height of bottom aux windows + wxGLCanvas *glCanvas; tcSoundConsole *infoConsole; ///< console object for info messages tcButtonConsole *briefingConsoleLeft; ///< console object for briefing text Index: tc3DViewer.h =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/include/sim/tc3DViewer.h,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** tc3DViewer.h 18 Jan 2004 18:42:41 -0000 1.21 --- tc3DViewer.h 20 Jan 2004 03:02:52 -0000 1.22 *************** *** 28,39 **** #include "wx/wx.h" #include "wx/msw/private.h" // for MS Windows specific definitions #include <osg/NodeVisitor> #include <osgUtil/Optimizer> #include <osgText/Text> - #include <Producer/Math> - #include <Producer/Referenced> #include "cspDate.h" - class tcRenderSurface; class tcSimState; class tcGameObject; --- 28,38 ---- #include "wx/wx.h" #include "wx/msw/private.h" // for MS Windows specific definitions + #include <osg/FrameStamp> #include <osg/NodeVisitor> + #include <osgUtil/SceneView> #include <osgUtil/Optimizer> #include <osgText/Text> #include "cspDate.h" class tcSimState; class tcGameObject; *************** *** 41,59 **** class tc3DSky; class tcMapData; - - namespace Producer - { - class Camera; - class CameraConfig; - class CameraGroup; - } - - namespace osgProducer - { - class OsgCameraGroup; - } class Sky; ! ! using namespace Producer; --- 40,45 ---- class tc3DSky; class tcMapData; class Sky; ! class wxGLCanvas; *************** *** 61,69 **** { public: ! Producer::ref_ptr<tcRenderSurface> render_surface; ! Producer::ref_ptr<Producer::Camera> camera; ! Producer::ref_ptr<Producer::CameraConfig> camera_config; ! osg::ref_ptr<osgProducer::OsgCameraGroup> camera_group; osg::ref_ptr<osg::NodeVisitor> updateVisitor; osg::ref_ptr<osgText::Text> viewerText; ///< text for debug/basic viewer info display osg::ref_ptr<osg::MatrixTransform> hudObjects; ///< add HUD objects to this transform --- 47,58 ---- { public: ! // Producer::ref_ptr<tcRenderSurface> render_surface; ! //Producer::ref_ptr<Producer::Camera> camera; ! //Producer::ref_ptr<Producer::CameraConfig> camera_config; ! //osg::ref_ptr<osgProducer::OsgCameraGroup> camera_group; ! osg::ref_ptr<osgUtil::SceneView> sceneView; ! osg::ref_ptr<osg::DisplaySettings> displaySettings; osg::ref_ptr<osg::NodeVisitor> updateVisitor; + osg::ref_ptr<osg::FrameStamp> frameStamp; osg::ref_ptr<osgText::Text> viewerText; ///< text for debug/basic viewer info display osg::ref_ptr<osg::MatrixTransform> hudObjects; ///< add HUD objects to this transform *************** *** 103,112 **** void CreateSky(); void CreateTestGraph(); - void DirtyAll(); void Frame(); void Freeze(); ! Producer::Vec3 GetCameraPosition(); double GetGameTime() const {return gameTime;} ! Producer::Vec3 GetObjectPosition(tcGameObject *obj); bool IsActive() {return isActive;} void LoadModel(tcGameObject *obj); --- 92,100 ---- void CreateSky(); void CreateTestGraph(); void Frame(); void Freeze(); ! osg::Vec3 GetCameraPosition(); double GetGameTime() const {return gameTime;} ! osg::Vec3 GetObjectPosition(tcGameObject *obj); bool IsActive() {return isActive;} void LoadModel(tcGameObject *obj); *************** *** 120,123 **** --- 108,112 ---- void SetPolarOffset(float az, float el, float range); void SetText(const char *s); + void Swap(); void ToggleFog(); void ToggleWireframe(); *************** *** 129,133 **** ! tc3DViewer(wxWindow *parent, const wxPoint& pos, const wxSize& size, const wxString& name = "tc3DViewer"); --- 118,122 ---- ! tc3DViewer(wxGLCanvas *parent, const wxPoint& pos, const wxSize& size, const wxString& name = "tc3DViewer"); *************** *** 135,138 **** --- 124,128 ---- private: + wxGLCanvas *glCanvas; bool isFrozen; ///< set true if window has been frozen bool isActive; *************** *** 151,154 **** --- 141,146 ---- float shiftDistance; ///< reset origin if camera distance from origin exceeds this double gameTime; ///< current game time [s] + float zmin; ///< depth buffer limits + float zmax; // camera parameters *************** *** 159,165 **** double cameraLatitude; ///< radians float cameraAltitude; ///< meters ! Producer::Vec3 cameraPosition; ///< current position of camera ! Producer::Vec3 cameraPositionOffset; ///< current position offset of camera rel to target, for moveWith ! Producer::Vec3 cameraTarget; ///< point camera is looking at for lookAt modes float cameraAz; ///< camera azimuth relative to target for moveWith modes float cameraEl; ///< camera elevation relative to target for moveWith modes --- 151,157 ---- double cameraLatitude; ///< radians float cameraAltitude; ///< meters ! osg::Vec3 cameraPosition; ///< current position of camera ! osg::Vec3 cameraPositionOffset; ///< current position offset of camera rel to target, for moveWith ! osg::Vec3 cameraTarget; ///< point camera is looking at for lookAt modes float cameraAz; ///< camera azimuth relative to target for moveWith modes float cameraEl; ///< camera elevation relative to target for moveWith modes *************** *** 173,177 **** void InitLight(); ! void InitSceneView(); void InitState(); void InitText(); --- 165,169 ---- void InitLight(); ! void InitSceneView(wxPoint pos, wxSize size); void InitState(); void InitText(); *************** *** 179,184 **** void UpdateCamera(); void UpdateChildModels(tcGameObject *gameObj); ! void UpdateOrigin(); void UpdateModels(); void UpdateSky(DateZulu& dateZulu); --- 171,177 ---- void UpdateCamera(); void UpdateChildModels(tcGameObject *gameObj); ! bool UpdateOrigin(); void UpdateModels(); + void UpdateProjectionMatrix(const wxSize& windowSize); void UpdateSky(DateZulu& dateZulu); |
From: <ddc...@us...> - 2004-01-20 03:02:56
|
Update of /cvsroot/gcblue/gcb_wx/src/common In directory sc8-pr-cvs1:/tmp/cvs-serv12457/src/common Modified Files: simmath.cpp tcSound.cpp Log Message: Index: simmath.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/common/simmath.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** simmath.cpp 8 Jan 2004 23:54:27 -0000 1.4 --- simmath.cpp 20 Jan 2004 03:02:53 -0000 1.5 *************** *** 287,290 **** --- 287,325 ---- } /******************************* tcKinematics *******************************/ + + /** + * Calculates closest distance that collider comes to object represented + * by tcKinematics. + * @param dx x separation in meters in model coordinates + * @param dy y separation in meters in model coordinates + * @param dz z separation in meters in model coordinates + * @return time of closest distance in seconds, negative indicates past + */ + float tcKinematics::CalculateCollisionPoint(const tcKinematics& collider, float& dxi, float& dyi, float& dzi) + { + double dlon = mfLon_rad - collider.mfLon_rad; + double dlat = mfLat_rad - collider.mfLat_rad; + + float dx = C_RADTOM*cosf(mfLat_rad)*((float)dlon); + float dy = C_RADTOM*((float)dlat); + float dz = mfAlt_m - collider.mfAlt_m; + + float v = C_KTSTOMPS*mfSpeed_kts; + float vc = C_KTSTOMPS*mfSpeed_kts; + float dvz = v*sinf(mfPitch_rad) - vc*sinf(collider.mfPitch_rad); + float cospitch = cosf(mfPitch_rad); + float cospitchc = cosf(collider.mfPitch_rad); + float dvx = v*cospitch*sinf(mfHeading_rad) - vc*cospitchc*sinf(collider.mfHeading_rad); + float dvy = v*cospitch*cosf(mfHeading_rad) - vc*cospitchc*cosf(collider.mfHeading_rad); + + float tclosest = -(dx*dvx + dy*dvy + dz*dvz) / + (dvx*dvx + dvy*dvy + dvz*dvz); + + dxi = dx + dvx*tclosest; + dyi = dy + dvy*tclosest; + dzi = dz + dvz*tclosest; + + return tclosest; + } // returns radian heading to track float tcKinematics::HeadingToTrack(const tcTrack& track) { Index: tcSound.cpp =================================================================== RCS file: /cvsroot/gcblue/gcb_wx/src/common/tcSound.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tcSound.cpp 1 Jan 2004 23:44:46 -0000 1.10 --- tcSound.cpp 20 Jan 2004 03:02:53 -0000 1.11 *************** *** 223,227 **** meMusicState = MS_WAIT; oggStreamer->Open(musicPath); ! oggStreamer->Display(); oggStreamer->Play(); oggStreamer->SetPause(false); --- 223,227 ---- meMusicState = MS_WAIT; oggStreamer->Open(musicPath); ! // oggStreamer->Display(); // uncomment to log ogg info to stdout oggStreamer->Play(); oggStreamer->SetPause(false); |