This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Tools/MaxFly/MaxFly.cpp

306 lines
7.8 KiB
C++
Raw Permalink Normal View History

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**********************************************************************
*<
FILE: MaxFly.cpp
DESCRIPTION: Appwizard generated plugin
CREATED BY:
HISTORY:
*> Copyright (c) 1997, All Rights Reserved.
**********************************************************************/
#include "MaxFly.h"
#define MAXFLY_CLASS_ID Class_ID(0xf1077c8, 0x387a6b66)
const float PITCH_SPEED = 8.0f * 3.1415f / 180.0f;
const float YAW_SPEED = 8.0f * 3.1415f / 180.0f;
const float FLY_SPEED = 5.0f;
class MaxFly : public UtilityObj
{
public:
MaxFly();
~MaxFly();
void BeginEditParams(Interface *ip,IUtil *iu);
void EndEditParams(Interface *ip,IUtil *iu);
void Init(HWND hWnd);
void Destroy(HWND hWnd);
void DeleteThis() { }
protected:
void Select_Camera(void);
void Pitch_Up(void);
void Pitch_Down(void);
void Yaw_Left(void);
void Yaw_Right(void);
void Fly_Forward(void);
void Fly_Backward(void);
HWND hPanel;
IUtil * iu;
Interface * ip;
friend static BOOL CALLBACK MaxFlyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};
static MaxFly theMaxFly;
class MaxFlyClassDesc:public ClassDesc2
{
public:
int IsPublic() {return 1;}
void * Create(BOOL loading = FALSE) {return &theMaxFly;}
const TCHAR * ClassName() {return GetString(IDS_CLASS_NAME);}
SClass_ID SuperClassID() {return UTILITY_CLASS_ID;}
Class_ID ClassID() {return MAXFLY_CLASS_ID;}
const TCHAR* Category() {return GetString(IDS_CATEGORY);}
const TCHAR* InternalName() { return _T("MaxFly"); } // returns fixed parsable name (scripter-visible name)
HINSTANCE HInstance() { return hInstance; } // returns owning module handle
};
static MaxFlyClassDesc MaxFlyDesc;
ClassDesc2* GetMaxFlyDesc() {return &MaxFlyDesc;}
static BOOL CALLBACK MaxFlyDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_INITDIALOG:
theMaxFly.Init(hWnd);
break;
case WM_DESTROY:
theMaxFly.Destroy(hWnd);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_PITCH_UP_BUTTON: theMaxFly.Pitch_Up(); break;
case IDC_PITCH_DOWN_BUTTON: theMaxFly.Pitch_Down(); break;
case IDC_YAW_LEFT_BUTTON: theMaxFly.Yaw_Left(); break;
case IDC_YAW_RIGHT_BUTTON: theMaxFly.Yaw_Right(); break;
case IDC_FLY_FORWARD_BUTTON: theMaxFly.Fly_Forward(); break;
case IDC_FLY_BACKWARD_BUTTON: theMaxFly.Fly_Backward(); break;
case IDC_SELECT_CAMERA_BUTTON: theMaxFly.Select_Camera(); break;
};
break;
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_MOUSEMOVE:
theMaxFly.ip->RollupMouseMessage(hWnd,msg,wParam,lParam);
break;
default:
return FALSE;
}
return TRUE;
}
//--- MaxFly -------------------------------------------------------
MaxFly::MaxFly()
{
iu = NULL;
ip = NULL;
hPanel = NULL;
}
MaxFly::~MaxFly()
{
}
void MaxFly::BeginEditParams(Interface *ip,IUtil *iu)
{
this->iu = iu;
this->ip = ip;
hPanel = ip->AddRollupPage(
hInstance,
MAKEINTRESOURCE(IDD_PANEL),
MaxFlyDlgProc,
GetString(IDS_PARAMS),
0);
}
void MaxFly::EndEditParams(Interface *ip,IUtil *iu)
{
this->iu = NULL;
this->ip = NULL;
ip->DeleteRollupPage(hPanel);
hPanel = NULL;
}
void MaxFly::Init(HWND hWnd)
{
}
void MaxFly::Destroy(HWND hWnd)
{
}
void MaxFly::Select_Camera(void)
{
}
void MaxFly::Pitch_Up(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Rotate( ip->GetTime(), // Time
object_tm, // tmAxis
AngAxis(Point3(1,0,0),-PITCH_SPEED), // const AngAxis& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}
void MaxFly::Pitch_Down(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Rotate( ip->GetTime(), // Time
object_tm, // tmAxis
AngAxis(Point3(1,0,0),PITCH_SPEED), // const AngAxis& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}
void MaxFly::Yaw_Left(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Rotate( ip->GetTime(), // Time
object_tm, // tmAxis
AngAxis(Point3(0,1,0),-YAW_SPEED), // const AngAxis& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}
void MaxFly::Yaw_Right(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Rotate( ip->GetTime(), // Time
object_tm, // tmAxis
AngAxis(Point3(0,1,0),+YAW_SPEED), // const AngAxis& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}
void MaxFly::Fly_Forward(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Move( ip->GetTime(), // TimeValue t,
object_tm, // const Matrix3& tmAxis,
Point3(0.0f,0.0f,-FLY_SPEED), // const Point3& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}
void MaxFly::Fly_Backward(void)
{
if (ip->GetSelNodeCount() > 0) {
for (int i=0; i<ip->GetSelNodeCount(); i++) {
INode * node = ip->GetSelNode(i);
if (node) {
Matrix3 object_tm = node->GetObjectTM(ip->GetTime());
node->Move( ip->GetTime(), // TimeValue t,
object_tm, // const Matrix3& tmAxis,
Point3(0.0f,0.0f,FLY_SPEED), // const Point3& val,
TRUE, // BOOL localOrigin=FALSE,
TRUE, // BOOL affectKids=TRUE,
PIV_NONE, // int pivMode=PIV_NONE,
TRUE // BOOL ignoreLocks=FALSE
);
}
}
ip->RedrawViews(ip->GetTime());
}
}