/*
===========================================================================
ARX FATALIS GPL Source Code
Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company.
This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code').
Arx Fatalis Source Code 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.
Arx Fatalis Source Code 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 Arx Fatalis Source Code. If not, see
.
In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these
additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx
Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o
ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
//////////////////////////////////////////////////////////////////////////////////////
// @@ @@@ @@@ @@ @@@@@ //
// @@@ @@@@@@ @@@ @@ @@@@ @@@ @@@ //
// @@@ @@@@@@@ @@@ @@@@ @@@@ @@ @@@@ //
// @@@ @@ @@@@ @@@ @@@@@ @@@@@@ @@@ @@@ //
// @@@@@ @@ @@@@ @@@ @@@@@ @@@@@@@ @@@ @ @@@ //
// @@@@@ @@ @@@@ @@@@@@@@ @@@@ @@@ @@@@@ @@ @@@@@@@ //
// @@ @@@ @@ @@@@ @@@@@@@ @@@ @@@ @@@@@@ @@ @@@@ //
// @@@ @@@ @@@ @@@@ @@@@@ @@@@@@@@@ @@@@@@@ @@@ @@@@ //
// @@@ @@@@ @@@@@@@ @@@@@@ @@@ @@@@ @@@ @@@ @@@ @@@@ //
// @@@@@@@@ @@@@@ @@@@@@@@@@ @@@ @@@ @@@ @@@ @@@ @@@@@ //
// @@@ @@@@ @@@@ @@@ @@@@@@@ @@@ @@@ @@@@ @@@ @@@@ @@@@@ //
//@@@ @@@@ @@@@@ @@@ @@@@@@ @@ @@@ @@@@ @@@@@@@ @@@@@ @@@@@ //
//@@@ @@@@@ @@@@@ @@@@ @@@ @@ @@ @@@@ @@@@@@@ @@@@@@@@@ //
//@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@@@@ //
//@@@ @@@@ @@@@@@@ @@@@ @@ @@ @@@@ @@@@@ @@ //
//@@@ @@@ @@@ @@@@@ @@ @@@ //
// @@@ @@@ @@ @@ STUDIOS //
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
// DanaeDlg.CPP
//////////////////////////////////////////////////////////////////////////////////////
//
// Description:
// DANAE Dialog Box Management
//
// Updates: (date) (person) (update)
//
// Code: Cyril Meynier
//
// Copyright (c) 1999-2000 ARKANE Studios SA. All rights reserved
//////////////////////////////////////////////////////////////////////////////////////
#define _ARX_CEDITOR_ 0
#include
#include
#include
#include
#include "Danae_Resource.h"
#include "Danaedlg.h"
#include "ARX_Interface.h"
#include "ARX_Paths.h"
#include "ARX_Sound.h"
#if _ARX_CEDITOR_
#include "Ceditor_Ceditor.h"
#endif // _ARX_CEDITOR_
#include "ARX_GlobalMods.h"
#include "ARX_Particles.h"
#include "ARX_Snapshot.h"
#include "ARX_Text.h"
#include "ARX_Time.h"
#include
#include
#include
#include
#include
#include
#include
#define _CRTDBG_MAP_ALLOC
#include
extern long CURRENTSNAPNUM;
extern long SnapShotMode;
extern long USE_D3DFOG;
extern long ARX_DEMO;
extern long NOCHECKSUM;
extern long ZMAPMODE;
extern long TreatAllIO;
extern long HIDEMAGICDUST;
extern long LaunchDemo;
extern long LIGHTPOWERUP;
extern float LPpower;
extern long D3DTRANSFORM;
extern long USE_PLAYERCOLLISIONS;
extern long A_FLARES;
extern long NODIRCREATION;
extern long MAPUPDATE;
extern long EXTERNALVIEWING;
extern long DYNAMIC_NORMALS;
extern long SHOWSHADOWS;
extern long HIPOLY;
extern long BLURTEXTURES;
extern long NOMIPMAPS;
extern long POINTINTERPOLATION;
extern long ForceIODraw;
extern long NEED_ANCHORS;
long HIDEANCHORS = 1;
extern long HERMES_KEEP_MEMORY_TRACE;
extern char * GTE_TITLE;
extern char * GTE_TEXT;
extern long GTE_SIZE;
extern float TIMEFACTOR;
extern long ALLOW_MESH_TWEAKING;
extern long DEBUG_MOLLESS;
extern long HIDESPEECH;
extern HWND MESH_REDUCTION_WINDOW;
extern HWND PRECALC;
extern HANDLE LIGHTTHREAD;
extern long PROGRESS_COUNT;
extern long PROGRESS_TOTAL;
extern long PAUSED_PRECALC;
COLORREF custcr[16];
long accepted = 0;
BOOL CALLBACK SnapShotDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
long InitMemorySnaps();
void FlushMemorySnaps(long snap);
#define CHECK 1
#define UNCHECK 0
//*************************************************************************************
//*************************************************************************************
void SetCheck(HWND hWnd, int id, long chk)
{
HWND thWnd;
thWnd = GetDlgItem(hWnd, id);
if (chk == 0) SendMessage(thWnd, BM_SETCHECK, BST_UNCHECKED, 0);
else if (chk == 1) SendMessage(thWnd, BM_SETCHECK, BST_CHECKED, 0);
}
//*************************************************************************************
//*************************************************************************************
BOOL IsChecked(HWND hWnd, int id)
{
HWND thWnd;
thWnd = GetDlgItem(hWnd, id);
if (SendMessage(thWnd, BM_GETSTATE, 0, 0) == BST_CHECKED) return TRUE;
return FALSE;
}
//*************************************************************************************
//*************************************************************************************
void SetClick(HWND hWnd, int id)
{
HWND thWnd;
thWnd = GetDlgItem(hWnd, id);
SendMessage(thWnd, BM_CLICK, 0, 0);
}
float FORCED_REDUCTION_VALUE = 0.f;
BOOL CALLBACK MeshReductionProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
HWND thWnd;
long t;
switch (uMsg)
{
case WM_NOTIFY:
thWnd = GetDlgItem(hWnd, IDC_SLIDER_REDUCTION);
t = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
FORCED_REDUCTION_VALUE = (float)t * DIV10000;
break;
case WM_CLOSE:
MESH_REDUCTION_WINDOW = NULL;
EndDialog(hWnd, TRUE);
return FALSE;
case WM_INITDIALOG:
thWnd = GetDlgItem(hWnd, IDC_SLIDER_REDUCTION);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 10000));
t = (long)(FORCED_REDUCTION_VALUE * 10000.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
thWnd = GetDlgItem(hWnd, IDC_SLIDER_REDUCTION);
t = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
FORCED_REDUCTION_VALUE = (float)t * DIV10000;
MESH_REDUCTION_WINDOW = NULL;
EndDialog(hWnd, TRUE);
break;
}
break;
}
return FALSE;
}
char ERRORSTRING[65535];
char ERRORTITLE[512];
HWND ShowErrorPopup(char * title, char * tex)
{
strcpy(ERRORTITLE, title);
strcpy(ERRORSTRING, tex);
if (danaeApp.m_pFramework->m_bIsFullscreen)
{
ARX_TIME_Pause();
danaeApp.Pause(TRUE);
DialogBox((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_SCRIPTERROR), danaeApp.m_hWnd, IDDErrorLogProc);
danaeApp.Pause(FALSE);
ARX_TIME_UnPause();
return NULL;
}
HWND hdl = CreateDialogParam((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_SCRIPTERROR), danaeApp.m_hWnd, IDDErrorLogProc, 0);
return hdl;
}
BOOL CALLBACK IDDErrorLogProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
HWND thWnd;
switch (uMsg)
{
case WM_CLOSE:
EndDialog(hWnd, TRUE);
return FALSE;
case WM_INITDIALOG:
thWnd = GetDlgItem(hWnd, IDC_ERRORLOG);
SetWindowText(thWnd, ERRORSTRING);
thWnd = GetDlgItem(hWnd, IDC_ERRORSTRING);
SetWindowText(thWnd, ERRORTITLE);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hWnd, TRUE);
break;
}
break;
}
return FALSE;
}
extern long ARX_PATHS_HIERARCHYMOVE;
BOOL CALLBACK PathwayOptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
HWND thWnd;
switch (uMsg)
{
case WM_CLOSE:
CDP_PATHWAYS_Options = NULL;
EndDialog(hWnd, TRUE);
return FALSE;
case WM_NOTIFY:
char temp[256];
float fval;
long val;
thWnd = GetDlgItem(hWnd, IDC_SLIDER1);
val = (long)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
fval = (float)(val) * DIV10;
thWnd = GetDlgItem(hWnd, IDC_FCLIPTEXT);
sprintf(temp, "%3.1f m", fval);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER2);
val = (long)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_MAXVOLTEXT);
sprintf(temp, "%d%%", val);
SetWindowText(thWnd, temp);
if (ARX_PATHS_SelectedAP)
{
D3DCOLOR col = EERIERGB(ARX_PATHS_SelectedAP->rgb.r, ARX_PATHS_SelectedAP->rgb.g, ARX_PATHS_SelectedAP->rgb.b);
COLORREF rgbResult = ((col >> 16 & 255))
| ((col >> 8 & 255) << 8)
| ((col & 255) << 16);
thWnd = GetDlgItem(hWnd, IDC_SHOWCOLOR);
HDC dc;
InvalidateRect(thWnd, NULL, TRUE);
if (dc = GetDC(thWnd))
{
RECT rect;
GetClientRect(thWnd, &rect);
HBRUSH brush = CreateSolidBrush(rgbResult);
SelectObject(dc, brush);
FillRect(dc, &rect, brush);
DeleteObject(brush);
ValidateRect(thWnd, NULL);
ReleaseDC(thWnd, dc);
}
}
break;
case WM_INITDIALOG:
if (ARX_PATHS_HIERARCHYMOVE)
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYHIERARCHY);
SetWindowText(thWnd, "Hierarchy Edition");
}
else
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYHIERARCHY);
SetWindowText(thWnd, "WayPoint Edition");
}
if ((ARX_PATHS_SelectedAP == NULL) ||
(ARX_PATHS_SelectedNum == -1))
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYTIME);
ShowWindow(thWnd, SW_HIDE);
thWnd = GetDlgItem(hWnd, IDC_PATHWAYBEZIER);
ShowWindow(thWnd, SW_HIDE);
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
ShowWindow(thWnd, SW_SHOW);
}
else
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYTIME);
ShowWindow(thWnd, SW_SHOW);
thWnd = GetDlgItem(hWnd, IDC_PATHWAYBEZIER);
ShowWindow(thWnd, SW_SHOW);
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
ShowWindow(thWnd, SW_SHOW);
}
if ((ARX_PATHS_SelectedAP != NULL) &&
(ARX_PATHS_SelectedNum != -1))
{
D3DCOLOR col = EERIERGB(ARX_PATHS_SelectedAP->rgb.r, ARX_PATHS_SelectedAP->rgb.g, ARX_PATHS_SelectedAP->rgb.b);
COLORREF rgbResult = ((col >> 16 & 255))
| ((col >> 8 & 255) << 8)
| ((col & 255) << 16);
thWnd = GetDlgItem(hWnd, IDC_SHOWCOLOR);
HDC dc;
InvalidateRect(thWnd, NULL, TRUE);
if (dc = GetDC(thWnd))
{
RECT rect;
GetClientRect(thWnd, &rect);
HBRUSH brush = CreateSolidBrush(rgbResult);
SelectObject(dc, brush);
FillRect(dc, &rect, brush);
DeleteObject(brush);
ValidateRect(thWnd, NULL);
ReleaseDC(thWnd, dc);
}
if (ARX_PATHS_SelectedAP->flags & PATH_LOOP)
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
SetWindowText(thWnd, "Loop");
}
else
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
SetWindowText(thWnd, "No Loop");
}
//////////////////////////////////////////////// NEW
if (ARX_PATHS_SelectedAP->flags & PATH_AMBIANCE)
{
SetCheck(hWnd, IDC_AMBIANCE, CHECK);
thWnd = GetDlgItem(hWnd, IDC_AMBIANCETEXT);
SetWindowText(thWnd, ARX_PATHS_SelectedAP->ambiance);
}
else
{
SetCheck(hWnd, IDC_AMBIANCE, UNCHECK);
thWnd = GetDlgItem(hWnd, IDC_AMBIANCETEXT);
SetWindowText(thWnd, "NONE");
}
if (ARX_PATHS_SelectedAP->flags & PATH_RGB)
{
SetCheck(hWnd, IDC_FADECOLOR, CHECK);
}
else
{
SetCheck(hWnd, IDC_FADECOLOR, UNCHECK);
}
thWnd = GetDlgItem(hWnd, IDC_SLIDER1);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(10, 400));
if (ARX_PATHS_SelectedAP->flags & PATH_FARCLIP)
{
SetCheck(hWnd, IDC_CLIPPINGFAR, CHECK);
long t = ARX_CLEAN_WARN_CAST_LONG((long)ARX_PATHS_SelectedAP->farclip * DIV10);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
}
else
{
SetCheck(hWnd, IDC_CLIPPINGFAR, UNCHECK);
long t = (long)280;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
}
thWnd = GetDlgItem(hWnd, IDC_SLIDER2); //Reverb
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 100)); // %
if (ARX_PATHS_SelectedAP->flags & PATH_REVERB)
{
SetCheck(hWnd, IDC_REVERB, CHECK);
}
else
{
SetCheck(hWnd, IDC_REVERB, UNCHECK);
}
long t;
F2L((float)(ARX_PATHS_SelectedAP->amb_max_vol), &t);
if (t <= 1) t = 100;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_MAXVOLTEXT);
sprintf(temp, "%d", t);
SetWindowText(thWnd, temp);
//////////////////////////////////////////////// END NEW
if (ARX_PATHS_SelectedAP->pathways[ARX_PATHS_SelectedNum-1].flag == PATHWAY_BEZIER)
SetCheck(hWnd, IDC_PATHWAYBEZIER, CHECK);
else SetCheck(hWnd, IDC_PATHWAYBEZIER, UNCHECK);
if (ARX_PATHS_SelectedAP->height != 0)
{
SetCheck(hWnd, IDC_ZONE, CHECK);
thWnd = GetDlgItem(hWnd, IDC_EDITHEIGHT);
char str[20];
if (ARX_PATHS_SelectedAP->height < 0)
SetWindowText(thWnd, "0");
else
{
sprintf(str, "%d", ARX_PATHS_SelectedAP->height);
SetWindowText(thWnd, str);
}
}
else
{
SetCheck(hWnd, IDC_ZONE, UNCHECK);
thWnd = GetDlgItem(hWnd, IDC_EDITHEIGHT);
SetWindowText(thWnd, "0");
}
thWnd = GetDlgItem(hWnd, IDC_PATHWAYTIME);
char str[20];
sprintf(str, "%.2f", ARX_PATHS_SelectedAP->pathways[ARX_PATHS_SelectedNum-1]._time);
SetWindowText(thWnd, str);
thWnd = GetDlgItem(hWnd, IDC_EDITNAME);
char str2[64];
sprintf(str2, "%s", ARX_PATHS_SelectedAP->name);
SetWindowText(thWnd, str2);
}
else
{
SetCheck(hWnd, IDC_ZONE, UNCHECK);
thWnd = GetDlgItem(hWnd, IDC_EDITHEIGHT);
SetWindowText(thWnd, "0");
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_COLORCHOOSE:
if (ARX_PATHS_SelectedAP != NULL)
{
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hWnd;
cc.hInstance = 0; //Ignored
D3DCOLOR col = EERIERGB(ARX_PATHS_SelectedAP->rgb.r, ARX_PATHS_SelectedAP->rgb.g, ARX_PATHS_SelectedAP->rgb.b);
cc.rgbResult = ((col >> 16 & 255))
| ((col >> 8 & 255) << 8)
| ((col & 255) << 16);
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
ChooseColor(&cc);
ARX_PATHS_SelectedAP->rgb.r = (float)((long)(cc.rgbResult & 255)) * DIV255;
ARX_PATHS_SelectedAP->rgb.g = (float)((long)((cc.rgbResult >> 8) & 255)) * DIV255;
ARX_PATHS_SelectedAP->rgb.b = (float)((long)((cc.rgbResult >> 16) & 255)) * DIV255;
thWnd = GetDlgItem(hWnd, IDC_SHOWCOLOR);
HDC dc;
InvalidateRect(thWnd, NULL, TRUE);
if (dc = GetDC(thWnd))
{
RECT rect;
GetClientRect(thWnd, &rect);
HBRUSH brush = CreateSolidBrush(cc.rgbResult);
SelectObject(dc, brush);
FillRect(dc, &rect, brush);
DeleteObject(brush);
ValidateRect(thWnd, NULL);
ReleaseDC(thWnd, dc);
}
}
break;
case IDC_PATHWAYLOOP:
if ((ARX_PATHS_SelectedAP != NULL) &&
(ARX_PATHS_SelectedNum != -1))
{
if (ARX_PATHS_SelectedAP->flags & PATH_LOOP)
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
SetWindowText(thWnd, "No Loop");
ARX_PATHS_SelectedAP->flags &= ~PATH_LOOP;
}
else
{
thWnd = GetDlgItem(hWnd, IDC_PATHWAYLOOP);
SetWindowText(thWnd, "Loop");
ARX_PATHS_SelectedAP->flags |= PATH_LOOP;
}
}
break;
case IDC_PATHWAYHIERARCHY:
if (ARX_PATHS_HIERARCHYMOVE)
{
ARX_PATHS_HIERARCHYMOVE = 0;
thWnd = GetDlgItem(hWnd, IDC_PATHWAYHIERARCHY);
SetWindowText(thWnd, "WayPoint Edition");
}
else
{
ARX_PATHS_HIERARCHYMOVE = ARX_PATH_HIERARCHY;
thWnd = GetDlgItem(hWnd, IDC_PATHWAYHIERARCHY);
SetWindowText(thWnd, "Hierarchy Edition");
}
break;
case IDOK:
case IDAPPLY:
if ((ARX_PATHS_SelectedAP != NULL) &&
(ARX_PATHS_SelectedNum != -1))
{
if (IsChecked(hWnd, IDC_PATHWAYBEZIER))
ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP, ARX_PATHS_SelectedNum, ARX_PATH_MOD_FLAGS, NULL, PATHWAY_BEZIER, 0);
else ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP, ARX_PATHS_SelectedNum, ARX_PATH_MOD_FLAGS, NULL, PATHWAY_STANDARD, 0);
HWND thWnd;
thWnd = GetDlgItem(hWnd, IDC_PATHWAYTIME);
char str[20];
GetWindowText(thWnd, str, 20);
ARX_PATHS_SelectedAP->pathways[ARX_PATHS_SelectedNum-1]._time = (float)atof(str);
if (IsChecked(hWnd, IDC_ZONE))
{
thWnd = GetDlgItem(hWnd, IDC_EDITHEIGHT);
char str[20];
GetWindowText(thWnd, str, 20);
float val = (float)atof(str);
if (val <= 0)
{
ARX_PATHS_SelectedAP->height = -1;
}
else ARX_PATHS_SelectedAP->height = (long)val;
}
else
{
ARX_PATHS_SelectedAP->height = 0;
}
if (IsChecked(hWnd, IDC_AMBIANCE))
{
ARX_PATHS_SelectedAP->flags |= PATH_AMBIANCE;
}
else
{
ARX_PATHS_SelectedAP->flags &= ~PATH_AMBIANCE;
}
thWnd = GetDlgItem(hWnd, IDC_AMBIANCETEXT);
GetWindowText(thWnd, ARX_PATHS_SelectedAP->ambiance, 127);
if (IsChecked(hWnd, IDC_FADECOLOR))
{
ARX_PATHS_SelectedAP->flags |= PATH_RGB;
}
else
{
ARX_PATHS_SelectedAP->flags &= ~PATH_RGB;
}
if (IsChecked(hWnd, IDC_CLIPPINGFAR))
{
ARX_PATHS_SelectedAP->flags |= PATH_FARCLIP;
}
else
{
ARX_PATHS_SelectedAP->flags &= ~PATH_FARCLIP;
}
thWnd = GetDlgItem(hWnd, IDC_SLIDER1);
val = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
fval = (float)(val) * 10.f;
ARX_PATHS_SelectedAP->farclip = fval;
if (IsChecked(hWnd, IDC_REVERB))
{
ARX_PATHS_SelectedAP->flags |= PATH_REVERB;
}
else
{
ARX_PATHS_SelectedAP->flags &= ~PATH_REVERB;
}
thWnd = GetDlgItem(hWnd, IDC_SLIDER2);
val = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
fval = (float)(val);
ARX_PATHS_SelectedAP->amb_max_vol = fval;
thWnd = GetDlgItem(hWnd, IDC_EDITNAME);
char str2[64];
GetWindowText(thWnd, str2, 63);
ARX_PATH * ap = ARX_PATHS_ExistName(str2);
if ((ap != ARX_PATHS_SelectedAP) && (ap != NULL))
ShowPopup("This Name is already used by another path, New name ignored...");
else ARX_PATHS_ChangeName(ARX_PATHS_SelectedAP, str2);
if (LOWORD(wParam) == IDOK)
{
CDP_PATHWAYS_Options = NULL;
EndDialog(hWnd, TRUE);
}
}
break;
case IDCANCEL:
CDP_PATHWAYS_Options = NULL;
EndDialog(hWnd, TRUE);
break;
}
break;
}
return FALSE;
}
//-----------------------------------------------------------------------------------
HWND InterObjDlg = NULL;
HWND dlgTreeViewhWnd = NULL;
WNDPROC lpfnOldWndProc;
typedef struct
{
HTREEITEM hti;
char text[260];
INTERACTIVE_OBJ * io;
} TVINFO;
#define MAXTVV 5000
TVINFO * tvv[MAXTVV];
long TVVcount = 0;
EERIE_3D TVCONTROLEDplayerpos;
long TVCONTROLED = 0;
HTREEITEM hfix = NULL;
HTREEITEM hitem = NULL;
HTREEITEM hnpc = NULL;
HTREEITEM hroot = NULL;
HTREEITEM hcam = NULL;
HTREEITEM hmarker = NULL;
HTREEITEM hpath = NULL;
void InterTreeViewGotoPosition(HTREEITEM hitem)
{
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->hti == hitem)
{
if (tvv[i]->io != NULL)
{
TVCONTROLEDplayerpos.x = tvv[i]->io->pos.x + (float)EEsin(DEG2RAD(player.angle.b)) * 100.f;
TVCONTROLEDplayerpos.y = tvv[i]->io->pos.y - 80.f;
TVCONTROLEDplayerpos.z = tvv[i]->io->pos.z - (float)EEcos(DEG2RAD(player.angle.b)) * 100.f;
TVCONTROLED = 1;
}
}
}
}
for (int i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->hti == hitem)
{
ARX_PATH * ap = ARX_PATH_GetAddressByName(tvv[i]->text);
if (ap != NULL)
{
TVCONTROLEDplayerpos.x = ap->initpos.x + (float)EEsin(DEG2RAD(player.angle.b)) * 100.f;
TVCONTROLEDplayerpos.y = ap->initpos.y - 80.f;
TVCONTROLEDplayerpos.z = ap->initpos.z - (float)EEcos(DEG2RAD(player.angle.b)) * 100.f;
TVCONTROLED = 1;
}
}
}
}
}
void InterTreeSelectObject(HTREEITEM hitem)
{
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->hti == hitem)
{
if (!stricmp(tvv[i]->text, "player"))
{
if (inter.iobj[0])
{
if (inter.iobj[0]->EditorFlags & EFLAG_SELECTED)
{
UnSelectIO(inter.iobj[0]);
}
else
{
SelectIO(inter.iobj[0]);
}
return;
}
}
if (tvv[i]->io != NULL)
{
if (tvv[i]->io->EditorFlags & EFLAG_SELECTED)
{
UnSelectIO(tvv[i]->io);
}
else
{
SelectIO(tvv[i]->io);
}
}
}
}
}
for (int i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->hti == hitem)
{
ARX_PATH * ap = ARX_PATH_GetAddressByName(tvv[i]->text);
if (ap != NULL)
{
ARX_PATHS_SelectedAP = ap;
ARX_PATHS_SelectedNum = 1;
}
}
}
}
}
BOOL CALLBACK InteractiveObjDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
HTREEITEM hitem;
switch (uMsg)
{
case WM_MOVE:
if ((danaeApp.m_pDeviceInfo->bWindowed) && (danaeApp.m_hWnd != NULL))
{
RECT rect1, rect2;
GetWindowRect(danaeApp.m_hWnd, &rect1);
GetWindowRect(hWnd, &rect2);
long posx = rect2.left - rect1.left;
long posy = rect2.top - rect1.top;
Danae_Registry_WriteValue("WND_IO_DlgProc_POSX", posx);
Danae_Registry_WriteValue("WND_IO_DlgProc_POSY", posy);
}
break;
case WM_CLOSE:
KillInterTreeView();
return FALSE;
case WM_INITDIALOG:
if ((danaeApp.m_pDeviceInfo->bWindowed) && (danaeApp.m_hWnd != NULL))
{
long posx, posy;
Danae_Registry_ReadValue("WND_IO_DlgProc_POSX", &posx, 0);
Danae_Registry_ReadValue("WND_IO_DlgProc_POSY", &posy, 0);
if ((posx != -1) && (posy != -1)
&& (posx < 1000) && (posx > 0)
&& (posy < 800) && (posy > 0)
)
{
RECT rect1;
GetWindowRect(danaeApp.m_hWnd, &rect1);
posx = rect1.left + posx;
posy = rect1.left + posy;
if (posx < 0) posx = 0;
if (posy < 0) posy = 0;
SetWindowPos(hWnd, NULL, posx, posy, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
}
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_GOTOOBJECT:
hitem = TreeView_GetSelection(dlgTreeViewhWnd);
InterTreeViewGotoPosition(hitem);
break;
case IDC_SELECTOBJECT:
hitem = TreeView_GetSelection(dlgTreeViewhWnd);
InterTreeSelectObject(hitem);
break;
}
break;
}
return FALSE;
}
void InterTreeViewDisplayInfo(HTREEITEM hitem)
{
char texx[512];
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->hti == hitem)
{
if (!stricmp(tvv[i]->text, "player"))
{
sprintf(texx, "%s", tvv[i]->text);
SetDlgItemText(InterObjDlg, IDC_INTERTEXT, texx);
return;
}
if (tvv[i]->io == NULL)
{
sprintf(texx, "%s", tvv[i]->text);
SetDlgItemText(InterObjDlg, IDC_INTERTEXT, texx);
return;
}
char typee[16];
strcpy(typee, "X");
if (tvv[i]->io->ioflags & IO_NPC) strcpy(typee, "NPC IO");
if (tvv[i]->io->ioflags & IO_ITEM) strcpy(typee, "ITEM IO");
if (tvv[i]->io->ioflags & IO_FIX) strcpy(typee, "FIX IO");
if (tvv[i]->io->ioflags & IO_CAMERA) strcpy(typee, "Camera");
if (tvv[i]->io->ioflags & IO_MARKER) strcpy(typee, "Marker");
sprintf(texx, "Ident: %s\n%s NumIO %d\nPos X:%d Y:%d Z:%d\nShow %d Lvl %d (%d)"
, tvv[i]->text, typee, GetInterNum(tvv[i]->io), (long)tvv[i]->io->pos.x, (long)tvv[i]->io->pos.y, (long)tvv[i]->io->pos.z,
(long)tvv[i]->io->show, tvv[i]->io->level, tvv[i]->io->truelevel
);
SetDlgItemText(InterObjDlg, IDC_INTERTEXT, texx);
return;
}
}
}
strcpy(texx, "No Interactive Object Selected");
SetDlgItemText(InterObjDlg, IDC_INTERTEXT, texx);
}
LONG CALLBACK InterTreeViewSubClassFunc(HWND hWnd,
UINT uMsg, WORD wParam, LONG lParam)
{
switch (uMsg)
{
case WM_LBUTTONUP:
HTREEITEM hitem;
hitem = TreeView_GetSelection(dlgTreeViewhWnd);
InterTreeViewDisplayInfo(hitem);
break;
}
return CallWindowProc((WNDPROC)lpfnOldWndProc, hWnd, uMsg, wParam,
lParam);
}
void RemoveIOTVItem(HWND tvhwnd, INTERACTIVE_OBJ * io, char * name, long type)
{
if (TVVcount != 0)
if (io != NULL)
{
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (tvv[i]->io == io)
{
TreeView_DeleteItem(tvhwnd, tvv[i]->hti);
free(tvv[i]);
tvv[i] = NULL;
TVVcount--;
while (i < TVVcount)
{
tvv[i] = tvv[i+1];
i++;
}
return;
}
}
}
}
else
{
// path removal
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
if (!stricmp(name, tvv[i]->text))
{
TreeView_DeleteItem(tvhwnd, tvv[i]->hti);
free(tvv[i]);
while (i < TVVcount - 1)
{
tvv[i] = tvv[i+1];
i++;
}
TVVcount--;
return;
}
}
}
}
}
void AddIOTVItem(HWND tvhwnd, INTERACTIVE_OBJ * io, char * name, long type)
{
TVINSERTSTRUCT tis;
HTREEITEM parent = NULL;
char temp[512];
char temp2[512];
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
memset(tvv[TVVcount], 0, sizeof(TVINFO));
if (type == IOTVTYPE_PLAYER) strcpy(temp, "PLAYER");
else if (io != NULL)
{
strcpy(temp, GetName(io->filename));
sprintf(temp2, "_%04d", io->ident);
strcat(temp, temp2);
}
else strcpy(temp, name);
strcpy(tvv[TVVcount]->text, temp);
tvv[TVVcount]->io = io;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
if (type == IOTVTYPE_PLAYER) tis.hParent = hroot;
else if (type == IOTVTYPE_PATH) tis.hParent = hpath;
else if (io)
{
if (io->ioflags & IO_NPC) tis.hParent = hnpc;
if (io->ioflags & IO_FIX) tis.hParent = hfix;
if (io->ioflags & IO_ITEM) tis.hParent = hitem;
if (io->ioflags & IO_CAMERA) tis.hParent = hcam;
if (io->ioflags & IO_MARKER) tis.hParent = hmarker;
}
tis.hInsertAfter = TVI_SORT;
parent = TreeView_InsertItem(tvhwnd, &tis);
tvv[TVVcount]->hti = parent;
TVVcount++;
InterTreeViewDisplayInfo(parent);
}
void FillInterTreeView(HWND tvhwnd)
{
long i;
TVINSERTSTRUCT tis;
HTREEITEM hti = NULL;
TreeView_DeleteAllItems(tvhwnd);
TreeView_SetBkColor(tvhwnd, 0x00000000);
TreeView_SetTextColor(tvhwnd, 0x00FFFFFF);
if (TVVcount != 0)
for (i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
free(tvv[i]);
tvv[i] = NULL;
}
}
TVVcount = 0;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "Root");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = NULL;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hroot = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "Camera");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hcam = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "Marker");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hmarker = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "FIX");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hfix = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "ITEMS");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hitem = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "NPC");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hnpc = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
tvv[TVVcount] = (TVINFO *)malloc(sizeof(TVINFO));
sprintf(tvv[TVVcount]->text, "Path");
tvv[TVVcount]->io = NULL;
memset(&tis, 0, sizeof(TVINSERTSTRUCT));
tis.hParent = hroot;
tis.hInsertAfter = TVI_SORT;
tis.item.mask = TVIS_EXPANDED | TVIF_TEXT | TVIF_CHILDREN | TVIF_STATE;
tis.item.pszText = tvv[TVVcount]->text;
tis.item.cchTextMax = strlen(tvv[TVVcount]->text);
tis.item.cChildren = 1;
hti = TreeView_InsertItem(tvhwnd, &tis);
hpath = hti;
tvv[TVVcount]->hti = hti;
TVVcount++;
InterTreeViewDisplayInfo(hroot);
AddIOTVItem(tvhwnd, inter.iobj[0], NULL, IOTVTYPE_PLAYER);
for (i = 0; i < inter.nbmax; i++)
{
if (inter.iobj[i] != NULL)
{
AddIOTVItem(tvhwnd, inter.iobj[i], NULL, 0);
}
}
TreeView_Expand(tvhwnd, hroot, TVE_EXPAND);
}
void InterTreeViewItemRemove(INTERACTIVE_OBJ * io, char * name, long type)
{
if (InterObjDlg) RemoveIOTVItem(dlgTreeViewhWnd, io, name, type);
}
void InterTreeViewItemAdd(INTERACTIVE_OBJ * io, char * name, long type)
{
if (InterObjDlg) AddIOTVItem(dlgTreeViewhWnd, io, name, type);
}
void LaunchInteractiveObjectsApp(HWND hwnd)
{
if (!danaeApp.m_pDeviceInfo->bWindowed)
return;
if (InterObjDlg) return;
InterObjDlg = CreateDialogParam(
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_INTERDLG),
hwnd,
InteractiveObjDlgProc, 0);
dlgTreeViewhWnd = GetDlgItem(InterObjDlg, IDC_INTERTREEVIEW);
lpfnOldWndProc = (WNDPROC)SetWindowLong(dlgTreeViewhWnd,
GWL_WNDPROC, (DWORD)InterTreeViewSubClassFunc);
FillInterTreeView(dlgTreeViewhWnd);
ShowWindow(InterObjDlg, SW_SHOW);
}
void KillInterTreeView()
{
if (InterObjDlg)
{
if (TVVcount != 0)
for (long i = 0; i < TVVcount; i++)
{
if (tvv[i] != NULL)
{
free(tvv[i]);
tvv[i] = NULL;
}
}
EndDialog(InterObjDlg, TRUE);
InterObjDlg = NULL;
}
}
char rett[128];
extern long FINAL_COMMERCIAL_DEMO;
//-----------------------------------------------------------------------------------
char * GetVersionString()
{
char temp[128];
char result[128];
if (FINAL_COMMERCIAL_DEMO)
strcpy(temp, " SCDaAe$!m^;o|(_______"); //Demo v1.0
else
strcpy(temp, _ARX_FINAL_VERSION_ );
long length = strlen(temp);
long pos = 0;
for (long i = 0; i < length; i += 3)
{
if (temp[i] != '_')
result[pos++] = temp[i];
else
result[pos++] = 0;
}
strcpy(rett, result);
return rett;
}
//*************************************************************************************
// Sets DANAE Main Window Title
//*************************************************************************************
void SetWindowTitle(HWND hWnd, char * tex)
{
char texx[512];
strcpy(texx, tex);
strcat(texx, GetVersionString());
SetWindowText(hWnd, texx);
}
HWND SnapShotDlg = NULL;
void LaunchSnapShotParamApp(HWND hwnd)
{
if (SnapShotDlg) return;
SnapShotDlg = CreateDialogParam(
(HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_SNAPSHOT),
hwnd,
SnapShotDlgProc, 0);
}
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK SnapShotDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
char temp[256];
HWND thWnd;
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_16BITS:
if (snapshotdata.bits == 16) snapshotdata.bits = 24;
else snapshotdata.bits = 16;
thWnd = GetDlgItem(hWnd, IDC_16BITS);
if (snapshotdata.bits == 16) SetWindowText(thWnd, "16 Bits");
else SetWindowText(thWnd, "24 Bits");
break;
case IDC_SETPATH:
HERMESFolderSelector(snapshotdata.path, "Choose Working Folder");
thWnd = GetDlgItem(hWnd, IDC_SETPATH);
SetWindowText(thWnd, snapshotdata.path);
break;
case IDOK:
thWnd = GetDlgItem(hWnd, IDC_IMAGESSEC);
GetWindowText(thWnd, temp, 5);
snapshotdata.imgsec = atoi(temp);
if (snapshotdata.imgsec < 1) snapshotdata.imgsec = 1;
if (snapshotdata.imgsec > 100) snapshotdata.imgsec = 100;
thWnd = GetDlgItem(hWnd, IDC_XSIZE);
GetWindowText(thWnd, temp, 5);
snapshotdata.xsize = atoi(temp);
if (snapshotdata.xsize < 1) snapshotdata.xsize = 1;
if (snapshotdata.xsize > 640) snapshotdata.xsize = 640;
thWnd = GetDlgItem(hWnd, IDC_YSIZE);
GetWindowText(thWnd, temp, 5);
snapshotdata.ysize = atoi(temp);
if (snapshotdata.ysize < 1) snapshotdata.ysize = 1;
if (snapshotdata.ysize > 480) snapshotdata.ysize = 480;
if (IsChecked(hWnd, IDC_MEMORYCACHE)) snapshotdata.flag |= 1;
else snapshotdata.flag &= ~1;
thWnd = GetDlgItem(hWnd, IDC_EDITFILENAMES);
GetWindowText(thWnd, temp, 128);
strcpy(snapshotdata.filenames, temp);
SnapShotDlg = NULL;
EndDialog(hWnd, TRUE);
break;
case IDCANCELSNAP:
if (SnapShotMode)
{
FlushMemorySnaps(0);
SnapShotMode = 0;
thWnd = GetDlgItem(hWnd, IDSTARTSNAPSHOT);
SetWindowText(thWnd, "Start Snapshot");
CURRENTSNAPNUM = 0;
}
break;
case IDSTARTSNAPSHOT:
thWnd = GetDlgItem(hWnd, IDC_IMAGESSEC);
GetWindowText(thWnd, temp, 5);
snapshotdata.imgsec = atoi(temp);
if (snapshotdata.imgsec < 1) snapshotdata.imgsec = 1;
if (snapshotdata.imgsec > 100) snapshotdata.imgsec = 100;
thWnd = GetDlgItem(hWnd, IDC_XSIZE);
GetWindowText(thWnd, temp, 5);
snapshotdata.xsize = atoi(temp);
if (snapshotdata.xsize < 1) snapshotdata.xsize = 1;
if (snapshotdata.xsize > 640) snapshotdata.xsize = 640;
thWnd = GetDlgItem(hWnd, IDC_YSIZE);
GetWindowText(thWnd, temp, 5);
snapshotdata.ysize = atoi(temp);
if (snapshotdata.ysize < 1) snapshotdata.ysize = 1;
if (snapshotdata.ysize > 480) snapshotdata.ysize = 480;
if (IsChecked(hWnd, IDC_MEMORYCACHE)) snapshotdata.flag |= 1;
else snapshotdata.flag &= ~1;
thWnd = GetDlgItem(hWnd, IDC_EDITFILENAMES);
GetWindowText(thWnd, temp, 128);
strcpy(snapshotdata.filenames, temp);
thWnd = GetDlgItem(hWnd, IDSTARTSNAPSHOT);
if (SnapShotMode)
{
FlushMemorySnaps(1);
SnapShotMode = 0;
SetWindowText(thWnd, "Start Snapshot");
}
else
{
long nb = InitMemorySnaps();
SnapShotMode = 1;
char temp[64];
sprintf(temp, "%d Stop", nb);
SetWindowText(thWnd, temp);
}
CURRENTSNAPNUM = 0;
break;
}
break;
case WM_INITDIALOG:
thWnd = GetDlgItem(hWnd, IDSTARTSNAPSHOT);
if (SnapShotMode) SetWindowText(thWnd, "Stop Snapshot");
else SetWindowText(thWnd, "Start Snapshot");
thWnd = GetDlgItem(hWnd, IDC_16BITS);
if (snapshotdata.bits == 16) SetWindowText(thWnd, "16 bits");
else SetWindowText(thWnd, "24 bits");
thWnd = GetDlgItem(hWnd, IDC_EDITFILENAMES);
SetWindowText(thWnd, snapshotdata.filenames);
thWnd = GetDlgItem(hWnd, IDC_SETPATH);
SetWindowText(thWnd, snapshotdata.path);
thWnd = GetDlgItem(hWnd, IDC_XSIZE);
sprintf(temp, "%d", snapshotdata.xsize);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_YSIZE);
sprintf(temp, "%d", snapshotdata.ysize);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_IMAGESSEC);
sprintf(temp, "%d", snapshotdata.imgsec);
SetWindowText(thWnd, temp);
if (snapshotdata.flag & 1) SetCheck(hWnd, IDC_MEMORYCACHE, CHECK);
return TRUE;
break;
case WM_CLOSE:
SnapShotDlg = NULL;
EndDialog(hWnd, TRUE);
break;
}
return FALSE;
}
//*************************************************************************************
long THREAD_MINX = 0;
long THREAD_MINZ = 0;
long THREAD_MAXX = 0;
long THREAD_MAXZ = 0;
long PAUSED_PRECALC = 0;
HWND PRECALC = NULL;
long LIGHT_THREAD_STATUS = 0; // 0=not created EXITED_LIGHT_THREAD=0;
// 1=working
// 2=finished exited
// 3=immediate exit !
LPTHREAD_START_ROUTINE EERIE_LIGHT_LightProc(char * ts)
{
LIGHT_THREAD_STATUS = 1;
EERIEPrecalcLights(THREAD_MINX, THREAD_MINZ, THREAD_MAXX, THREAD_MAXZ);
LIGHT_THREAD_STATUS = 2;
ExitThread(1);
return 0;
}
//*************************************************************************************
// "Clean" Kill for light thread
//*************************************************************************************
void KillLightThread()
{
if (LIGHT_THREAD_STATUS == 2)
{
CloseHandle(LIGHTTHREAD);
LIGHTTHREAD = NULL;
LIGHT_THREAD_STATUS = 0;
}
if ((LIGHT_THREAD_STATUS == 1) || (LIGHT_THREAD_STATUS == 3))
{
LIGHT_THREAD_STATUS = 3;
while (LIGHT_THREAD_STATUS != 2)
Sleep(10);
CloseHandle(LIGHTTHREAD);
LIGHTTHREAD = NULL;
LIGHT_THREAD_STATUS = 0;
}
}
//*************************************************************************************
//*************************************************************************************
void LaunchLightThread(long minx, long minz, long maxx, long maxz)
{
char args;
DWORD id;
if (LIGHT_THREAD_STATUS == 2)
{
CloseHandle(LIGHTTHREAD);
LIGHTTHREAD = NULL;
LIGHT_THREAD_STATUS = 0;
}
if ((LIGHT_THREAD_STATUS == 1) || (LIGHT_THREAD_STATUS == 3))
{
LIGHT_THREAD_STATUS = 3;
while (LIGHT_THREAD_STATUS != 2)
Sleep(10);
CloseHandle(LIGHTTHREAD);
LIGHTTHREAD = NULL;
LIGHT_THREAD_STATUS = 0;
}
if (PRECALC == NULL)
{
if (danaeApp.m_pFramework->m_bIsFullscreen)
{
ARX_TIME_Pause();
DialogBox((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_PRECALC), danaeApp.m_hWnd, PrecalcProc);
ARX_TIME_UnPause();
}
else
PRECALC = (CreateDialogParam((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_PRECALC), danaeApp.m_hWnd, PrecalcProc, 0));
}
THREAD_MINX = minx;
THREAD_MINZ = minz;
THREAD_MAXX = maxx;
THREAD_MAXZ = maxz;
LIGHTTHREAD = (HANDLE)CreateThread(
NULL, //pointer to security attributes
0, // initial thread stack size
(LPTHREAD_START_ROUTINE) EERIE_LIGHT_LightProc, // pointer to thread function
(LPVOID)&args, // argument for new thread
0, // creation flags
(LPDWORD)&id // pointer to receive thread ID
);
}
long SYNTAXCHECKING = 0;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK PrecalcProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND thWnd;
switch (uMsg)
{
case WM_MOVE:
if (danaeApp.m_pDeviceInfo->bWindowed)
{
RECT rect1, rect2;
GetWindowRect(danaeApp.m_hWnd, &rect1);
GetWindowRect(hWnd, &rect2);
long posx = rect2.left - rect1.left;
long posy = rect2.top - rect1.top;
Danae_Registry_WriteValue("WND_LightPrecalc_POSX", posx);
Danae_Registry_WriteValue("WND_LightPrecalc_POSY", posy);
}
break;
case WM_TIMER:
thWnd = GetDlgItem(hWnd, IDC_PROGRESS);
float t;
t = (float)PROGRESS_COUNT / (float)PROGRESS_TOTAL * 1000.f;
SendMessage(thWnd, PBM_SETRANGE , 0, MAKELPARAM(0, 1000));
SendMessage(thWnd, PBM_SETPOS , (long)t, 0);
thWnd = GetDlgItem(hWnd, IDC_STATICC);
if (PAUSED_PRECALC) SetWindowText(thWnd, "Paused");
else if (LIGHTTHREAD != NULL)
{
char tex[32];
t *= DIV10;
sprintf(tex, "Working... ( %d%% )", (long)t);
SetWindowText(thWnd, tex);
}
else
{
SetWindowText(thWnd, "Idle...");
PROGRESS_COUNT = PROGRESS_TOTAL;
SendMessage(thWnd, PBM_SETPOS , 1000, 0);
if (danaeApp.m_pFramework->m_bIsFullscreen)
{
PRECALC = NULL;
KillTimer(hWnd, 1);
EndDialog(hWnd, TRUE);
return FALSE;
}
}
break;
case WM_COMMAND:
if (ID_PAUSE == LOWORD(wParam))
{
if (PAUSED_PRECALC)
{
thWnd = GetDlgItem(hWnd, ID_PAUSE);
SetWindowText(thWnd, "Pause");
PAUSED_PRECALC = 0;
}
else
{
thWnd = GetDlgItem(hWnd, ID_PAUSE);
SetWindowText(thWnd, "Resume");
PAUSED_PRECALC = 1;
}
}
if (ID_STOP == LOWORD(wParam))
{
if (LIGHTTHREAD != NULL)
{
TerminateThread(LIGHTTHREAD, 1);
LIGHTTHREAD = NULL;
}
}
if (ID_RECALCULATE == LOWORD(wParam))
{
LaunchLightThread(0, 0, 999999, 9999999);
}
if (ID_AROUND == LOWORD(wParam))
{
RecalcLightZone(player.pos.x, player.pos.y, player.pos.z, 2);
}
break;
case WM_CLOSE:
PRECALC = NULL;
KillTimer(hWnd, 1);
EndDialog(hWnd, TRUE);
return FALSE;
break;
case WM_INITDIALOG:
if (danaeApp.m_pDeviceInfo->bWindowed)
{
long posx, posy;
Danae_Registry_ReadValue("WND_LightPrecalc_POSX", &posx, 0);
Danae_Registry_ReadValue("WND_LightPrecalc_POSY", &posy, 0);
if ((posx != -1) && (posy != -1)
&& (posx < 1000) && (posx > 0)
&& (posy < 1000) && (posy > 0)
)
{
RECT rect1;
GetWindowRect(danaeApp.m_hWnd, &rect1);
posx = rect1.left + posx;
posy = rect1.left + posy;
if (posx < 0) posx = 0;
if (posy < 0) posy = 0;
SetWindowPos(hWnd, NULL, posx, posy, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
}
PRECALC = hWnd;
SetTimer(hWnd, 1, 100, NULL);
thWnd = GetDlgItem(hWnd, IDC_PROGRESS);
SendMessage(thWnd, PBM_SETRANGE , 0, MAKELPARAM(0, 1000));
SendMessage(thWnd, PBM_SETPOS , 0, 0);
SendMessage(thWnd, PBM_SETBKCOLOR , 0, 0);
SendMessage(thWnd, PBM_SETBARCOLOR , 0, 0xFF0000FF);
thWnd = GetDlgItem(hWnd, IDC_STATICC);
SetWindowText(thWnd, "Idle");
return TRUE;
break;
}
return FALSE;
}
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK GaiaTextEdit(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM)
{
HWND thWnd;
if (WM_COMMAND == uMsg)
{
if (IDOK == LOWORD(wParam))
{
thWnd = GetDlgItem(hWnd, IDC_TEXTEDIT);
GetWindowText(thWnd, GTE_TEXT, GTE_SIZE - 1);
EndDialog(hWnd, TRUE);
}
if (IDCANCEL == LOWORD(wParam))
EndDialog(hWnd, TRUE);
}
if (uMsg == WM_INITDIALOG)
{
SetWindowText(hWnd, GTE_TITLE);
thWnd = GetDlgItem(hWnd, IDC_TEXTEDIT);
SetWindowText(thWnd, GTE_TEXT);
return TRUE;
}
return FALSE;
}
void ExitProc();
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK StartProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
long val;
HWND thWnd;
switch (uMsg)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_LAUNCHDEMO:
LaunchDemo = 1;
case IDOK:
if (IsChecked(hWnd, IDC_FASTLOADING)) FASTLOADS = 1;
else FASTLOADS = 0;
if (IsChecked(hWnd, IDC_NODIRCREATION)) NODIRCREATION = 1;
else NODIRCREATION = 0;
if (IsChecked(hWnd, IDC_SOUND))
{
Project.soundmode &= ~ARX_SOUND_ON;
EnableWindow(GetDlgItem(hWnd, IDC_REVERB), FALSE);
SetCheck(hWnd, IDC_REVERB, UNCHECK);
}
else
{
Project.soundmode |= ARX_SOUND_ON;
EnableWindow(GetDlgItem(hWnd, IDC_REVERB), TRUE);
if (IsChecked(hWnd, IDC_REVERB)) Project.soundmode |= ARX_SOUND_REVERB;
else Project.soundmode &= ~ARX_SOUND_REVERB;
}
Project.bits = 32;
if (IsChecked(hWnd, IDC_SYNTAXCHECKING)) SYNTAXCHECKING = 1;
else SYNTAXCHECKING = 0;
if (IsChecked(hWnd, IDC_NOCHECKSUM)) NOCHECKSUM = 1;
else NOCHECKSUM = 0;
if (IsChecked(hWnd, IDC_LOADDEMO)) Project.demo = LEVELDEMO;
if (IsChecked(hWnd, IDC_LOADDEMO2)) Project.demo = LEVELDEMO2;
if (IsChecked(hWnd, IDC_LOADDEMO3)) Project.demo = LEVELDEMO3;
if (IsChecked(hWnd, IDC_LOADDEMO4)) Project.demo = LEVELDEMO4;
if (IsChecked(hWnd, IDC_TLEVEL0)) Project.demo = LEVEL0;
if (IsChecked(hWnd, IDC_TLEVEL1)) Project.demo = LEVEL1;
if (IsChecked(hWnd, IDC_TLEVEL2)) Project.demo = LEVEL2;
if (IsChecked(hWnd, IDC_TLEVEL3)) Project.demo = LEVEL3;
if (IsChecked(hWnd, IDC_TLEVEL4)) Project.demo = LEVEL4;
if (IsChecked(hWnd, IDC_TLEVEL5)) Project.demo = LEVEL5;
if (IsChecked(hWnd, IDC_TLEVEL6)) Project.demo = LEVEL6;
if (IsChecked(hWnd, IDC_TLEVEL7)) Project.demo = LEVEL7;
if (IsChecked(hWnd, IDC_TLEVEL8)) Project.demo = LEVEL8;
if (IsChecked(hWnd, IDC_TLEVEL9)) Project.demo = LEVEL9;
if (IsChecked(hWnd, IDC_TLEVEL10)) Project.demo = LEVEL10;
if (IsChecked(hWnd, IDC_TLEVEL11)) Project.demo = LEVEL11;
if (IsChecked(hWnd, IDC_TLEVEL12)) Project.demo = LEVEL12;
if (IsChecked(hWnd, IDC_TLEVEL13)) Project.demo = LEVEL13;
if (IsChecked(hWnd, IDC_TLEVEL14)) Project.demo = LEVEL14;
if (IsChecked(hWnd, IDC_TLEVEL15)) Project.demo = LEVEL15;
if (IsChecked(hWnd, IDC_TLEVEL16)) Project.demo = LEVEL16;
if (IsChecked(hWnd, IDC_TLEVEL17)) Project.demo = LEVEL17;
if (IsChecked(hWnd, IDC_TLEVEL18)) Project.demo = LEVEL18;
if (IsChecked(hWnd, IDC_TLEVEL19)) Project.demo = LEVEL19;
if (IsChecked(hWnd, IDC_TLEVEL20)) Project.demo = LEVEL20;
if (IsChecked(hWnd, IDC_TLEVEL21)) Project.demo = LEVEL21;
if (IsChecked(hWnd, IDC_TLEVEL22)) Project.demo = LEVEL22;
if (IsChecked(hWnd, IDC_TLEVEL23)) Project.demo = LEVEL23;
if (IsChecked(hWnd, IDC_TLEVEL24)) Project.demo = LEVEL24;
if (IsChecked(hWnd, IDC_TRACEMEMORY)) HERMES_KEEP_MEMORY_TRACE = 1;
else HERMES_KEEP_MEMORY_TRACE = 0;
if (IsChecked(hWnd, IDC_NEED_ANCHOR)) NEED_ANCHORS = 1;
else NEED_ANCHORS = 0;
if (IsChecked(hWnd, IDC_MULTIPLAYER)) Project.multiplayer = 1;
else Project.multiplayer = 0;
if (IsChecked(hWnd, IDC_COMPATIBILITY)) Project.compatibility = 1;
else Project.compatibility = 0;
if (IsChecked(hWnd, IDC_OTHERSERVER))
{
thWnd = GetDlgItem(hWnd, IDC_OTHERSERVER);
GetWindowText(thWnd, Project.workingdir, 256);
}
else strcpy(Project.workingdir, "\\\\ARKANESERVER\\Public\\Arx\\");
char tteexx[512];
strcpy(tteexx, Project.workingdir);
strcat(tteexx, "GRAPH\\LEVELS\\");
_chdir(tteexx);
thWnd = GetDlgItem(hWnd, IDC_TEXTUREPRECISION);
val = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
switch (val)
{
case 1:
Project.TextureSize = 32;
break;
case 2:
Project.TextureSize = 64;
break;
case 3:
Project.TextureSize = 96;
break;
case 4:
Project.TextureSize = 128;
break;
case 5:
Project.TextureSize = 192;
break;
case 6:
Project.TextureSize = 256;
break;
case 7:
Project.TextureSize = 2;
break;
default:
Project.TextureSize = 0;
}
if (IsChecked(hWnd, IDC_TEX16)) Project.TextureBits = 16;
else Project.TextureBits = 32;
Danae_Registry_Write("LastWorkingDir", Project.workingdir);
EndDialog(hWnd, TRUE);
break;
case IDQUIT:
EndDialog(hWnd, TRUE);
ExitProc();
break;
case IDC_CHOOSEDIR:
thWnd = GetDlgItem(hWnd, IDC_OTHERSERVER);
SendMessage(thWnd, BM_CLICK, 0, 0);
HERMESFolderSelector(Project.workingdir, "Choose Working Folder");
if (!strcmp(Project.workingdir, "A:\\\\")) strcpy(Project.workingdir, "A:\\");
if (!strcmp(Project.workingdir, "B:\\\\")) strcpy(Project.workingdir, "B:\\");
if (!strcmp(Project.workingdir, "C:\\\\")) strcpy(Project.workingdir, "C:\\");
if (!strcmp(Project.workingdir, "D:\\\\")) strcpy(Project.workingdir, "D:\\");
if (!strcmp(Project.workingdir, "E:\\\\")) strcpy(Project.workingdir, "E:\\");
if (!strcmp(Project.workingdir, "F:\\\\")) strcpy(Project.workingdir, "F:\\");
if (!strcmp(Project.workingdir, "G:\\\\")) strcpy(Project.workingdir, "G:\\");
if (!strcmp(Project.workingdir, "H:\\\\")) strcpy(Project.workingdir, "H:\\");
if (!strcmp(Project.workingdir, "I:\\\\")) strcpy(Project.workingdir, "I:\\");
if (!strcmp(Project.workingdir, "J:\\\\")) strcpy(Project.workingdir, "J:\\");
if (!strcmp(Project.workingdir, "K:\\\\")) strcpy(Project.workingdir, "K:\\");
if (!strcmp(Project.workingdir, "L:\\\\")) strcpy(Project.workingdir, "L:\\");
if (!strcmp(Project.workingdir, "M:\\\\")) strcpy(Project.workingdir, "M:\\");
if (!strcmp(Project.workingdir, "N:\\\\")) strcpy(Project.workingdir, "N:\\");
if (!strcmp(Project.workingdir, "O:\\\\")) strcpy(Project.workingdir, "O:\\");
if (!strcmp(Project.workingdir, "P:\\\\")) strcpy(Project.workingdir, "P:\\");
if (!strcmp(Project.workingdir, "Q:\\\\")) strcpy(Project.workingdir, "Q:\\");
if (!strcmp(Project.workingdir, "R:\\\\")) strcpy(Project.workingdir, "R:\\");
if (!strcmp(Project.workingdir, "S:\\\\")) strcpy(Project.workingdir, "S:\\");
if (!strcmp(Project.workingdir, "T:\\\\")) strcpy(Project.workingdir, "T:\\");
if (!strcmp(Project.workingdir, "U:\\\\")) strcpy(Project.workingdir, "U:\\");
if (!strcmp(Project.workingdir, "V:\\\\")) strcpy(Project.workingdir, "V:\\");
if (!strcmp(Project.workingdir, "W:\\\\")) strcpy(Project.workingdir, "W:\\");
if (!strcmp(Project.workingdir, "X:\\\\")) strcpy(Project.workingdir, "X:\\");
if (!strcmp(Project.workingdir, "Y:\\\\")) strcpy(Project.workingdir, "Y:\\");
if (!strcmp(Project.workingdir, "Z:\\\\")) strcpy(Project.workingdir, "Z:\\");
SetWindowText(thWnd, Project.workingdir);
Danae_Registry_Write("LastWorkingDir", Project.workingdir);
break;
}
break;
case WM_NOTIFY:
long val;
char temp[64];
thWnd = GetDlgItem(hWnd, IDC_TEXTUREPRECISION);
val = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATICC);
switch (val)
{
case 1:
sprintf(temp, "Texture Size: 32x32");
break;
case 2:
sprintf(temp, "Texture Size: 64x64");
break;
case 3:
sprintf(temp, "Texture Size: 96x96");
break;
case 4:
sprintf(temp, "Texture Size: 128x128");
break;
case 5:
sprintf(temp, "Texture Size: 192x192");
break;
case 6:
sprintf(temp, "Texture Size: 256x256");
break;
case 7:
sprintf(temp, "Texture Size: DIV2");
break;
default:
sprintf(temp, "Texture Size: ANY");
}
SetWindowText(thWnd, temp);
break;
case WM_INITDIALOG:
HWND thWnd;
char tex[128];
thWnd = GetDlgItem(hWnd, IDC_NODIRCREATION);
if (NODIRCREATION) SendMessage(thWnd, BM_CLICK, 0, 0);
thWnd = GetDlgItem(hWnd, IDC_VERSION);
sprintf(tex, "Ver.%2.3f", DANAE_VERSION);
SetWindowText(thWnd, tex);
Danae_Registry_Read("LastWorkingDir", Project.workingdir, "c:\\arx\\", 256);
thWnd = GetDlgItem(hWnd, IDC_OTHERSERVER);
SetWindowText(thWnd, Project.workingdir);
if (HERMES_KEEP_MEMORY_TRACE) SetClick(hWnd, IDC_TRACEMEMORY);
SetClick(hWnd, IDC_OTHERSERVER);
if (!(Project.soundmode & ARX_SOUND_ON)) SetClick(hWnd, IDC_SOUND);
SetClick(hWnd, IDC_LOADDEMO);
if (NOCHECKSUM) SetClick(hWnd, IDC_NOCHECKSUM);
if (SYNTAXCHECKING) SetClick(hWnd, IDC_SYNTAXCHECKING);
SetClick(hWnd, IDC_TEX16);
thWnd = GetDlgItem(hWnd, IDC_TEXTUREPRECISION);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 8));
long t = 8;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
if (NEED_ANCHORS) SetClick(hWnd, IDC_NEED_ANCHOR);
return TRUE;
break;
}
return FALSE;
}
char SCRIPT_SEARCH_TEXT[256];
BOOL CALLBACK ScriptSearchProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM)
{
if (WM_COMMAND == uMsg)
{
switch (LOWORD(wParam))
{
case IDOK:
HWND thWnd;
thWnd = GetDlgItem(hWnd, IDC_SEARCHEDIT);
GetWindowText(thWnd, SCRIPT_SEARCH_TEXT, 255);
EndDialog(hWnd, TRUE);
break;
case IDCANCEL:
EndDialog(hWnd, TRUE);
break;
}
}
if (uMsg == WM_INITDIALOG)
{
SCRIPT_SEARCH_TEXT[0] = 0;
HWND thWnd;
thWnd = GetDlgItem(hWnd, IDC_SEARCHEDIT);
SetFocus(thWnd);
return TRUE;
}
return FALSE;
}
//*************************************************************************************
// AboutProc()
// message proc function for the about box
//*************************************************************************************
BOOL CALLBACK AboutProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM)
{
if (WM_COMMAND == uMsg)
if (IDOK == LOWORD(wParam) || IDCANCEL == LOWORD(wParam))
EndDialog(hWnd, TRUE);
if (uMsg == WM_INITDIALOG)
{
HWND thWnd;
char tex[128];
thWnd = GetDlgItem(hWnd, IDC_ABOUT_VERSION);
sprintf(tex, "Ver.%2.3f", DANAE_VERSION);
SetWindowText(thWnd, tex);
return TRUE;
}
return FALSE;
}
extern long DEBUGSYS;
extern long DBGSETTEXTURE;
extern long USEINTERNORM;
long oml;
extern float BIGLIGHTPOWER;
extern long DEBUGCODE;
extern long TRUEFIGHT;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK OptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND thWnd;
static long wuz;
switch (uMsg)
{
case WM_INITDIALOG :
{
ARX_SOUND_MixerPause(ARX_SOUND_MixerGame);
oml = ModeLight;
char tex[64];
thWnd = GetDlgItem(hWnd, IDC_EDITNBINTERPOLATIONS);
sprintf(tex, "%d", MOLLESS_Nb_Interpolations);
SetWindowText(thWnd, tex);
if (ARX_DEMO) SetClick(hWnd, IDC_ARXDEMO);
if (SYNTAXCHECKING) SetClick(hWnd, IDC_SYNTAXCHECK);
if (ZMAPMODE) SetClick(hWnd, IDC_ZMAPMODE);
if (DEBUGCODE) SetClick(hWnd, IDC_DEBUGCODE);
if (HIPOLY) SetClick(hWnd, IDC_HPO);
if (Project.interpolatemouse) SetClick(hWnd, IDC_INTERPOLATEMOUSE);
if (Project.vsync) SetClick(hWnd, IDC_VSYNC);
if (TRUECLIPPING) SetClick(hWnd, IDC_TRUECLIPPING);
if (SHOWSHADOWS) SetClick(hWnd, IDC_SHOWSHADOWS);
if (A_FLARES) SetClick(hWnd, IDC_FLARES);
if (LIGHTPOWERUP) SetClick(hWnd, IDC_LIGHTPOWERUP);
if (INVERTMOUSE) SetClick(hWnd, IDC_INVERTMOUSE);
if (Project.bits == 16) SetClick(hWnd, IDC_FULLRENDER16BITS);
if (Project.bits == 32) SetClick(hWnd, IDC_FULLRENDER32BITS);
if (DEBUG1ST) SetClick(hWnd, IDC_DEBUG1ST);
if (DEBUGSYS) SetClick(hWnd, IDC_DEBUGSYS);
if (DEBUGNPCMOVE) SetClick(hWnd, IDC_DEBUGNPCMOVE);
if (DEBUG_MOLLESS) SetClick(hWnd, IDC_DEBUGMOLLESS);
if (DYNAMIC_NORMALS) SetClick(hWnd, IDC_DYNAMICNORMALS);
if (DBGSETTEXTURE) SetClick(hWnd, IDC_SETTEXTURE);
if (ViewMode & VIEWMODE_WIRE) SetClick(hWnd, IDC_WIREFRAME);
if (TRUEFIGHT) SetClick(hWnd, IDC_TRUEFIGHT);
if (USE_D3DFOG) SetClick(hWnd, IDC_USED3DFOG);
if (ModeLight & MODE_STATICLIGHT)
{
SetClick(hWnd, IDC_SHOWLIGHTSNSHADOWS);
wuz = 1;
}
else wuz = 0;
if (ModeLight & MODE_NORMALS) SetClick(hWnd, IDC_ILLUMNORMAL);
if (ModeLight & MODE_RAYLAUNCH) SetClick(hWnd, IDC_ILLUMRAYLAUNCH);
if (ModeLight & MODE_SMOOTH) SetClick(hWnd, IDC_ILLUMSMOOTH);
if (ModeLight & MODE_DYNAMICLIGHT) SetClick(hWnd, IDC_TORCHHALO);
if (USE_COLLISIONS) SetClick(hWnd, IDC_COLLISIONS);
if (USE_PLAYERCOLLISIONS) SetClick(hWnd, IDC_PLAYERCOLLISIONS);
if (SHOW_TORCH) SetClick(hWnd, IDC_TORCHHALO2);
if (ViewMode & VIEWMODE_NORMALS) SetClick(hWnd, IDC_SHOWNORMALS);
if (ModeLight & MODE_DEPTHCUEING) SetClick(hWnd, IDC_SHOWDEPTH);
if (ViewMode & VIEWMODE_INFOTEXT) SetClick(hWnd, IDC_INFOTEXT);
if (ViewMode & VIEWMODE_FLAT) SetClick(hWnd, IDC_NOTEXTURES);
if (Cross) SetClick(hWnd, IDC_RAY);
if (USEINTERNORM) SetClick(hWnd, IDC_INTERNORM);
if (EXTERNALVIEWING) SetClick(hWnd, IDC_THIRDPERSON);
if (DebugLvl[0]) SetClick(hWnd, IDC_LEVELNONE);
if (DebugLvl[1]) SetClick(hWnd, IDC_LEVEL1);
if (DebugLvl[2]) SetClick(hWnd, IDC_LEVEL2);
if (DebugLvl[3]) SetClick(hWnd, IDC_LEVEL3);
if (DebugLvl[4]) SetClick(hWnd, IDC_LEVEL4);
if (DebugLvl[5]) SetClick(hWnd, IDC_LEVEL5);
if (Bilinear == 0) SetClick(hWnd, IDC_FILTERPOINT);
else if (Bilinear == 1) SetClick(hWnd, IDC_FILTERLINEAR);
else if (Bilinear == 2) SetClick(hWnd, IDC_FILTERANISOTROPIC);
if (MAPUPDATE) SetClick(hWnd, IDC_MAPUPDATE);
if (BLURTEXTURES) SetClick(hWnd, IDC_BLURTEXTURES);
if (NOMIPMAPS) SetClick(hWnd, IDC_NOMIPMAPS);
if (POINTINTERPOLATION) SetClick(hWnd, IDC_POINTINTERPOLATION);
if (ALLOW_MESH_TWEAKING) SetClick(hWnd, IDC_MESHTWEAK);
thWnd = GetDlgItem(hWnd, IDC_SLIDERDEPTH);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1000, 8000));
long t = (long)subj.cdepth;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_POWERSLIDER);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 10));
t = (long)LPpower;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_POWERSLIDER2);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 50));
t = (long)(BIGLIGHTPOWER * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_TIMESLIDER);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 200));
t = (long)(TIMEFACTOR * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_D3DTRANSFORM);
if (D3DTRANSFORM) SendMessage(thWnd, BM_CLICK, 0, 0);
if (!ARX_SOUND_IsEnabled())
{
SetCheck(hWnd, IDC_DISABLESOUND, CHECK);
EnableWindow(GetDlgItem(hWnd, IDC_REVERB), FALSE);
}
else if (ARX_SOUND_IsReverbEnabled()) SetCheck(hWnd, IDC_REVERB, CHECK);
return TRUE;
}
case WM_DESTROY :
ARX_SOUND_MixerResume(ARX_SOUND_MixerGame);
break;
case WM_COMMAND :
{
switch (LOWORD(wParam))
{
case IDC_TIMEFACTOR :
{
TIMEFACTOR = 1.f;
long t = (long)(TIMEFACTOR * 100.f);
thWnd = GetDlgItem(hWnd, IDC_TIMESLIDER);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
break;
}
case IDC_BKGCOLOR :
{
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = hWnd;
cc.hInstance = 0; //Ignored
cc.rgbResult = ((subj.bkgcolor >> 16 & 255))
| ((subj.bkgcolor >> 8 & 255) << 8)
| ((subj.bkgcolor & 255) << 16);
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
ChooseColor(&cc);
subj.bkgcolor = ((cc.rgbResult >> 16 & 255))
| ((cc.rgbResult >> 8 & 255) << 8)
| ((cc.rgbResult & 255) << 16);
break;
}
case IDC_DISABLESOUND :
if (IsChecked(hWnd, IDC_DISABLESOUND))
EnableWindow(GetDlgItem(hWnd, IDC_REVERB), FALSE);
else
EnableWindow(GetDlgItem(hWnd, IDC_REVERB), TRUE);
break;
case IDC_DEPTHDEFAULT :
SendMessage(GetDlgItem(hWnd, IDC_SLIDERDEPTH), TBM_SETPOS, TRUE, (LPARAM)(2800));
break;
case IDOK :
{
if (IsChecked(hWnd, IDC_DISABLESOUND)) ARX_SOUND_Release();
else
{
if (!ARX_SOUND_IsEnabled()) ARX_SOUND_Init(danaeApp.m_hWnd);
ARX_SOUND_EnableReverb(IsChecked(hWnd, IDC_REVERB) ? 1 : 0);
}
long restoretex = 0;
if (IsChecked(hWnd, IDC_BLURTEXTURES))
{
if (BLURTEXTURES != 1)
{
BLURTEXTURES = 1;
restoretex = 1;
}
}
else if (BLURTEXTURES != 0)
{
BLURTEXTURES = 0;
restoretex = 1;
}
if (IsChecked(hWnd, IDC_NOMIPMAPS))
{
if (NOMIPMAPS != 1)
{
NOMIPMAPS = 1;
restoretex = 1;
}
}
else if (NOMIPMAPS != 0)
{
NOMIPMAPS = 0;
restoretex = 1;
}
if (restoretex) D3DTextr_RestoreAllTextures(GDevice);
if (IsChecked(hWnd, IDC_POINTINTERPOLATION)) POINTINTERPOLATION = 1;
else POINTINTERPOLATION = 0;
if (IsChecked(hWnd, IDC_INTERPOLATEMOUSE)) Project.interpolatemouse = 1;
else Project.interpolatemouse = 0;
if (IsChecked(hWnd, IDC_USED3DFOG)) USE_D3DFOG = 1;
else USE_D3DFOG = 0;
if (IsChecked(hWnd, IDC_TRUEFIGHT)) TRUEFIGHT = 1;
else TRUEFIGHT = 0;
if (IsChecked(hWnd, IDC_DEBUGCODE)) DEBUGCODE = 1;
else DEBUGCODE = 0;
if (IsChecked(hWnd, IDC_HPO)) HIPOLY = 1;
else HIPOLY = 0;
if (IsChecked(hWnd, IDC_ARXDEMO)) ARX_DEMO = 1;
else ARX_DEMO = 0;
if (IsChecked(hWnd, IDC_SYNTAXCHECK)) SYNTAXCHECKING = 1;
else SYNTAXCHECKING = 0;
if (IsChecked(hWnd, IDC_VSYNC)) Project.vsync = 1;
else Project.vsync = 0;
if (IsChecked(hWnd, IDC_ZMAPMODE)) ZMAPMODE = 1;
else ZMAPMODE = 0;
if (IsChecked(hWnd, IDC_LIGHTPOWERUP)) LIGHTPOWERUP = 1;
else LIGHTPOWERUP = 0;
if (IsChecked(hWnd, IDC_SHOWSHADOWS)) SHOWSHADOWS = 1;
else SHOWSHADOWS = 0;
if (IsChecked(hWnd, IDC_TRUECLIPPING)) TRUECLIPPING = 1;
else TRUECLIPPING = 0;
if (IsChecked(hWnd, IDC_FULLRENDER16BITS)) Project.bits = 16;
else Project.bits = 32;
danaeApp.m_pFramework->bitdepth = Project.bits;
if (IsChecked(hWnd, IDC_DEBUG1ST)) DEBUG1ST = 1;
else DEBUG1ST = 0;
if (IsChecked(hWnd, IDC_DEBUGSYS)) DEBUGSYS = 1;
else DEBUGSYS = 0;
if (IsChecked(hWnd, IDC_SETTEXTURE)) DBGSETTEXTURE = 1;
else DBGSETTEXTURE = 0;
if (IsChecked(hWnd, IDC_DEBUGNPCMOVE)) DEBUGNPCMOVE = 1;
else DEBUGNPCMOVE = 0;
if (IsChecked(hWnd, IDC_DEBUGMOLLESS)) DEBUG_MOLLESS = 1;
else DEBUG_MOLLESS = 0;
if (IsChecked(hWnd, IDC_DYNAMICNORMALS)) DYNAMIC_NORMALS = 1;
else DYNAMIC_NORMALS = 0;
if (IsChecked(hWnd, IDC_WIREFRAME)) ViewMode |= VIEWMODE_WIRE;
else ViewMode &= ~VIEWMODE_WIRE;
if (IsChecked(hWnd, IDC_ILLUMNORMAL))
{
if (!(oml & MODE_NORMALS)) wuz = 0;
ModeLight |= MODE_NORMALS;
}
else
{
if ((oml & MODE_NORMALS)) wuz = 0;
ModeLight &= ~MODE_NORMALS;
}
if (IsChecked(hWnd, IDC_ILLUMRAYLAUNCH))
{
if (!(oml & MODE_RAYLAUNCH)) wuz = 0;
ModeLight |= MODE_RAYLAUNCH;
}
else
{
if ((oml & MODE_RAYLAUNCH)) wuz = 0;
ModeLight &= ~MODE_RAYLAUNCH;
}
if (IsChecked(hWnd, IDC_ILLUMSMOOTH))
{
if (!(oml & MODE_SMOOTH)) wuz = 0;
ModeLight |= MODE_SMOOTH;
}
else
{
if ((oml & MODE_SMOOTH)) wuz = 0;
ModeLight &= ~MODE_SMOOTH;
}
if (IsChecked(hWnd, IDC_SHOWLIGHTSNSHADOWS) && !wuz)
{
ModeLight |= MODE_STATICLIGHT;
EERIERemovePrecalcLights();
LaunchLightThread(0, 0, 999999, 999999);
}
else if (!IsChecked(hWnd, IDC_SHOWLIGHTSNSHADOWS) && wuz)
{
ModeLight &= ~MODE_STATICLIGHT;
EERIERemovePrecalcLights();
}
if (IsChecked(hWnd, IDC_TORCHHALO)) ModeLight |= MODE_DYNAMICLIGHT;
else ModeLight &= ~MODE_DYNAMICLIGHT;
if (IsChecked(hWnd, IDC_TORCHHALO2))
{
SHOW_TORCH = 1;
ARX_SOUND_Stop(SND_TORCH_LOOP);
ARX_SOUND_PlaySFX(SND_TORCH_LOOP, NULL, 1.0F, ARX_SOUND_PLAY_LOOPED);
}
else
{
ARX_SOUND_Stop(SND_TORCH_LOOP);
SHOW_TORCH = 0;
}
if (IsChecked(hWnd, IDC_COLLISIONS)) USE_COLLISIONS = 1;
else USE_COLLISIONS = 0;
if (IsChecked(hWnd, IDC_FLARES)) A_FLARES = 1;
else A_FLARES = 0;
if (IsChecked(hWnd, IDC_INVERTMOUSE)) INVERTMOUSE = 1;
else INVERTMOUSE = 0;
if (IsChecked(hWnd, IDC_INTERNORM)) USEINTERNORM = 1;
else USEINTERNORM = 0;
if (IsChecked(hWnd, IDC_THIRDPERSON)) EXTERNALVIEWING = 1;
else EXTERNALVIEWING = 0;
if (IsChecked(hWnd, IDC_PLAYERCOLLISIONS))
{
USE_PLAYERCOLLISIONS = 1;
EERIEPOLY * ep = BCCheckInPoly(player.pos.x, player.pos.y, player.pos.z);
if (ep != NULL) player.pos.y = ep->max.y + PLAYER_BASE_HEIGHT;
}
else USE_PLAYERCOLLISIONS = 0;
if (IsChecked(hWnd, IDC_SHOWNORMALS)) ViewMode |= VIEWMODE_NORMALS;
else ViewMode &= ~VIEWMODE_NORMALS;
if (IsChecked(hWnd, IDC_SHOWDEPTH)) ModeLight |= MODE_DEPTHCUEING;
else ModeLight &= ~MODE_DEPTHCUEING;
if (IsChecked(hWnd, IDC_INFOTEXT)) ViewMode |= VIEWMODE_INFOTEXT;
else ViewMode &= ~VIEWMODE_INFOTEXT;
if (IsChecked(hWnd, IDC_NOTEXTURES)) ViewMode |= VIEWMODE_FLAT;
else ViewMode &= ~VIEWMODE_FLAT;
if (IsChecked(hWnd, IDC_RAY)) Cross = 1;
else Cross = 0;
if (IsChecked(hWnd, IDC_LEVELNONE))
{
DebugLvl[0] = 1;
DEBUGG = 0;
}
else
{
DebugLvl[0] = 0;
DEBUGG = 1;
}
if (IsChecked(hWnd, IDC_LEVEL1)) DebugLvl[1] = 1;
else DebugLvl[1] = 0;
if (IsChecked(hWnd, IDC_LEVEL2)) DebugLvl[2] = 1;
else DebugLvl[2] = 0;
if (IsChecked(hWnd, IDC_LEVEL3)) DebugLvl[3] = 1;
else DebugLvl[3] = 0;
if (IsChecked(hWnd, IDC_LEVEL4)) DebugLvl[4] = 1;
else DebugLvl[4] = 0;
if (IsChecked(hWnd, IDC_LEVEL5)) DebugLvl[5] = 1;
else DebugLvl[5] = 0;
if (IsChecked(hWnd, IDC_MESHTWEAK)) ALLOW_MESH_TWEAKING = 1;
else ALLOW_MESH_TWEAKING = 0;
if (IsChecked(hWnd, IDC_D3DTRANSFORM)) D3DTRANSFORM = 1;
else D3DTRANSFORM = 0;
if (IsChecked(hWnd, IDC_FILTERANISOTROPIC)) Bilinear = 2;
if (IsChecked(hWnd, IDC_FILTERLINEAR)) Bilinear = 1;
if (IsChecked(hWnd, IDC_FILTERPOINT)) Bilinear = 0;
if (IsChecked(hWnd, IDC_MAPUPDATE)) MAPUPDATE = 1;
else MAPUPDATE = 0;
thWnd = GetDlgItem(hWnd, IDC_SLIDERDEPTH);
long t = SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
EERIE_CAMERA * oldcam = ACTIVECAM;
SetActiveCamera(&subj);
SetCameraDepth((float)t);
SetActiveCamera(oldcam);
thWnd = GetDlgItem(hWnd, IDC_POWERSLIDER);
LPpower = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_POWERSLIDER2);
BIGLIGHTPOWER = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_TIMESLIDER);
TIMEFACTOR = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_EDITNBINTERPOLATIONS);
char tex[64];
GetWindowText(thWnd, tex, 63);
MOLLESS_Nb_Interpolations = atoi(tex);
EndDialog(hWnd, TRUE);
break;
}
case IDCANCEL :
EndDialog(hWnd, TRUE);
break;
}
break;
}
}
return FALSE;
}
long WATERFX = 0;
long REFLECTFX = 0;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK OptionsProc_2(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HRESULT hr;
if (WM_COMMAND == uMsg)
{
if (IDC_MODE == LOWORD(wParam))
{
if (!danaeApp.m_pDeviceInfo->bWindowed)
{
if (SUCCEEDED(D3DEnum_UserChangeDevice(&danaeApp.m_pDeviceInfo)))
{
ARX_Text_Close();
if (FAILED(hr = danaeApp.Change3DEnvironment()))
{
ShowPopup("Error Changing Environment");
return 0;
}
GDevice = danaeApp.m_pd3dDevice;
ARX_Text_Init();
}
else ShowPopup("Error Changing Device");
}
}
if (IDC_INTERCOLOR == LOWORD(wParam))
{
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = danaeApp.m_hWnd;
cc.hInstance = 0; //Ignored
cc.rgbResult = (((long)(float)(Project.interfacergb.r * 255.f) & 255))
| (((long)(float)(Project.interfacergb.g * 255.f) & 255) << 8)
| (((long)(float)(Project.interfacergb.b * 255.f) & 255)) << 16;
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
if (ChooseColor(&cc))
{
Project.interfacergb.b = (float)((cc.rgbResult >> 16 & 255)) * DIV255;
Project.interfacergb.g = (float)((cc.rgbResult >> 8 & 255)) * DIV255;
Project.interfacergb.r = (float)((cc.rgbResult & 255)) * DIV255;
}
}
if (IDC_INTERCOLOR2 == LOWORD(wParam))
{
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = danaeApp.m_hWnd;
cc.hInstance = 0; //Ignored
cc.rgbResult = (((long)(float)(Project.torch.r * 255.f) & 255))
| (((long)(float)(Project.torch.g * 255.f) & 255) << 8)
| (((long)(float)(Project.torch.b * 255.f) & 255)) << 16;
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
if (ChooseColor(&cc))
{
Project.torch.b = (float)((cc.rgbResult >> 16 & 255)) * DIV255;
Project.torch.g = (float)((cc.rgbResult >> 8 & 255)) * DIV255;
Project.torch.r = (float)((cc.rgbResult & 255)) * DIV255;
}
}
if (IDOK == LOWORD(wParam))
{
if (IsChecked(hWnd, IDC_HIDESPEECH)) HIDESPEECH = 1;
else HIDESPEECH = 0;
if (IsChecked(hWnd, IDC_WATERFX)) WATERFX = 1;
else WATERFX = 0;
if (IsChecked(hWnd, IDC_REFLECTFX)) REFLECTFX = 1;
else REFLECTFX = 0;
if (IsChecked(hWnd, IDC_FORCEIO)) ForceIODraw = 1;
else ForceIODraw = 0;
if (IsChecked(hWnd, IDC_TREATALLIO)) TreatAllIO = 1;
else TreatAllIO = 0;
if (IsChecked(hWnd, IDC_HIDEMAGICDUST)) HIDEMAGICDUST = 1;
else HIDEMAGICDUST = 0;
if (IsChecked(hWnd, IDC_HIDEANCHORS)) HIDEANCHORS = 1;
else HIDEANCHORS = 0;
if (IsChecked(hWnd, IDC_HIDEBACKGROUND)) Project.hide |= HIDE_BACKGROUND;
else Project.hide &= ~HIDE_BACKGROUND;
if (IsChecked(hWnd, IDC_HIDENPC)) Project.hide |= HIDE_NPC;
else Project.hide &= ~HIDE_NPC;
if (IsChecked(hWnd, IDC_HIDEFIXINTER)) Project.hide |= HIDE_FIXINTER;
else Project.hide &= ~HIDE_FIXINTER;
if (IsChecked(hWnd, IDC_HIDEITEMS)) Project.hide |= HIDE_ITEMS;
else Project.hide &= ~HIDE_ITEMS;
if (IsChecked(hWnd, IDC_HIDEPARTICLES)) Project.hide |= HIDE_PARTICLES;
else Project.hide &= ~HIDE_PARTICLES;
if (IsChecked(hWnd, IDC_HIDECAMERAS)) Project.hide |= HIDE_CAMERAS;
else Project.hide &= ~HIDE_CAMERAS;
if (IsChecked(hWnd, IDC_HIDEINTERFACE)) Project.hide |= HIDE_INTERFACE;
else Project.hide &= ~HIDE_INTERFACE;
if (IsChecked(hWnd, IDC_HIDENODES)) Project.hide |= HIDE_NODES;
else Project.hide &= ~HIDE_NODES;
EndDialog(hWnd, TRUE);
}
if (IDCANCEL == LOWORD(wParam))
{
EndDialog(hWnd, TRUE);
}
}
if (WM_INITDIALOG == uMsg)
{
if (HIDESPEECH) SetClick(hWnd, IDC_HIDESPEECH);
if (Project.hide & HIDE_BACKGROUND) SetClick(hWnd, IDC_HIDEBACKGROUND);
if (Project.hide & HIDE_NPC) SetClick(hWnd, IDC_HIDENPC);
if (Project.hide & HIDE_FIXINTER) SetClick(hWnd, IDC_HIDEFIXINTER);
if (Project.hide & HIDE_ITEMS) SetClick(hWnd, IDC_HIDEITEMS);
if (Project.hide & HIDE_PARTICLES) SetClick(hWnd, IDC_HIDEPARTICLES);
if (Project.hide & HIDE_CAMERAS) SetClick(hWnd, IDC_HIDECAMERAS);
if (Project.hide & HIDE_INTERFACE) SetClick(hWnd, IDC_HIDEINTERFACE);
if (Project.hide & HIDE_NODES) SetClick(hWnd, IDC_HIDENODES);
if (HIDEANCHORS) SetClick(hWnd, IDC_HIDEANCHORS);
if (HIDEMAGICDUST) SetClick(hWnd, IDC_HIDEMAGICDUST);
if (WATERFX) SetClick(hWnd, IDC_WATERFX);
if (REFLECTFX) SetClick(hWnd, IDC_REFLECTFX);
if (TreatAllIO) SetClick(hWnd, IDC_TREATALLIO);
return TRUE;
}
return FALSE;
return WM_INITDIALOG == uMsg ? TRUE : FALSE;
}
extern long CHANGE_LEVEL_PROC_RESULT;
BOOL CALLBACK ChangeLevelProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (WM_COMMAND == uMsg)
{
if (IDC_GOTOPOLY == LOWORD(wParam))
{
ARX_PLAYER_GotoAnyPoly();
CHANGE_LEVEL_PROC_RESULT = -1;
EndDialog(hWnd, TRUE);
}
else if (IDOK == LOWORD(wParam))
{
if (IsChecked(hWnd, IDC_C_LEVEL0)) CHANGE_LEVEL_PROC_RESULT = 0;
if (IsChecked(hWnd, IDC_C_LEVEL1)) CHANGE_LEVEL_PROC_RESULT = 1;
if (IsChecked(hWnd, IDC_C_LEVEL2)) CHANGE_LEVEL_PROC_RESULT = 2;
if (IsChecked(hWnd, IDC_C_LEVEL3)) CHANGE_LEVEL_PROC_RESULT = 3;
if (IsChecked(hWnd, IDC_C_LEVEL4)) CHANGE_LEVEL_PROC_RESULT = 4;
if (IsChecked(hWnd, IDC_C_LEVEL5)) CHANGE_LEVEL_PROC_RESULT = 5;
if (IsChecked(hWnd, IDC_C_LEVEL6)) CHANGE_LEVEL_PROC_RESULT = 6;
if (IsChecked(hWnd, IDC_C_LEVEL7)) CHANGE_LEVEL_PROC_RESULT = 7;
if (IsChecked(hWnd, IDC_C_LEVEL8)) CHANGE_LEVEL_PROC_RESULT = 8;
if (IsChecked(hWnd, IDC_C_LEVEL9)) CHANGE_LEVEL_PROC_RESULT = 9;
if (IsChecked(hWnd, IDC_C_LEVEL10)) CHANGE_LEVEL_PROC_RESULT = 10;
if (IsChecked(hWnd, IDC_C_LEVEL11)) CHANGE_LEVEL_PROC_RESULT = 11;
if (IsChecked(hWnd, IDC_C_LEVEL12)) CHANGE_LEVEL_PROC_RESULT = 12;
if (IsChecked(hWnd, IDC_C_LEVEL13)) CHANGE_LEVEL_PROC_RESULT = 13;
if (IsChecked(hWnd, IDC_C_LEVEL14)) CHANGE_LEVEL_PROC_RESULT = 14;
if (IsChecked(hWnd, IDC_C_LEVEL15)) CHANGE_LEVEL_PROC_RESULT = 15;
if (IsChecked(hWnd, IDC_C_LEVEL16)) CHANGE_LEVEL_PROC_RESULT = 16;
if (IsChecked(hWnd, IDC_C_LEVEL17)) CHANGE_LEVEL_PROC_RESULT = 17;
if (IsChecked(hWnd, IDC_C_LEVEL18)) CHANGE_LEVEL_PROC_RESULT = 18;
if (IsChecked(hWnd, IDC_C_LEVEL19)) CHANGE_LEVEL_PROC_RESULT = 19;
if (IsChecked(hWnd, IDC_C_LEVEL20)) CHANGE_LEVEL_PROC_RESULT = 20;
if (IsChecked(hWnd, IDC_C_LEVEL21)) CHANGE_LEVEL_PROC_RESULT = 21;
if (IsChecked(hWnd, IDC_C_LEVEL22)) CHANGE_LEVEL_PROC_RESULT = 22;
if (IsChecked(hWnd, IDC_C_LEVEL23)) CHANGE_LEVEL_PROC_RESULT = 23;
EndDialog(hWnd, TRUE);
}
else if (IDCANCEL == LOWORD(wParam))
{
EndDialog(hWnd, TRUE);
}
}
if (WM_INITDIALOG == uMsg)
{
CHANGE_LEVEL_PROC_RESULT = -1;
SetClick(hWnd, IDC_C_LEVEL0);
return TRUE;
}
return FALSE;
return WM_INITDIALOG == uMsg ? TRUE : FALSE;
}
EERIE_LIGHT lightparam;
EERIE_LIGHT lightcopy;
extern HWND CDP_LIGHTOptions;
extern EERIE_LIGHT * CDP_EditLight;
long CONSTANTUPDATELIGHT = 0;
void LightApply(HWND hWnd)
{
HWND thWnd;
if (CDP_EditLight != NULL)
{
lightparam.extras &= EXTRAS_FIREPLACE;
thWnd = GetDlgItem(hWnd, IDC_SLIDER11);
lightparam.fallstart = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER12);
lightparam.fallend = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER13);
lightparam.intensity = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) / 100.f;
if (IsChecked(hWnd, IDC_SEMIDYNAMIC)) lightparam.extras |= EXTRAS_SEMIDYNAMIC;
else lightparam.extras &= ~EXTRAS_SEMIDYNAMIC;
if (IsChecked(hWnd, IDC_EXTINGUISH)) lightparam.extras |= EXTRAS_EXTINGUISHABLE;
else lightparam.extras &= ~EXTRAS_EXTINGUISHABLE;
if (IsChecked(hWnd, IDC_EXTINGUISH2)) lightparam.extras |= EXTRAS_STARTEXTINGUISHED;
else lightparam.extras &= ~EXTRAS_STARTEXTINGUISHED;
if (IsChecked(hWnd, IDC_NO_IGNIT)) lightparam.extras |= EXTRAS_NO_IGNIT;
else lightparam.extras &= ~EXTRAS_NO_IGNIT;
if (IsChecked(hWnd, IDC_SPAWNFIRE)) lightparam.extras |= EXTRAS_SPAWNFIRE;
else lightparam.extras &= ~EXTRAS_SPAWNFIRE;
if (IsChecked(hWnd, IDC_SPAWNSMOKE)) lightparam.extras |= EXTRAS_SPAWNSMOKE;
else lightparam.extras &= ~EXTRAS_SPAWNSMOKE;
if (IsChecked(hWnd, IDC_CAST_SHADOWS)) lightparam.extras |= EXTRAS_NOCASTED;
else lightparam.extras &= ~EXTRAS_NOCASTED;
if (IsChecked(hWnd, IDC_FIXFLARESIZE)) lightparam.extras |= EXTRAS_FIXFLARESIZE;
else lightparam.extras &= ~EXTRAS_FIXFLARESIZE;
if (IsChecked(hWnd, IDC_COLORLEGACY)) lightparam.extras |= EXTRAS_COLORLEGACY;
else lightparam.extras &= ~EXTRAS_COLORLEGACY;
if (IsChecked(hWnd, IDC_FLARE)) lightparam.extras |= EXTRAS_FLARE;
else lightparam.extras &= ~EXTRAS_FLARE;
thWnd = GetDlgItem(hWnd, IDC_SLIDER14);
lightparam.ex_flicker.r = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER15);
lightparam.ex_flicker.g = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER16);
lightparam.ex_flicker.b = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER17);
lightparam.ex_radius = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER18);
lightparam.ex_frequency = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER19);
lightparam.ex_size = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV10;
thWnd = GetDlgItem(hWnd, IDC_SLIDER20);
lightparam.ex_speed = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER21);
lightparam.ex_flaresize = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
lightparam.pos.x = CDP_EditLight->pos.x;
lightparam.pos.y = CDP_EditLight->pos.y;
lightparam.pos.z = CDP_EditLight->pos.z;
lightparam.tl = CDP_EditLight->tl;
memcpy(CDP_EditLight, &lightparam, sizeof(EERIE_LIGHT));
if (CDP_EditLight->tl != -1) DynLight[CDP_EditLight->tl].exist = 0;
if (!(lightparam.extras & EXTRAS_SEMIDYNAMIC))
{
RecalcLight(CDP_EditLight);
RecalcLightZone(CDP_EditLight->pos.x, CDP_EditLight->pos.y, CDP_EditLight->pos.z, (long)(CDP_EditLight->fallend * ACTIVEBKG->Xmul) + 1);
}
}
}
long INITT = 0;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK LightOptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND thWnd;
long l;
switch (uMsg)
{
case WM_MOVE:
if (danaeApp.m_pDeviceInfo->bWindowed)
{
RECT rect1, rect2;
GetWindowRect(danaeApp.m_hWnd, &rect1);
GetWindowRect(hWnd, &rect2);
long posx = rect2.left - rect1.left;
long posy = rect2.top - rect1.top;
Danae_Registry_WriteValue("WND_LightOptions_POSX", posx);
Danae_Registry_WriteValue("WND_LightOptions_POSY", posy);
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDC_CONSTANTUPDATE:
PrecalcIOLighting(NULL, 0, 1);
if (CONSTANTUPDATELIGHT)
{
CONSTANTUPDATELIGHT = 0;
thWnd = GetDlgItem(hWnd, IDC_CONSTANTUPDATE);
SetWindowText(thWnd, "No Real-Time Update");
}
else
{
CONSTANTUPDATELIGHT = 1;
thWnd = GetDlgItem(hWnd, IDC_CONSTANTUPDATE);
SetWindowText(thWnd, "Real-Time Update");
SendMessage(hWnd, WM_COMMAND, IDAPPLY, 0);
}
break;
case IDC_SEMIDYNAMIC:
case IDC_EXTINGUISH:
case IDC_EXTINGUISH2:
case IDC_SPAWNFIRE:
case IDC_SPAWNSMOKE:
case IDC_COLORLEGACY:
case IDC_CAST_SHADOWS:
case IDC_FIXFLARESIZE:
case IDC_SLIDER11:
case IDC_SLIDER12:
case IDC_SLIDER13:
case IDC_SLIDER14:
case IDC_SLIDER15:
case IDC_SLIDER16:
case IDC_SLIDER17:
case IDC_SLIDER18:
case IDC_SLIDER19:
case IDC_SLIDER20:
case IDC_SLIDER21:
{
PrecalcIOLighting(NULL, 0, 1);
if (!INITT) if (CONSTANTUPDATELIGHT) LightApply(hWnd);
}
break;
case IDC_LIGHTCOLOR:
PrecalcIOLighting(NULL, 0, 1);
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = danaeApp.m_hWnd;
cc.hInstance = 0; //Ignored
cc.rgbResult = (((long)(float)(lightparam.rgb.r * 255.f) & 255))
| (((long)(float)(lightparam.rgb.g * 255.f) & 255) << 8)
| (((long)(float)(lightparam.rgb.b * 255.f) & 255)) << 16;
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
if (ChooseColor(&cc))
{
lightparam.rgb.b = (float)((cc.rgbResult >> 16 & 255)) * DIV255;
lightparam.rgb.g = (float)((cc.rgbResult >> 8 & 255)) * DIV255;
lightparam.rgb.r = (float)((cc.rgbResult & 255)) * DIV255;
}
if (!INITT) if (CONSTANTUPDATELIGHT) LightApply(hWnd);
break;
case IDAPPLY:
{
PrecalcIOLighting(NULL, 0, 1);
LightApply(hWnd);
}
break;
case IDCOPY:
PrecalcIOLighting(NULL, 0, 1);
memcpy(&lightcopy, &lightparam, sizeof(EERIE_LIGHT));
break;
case IDPASTE:
PrecalcIOLighting(NULL, 0, 1);
lightparam.fallstart = lightcopy.fallstart;
lightparam.fallend = lightcopy.fallend;
lightparam.intensity = lightcopy.intensity;
lightparam.rgb.r = lightcopy.rgb.r;
lightparam.rgb.g = lightcopy.rgb.g;
lightparam.rgb.b = lightcopy.rgb.b;
lightparam.type = lightcopy.type;
RecalcLight(&lightparam);
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
break;
case IDRESET:
PrecalcIOLighting(NULL, 0, 1);
lightparam.fallstart = 500.f;
lightparam.fallend = 600.f;
lightparam.intensity = 1.2f;
lightparam.rgb.r = 1.f;
lightparam.rgb.g = 0.f;
lightparam.rgb.b = 0.f;
RecalcLight(&lightparam);
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
break;
case IDC_SET_FIRE:
PrecalcIOLighting(NULL, 0, 1);
lightparam.rgb.r = 0.71f;
lightparam.rgb.g = 0.43f;
lightparam.rgb.b = 0.29f;
lightparam.intensity = 4.f;
lightparam.fallstart = 250.f;
lightparam.fallend = 450.f;
lightparam.ex_flicker.r = 0.25f;
lightparam.ex_flicker.g = 0.25f;
lightparam.ex_flicker.b = 0.25f;
lightparam.ex_radius = 1;
lightparam.ex_frequency = 0.7f;
lightparam.ex_size = 0.8f;
lightparam.ex_speed = 0.7f;
lightparam.ex_flaresize = 40.f;
lightparam.extras = EXTRAS_SEMIDYNAMIC | EXTRAS_EXTINGUISHABLE |
EXTRAS_SPAWNFIRE | EXTRAS_SPAWNSMOKE | EXTRAS_FLARE;
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
if (!INITT) if (CONSTANTUPDATELIGHT) LightApply(hWnd);
break;
case IDC_SET_FIRE2:
PrecalcIOLighting(NULL, 0, 1);
lightparam.rgb.r = 0.71f;
lightparam.rgb.g = 0.43f;
lightparam.rgb.b = 0.29f;
lightparam.intensity = 4.f;
lightparam.fallstart = 350.f;
lightparam.fallend = 520.f;
lightparam.ex_flicker.r = 0.25f;
lightparam.ex_flicker.g = 0.25f;
lightparam.ex_flicker.b = 0.25f;
lightparam.ex_radius = 20;
lightparam.ex_frequency = 0.8f;
lightparam.ex_size = 1.f;
lightparam.ex_speed = 0.65f;
lightparam.ex_flaresize = 95.f;
lightparam.extras = EXTRAS_SEMIDYNAMIC | EXTRAS_EXTINGUISHABLE |
EXTRAS_SPAWNFIRE | EXTRAS_SPAWNSMOKE | EXTRAS_FIREPLACE | EXTRAS_FLARE;;
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
if (!INITT) if (CONSTANTUPDATELIGHT) LightApply(hWnd);
break;
case IDOK:
PrecalcIOLighting(NULL, 0, 1);
LightApply(hWnd);
CDP_LIGHTOptions = NULL;
EndDialog(hWnd, TRUE);
break;
case IDCANCEL:
PrecalcIOLighting(NULL, 0, 1);
CDP_LIGHTOptions = NULL;
if ((CDP_EditLight) && (CDP_EditLight->tl != -1)) DynLight[CDP_EditLight->tl].exist = 0;
EndDialog(hWnd, TRUE);
break;
}
}
break;
case WM_INITDIALOG:
if (danaeApp.m_pDeviceInfo->bWindowed)
{
long posx, posy;
Danae_Registry_ReadValue("WND_LightOptions_POSX", &posx, 0);
Danae_Registry_ReadValue("WND_LightOptions_POSY", &posy, 0);
if ((posx != -1) && (posy != -1)
&& (posx < 1000) && (posx > -1000)
&& (posy < 1000) && (posy > -1000)
)
{
RECT rect1;
GetWindowRect(danaeApp.m_hWnd, &rect1);
posx = rect1.left + posx;
posy = rect1.left + posy;
if (posx < 0) posx = 0;
if (posy < 0) posy = 0;
SetWindowPos(hWnd, NULL, posx, posy, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
}
INITT = 1;
if (CONSTANTUPDATELIGHT)
{
thWnd = GetDlgItem(hWnd, IDC_CONSTANTUPDATE);
SetWindowText(thWnd, "Real-Time Update");
}
else
{
thWnd = GetDlgItem(hWnd, IDC_CONSTANTUPDATE);
SetWindowText(thWnd, "No Real-Time Update");
}
if ((CDP_EditLight) && (CDP_EditLight->tl != -1))
{
DynLight[CDP_EditLight->tl].exist = 0;
CDP_EditLight->tl = NULL;
}
thWnd = GetDlgItem(hWnd, IDC_SLIDER11);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 2000));
l = (long)(float)(lightparam.fallstart);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER12);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 2000));
l = (long)(float)(lightparam.fallend);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER13);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 500));
l = (long)(float)(lightparam.intensity * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
if (lightparam.extras & EXTRAS_NOCASTED) SetCheck(hWnd, IDC_CAST_SHADOWS, CHECK);
else SetCheck(hWnd, IDC_CAST_SHADOWS, UNCHECK);
if (lightparam.extras & EXTRAS_SEMIDYNAMIC) SetCheck(hWnd, IDC_SEMIDYNAMIC, CHECK);
else SetCheck(hWnd, IDC_SEMIDYNAMIC, UNCHECK);
if (lightparam.extras & EXTRAS_EXTINGUISHABLE) SetCheck(hWnd, IDC_EXTINGUISH, CHECK);
else SetCheck(hWnd, IDC_EXTINGUISH, UNCHECK);
if (lightparam.extras & EXTRAS_STARTEXTINGUISHED) SetCheck(hWnd, IDC_EXTINGUISH2, CHECK);
else SetCheck(hWnd, IDC_EXTINGUISH2, UNCHECK);
if (lightparam.extras & EXTRAS_NO_IGNIT) SetCheck(hWnd, IDC_NO_IGNIT, CHECK);
else SetCheck(hWnd, IDC_NO_IGNIT, UNCHECK);
if (lightparam.extras & EXTRAS_SPAWNFIRE) SetCheck(hWnd, IDC_SPAWNFIRE, CHECK);
else SetCheck(hWnd, IDC_SPAWNFIRE, UNCHECK);
if (lightparam.extras & EXTRAS_SPAWNSMOKE) SetCheck(hWnd, IDC_SPAWNSMOKE, CHECK);
else SetCheck(hWnd, IDC_SPAWNSMOKE, UNCHECK);
if (lightparam.extras & EXTRAS_COLORLEGACY) SetCheck(hWnd, IDC_COLORLEGACY, CHECK);
else SetCheck(hWnd, IDC_COLORLEGACY, UNCHECK);
if (lightparam.extras & EXTRAS_FLARE) SetCheck(hWnd, IDC_FLARE, CHECK);
else SetCheck(hWnd, IDC_FLARE, UNCHECK);
if (lightparam.extras & EXTRAS_FIXFLARESIZE) SetCheck(hWnd, IDC_FIXFLARESIZE, CHECK);
else SetCheck(hWnd, IDC_FIXFLARESIZE, UNCHECK);
thWnd = GetDlgItem(hWnd, IDC_SLIDER14);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
l = (long)(float)(lightparam.ex_flicker.r * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER15);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
l = (long)(float)(lightparam.ex_flicker.g * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER16);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
l = (long)(float)(lightparam.ex_flicker.b * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER17);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
l = (long)(float)(lightparam.ex_radius);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER18);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 100));
l = (long)((float)(lightparam.ex_frequency * 100.f));
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER19);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 30));
l = (long)((float)(lightparam.ex_size * 10.f));
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER20);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
l = (long)((float)(lightparam.ex_speed) * 100.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
thWnd = GetDlgItem(hWnd, IDC_SLIDER21);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 200));
l = (long)((float)(lightparam.ex_flaresize));
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(l));
INITT = 0;
return TRUE;
break;
case WM_NOTIFY:
float val, val1, val2;
char temp[64];
thWnd = GetDlgItem(hWnd, IDC_SLIDER11);
val1 = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC11);
sprintf(temp, "%4.0f", val1);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER12);
val2 = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC12);
sprintf(temp, "%4.0f", val2);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER13);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV100;
thWnd = GetDlgItem(hWnd, IDC_STATIC13);
sprintf(temp, "%2.2f", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER14);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC14);
sprintf(temp, "%3d%%", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER15);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC15);
sprintf(temp, "%3d%%", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER16);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC16);
sprintf(temp, "%3d%%", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER17);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC17);
sprintf(temp, "%3dcm", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER18);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC18);
sprintf(temp, "%3d%%", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER19);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC19);
sprintf(temp, "%3d", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER20);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC20);
sprintf(temp, "%3d%%", (long)val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER21);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC21);
sprintf(temp, "%3d", (long)val);
SetWindowText(thWnd, temp);
if (val2 < val1)
{
thWnd = GetDlgItem(hWnd, IDC_SLIDER12);
SendMessage(thWnd, TBM_SETPOS, FALSE, (LPARAM)(val1));
}
if (!INITT)
if (((int) wParam == IDC_SLIDER11)
|| ((int) wParam == IDC_SLIDER12)
|| ((int) wParam == IDC_SLIDER13)
|| ((int) wParam == IDC_SLIDER14)
|| ((int) wParam == IDC_SLIDER15)
|| ((int) wParam == IDC_SLIDER16)
|| ((int) wParam == IDC_SLIDER17)
|| ((int) wParam == IDC_SLIDER18)
|| ((int) wParam == IDC_SLIDER19)
|| ((int) wParam == IDC_SLIDER20)
|| ((int) wParam == IDC_SLIDER21))
if (CONSTANTUPDATELIGHT) LightApply(hWnd);
break;
}
return FALSE;
}
FOG_DEF fogparam;
FOG_DEF fogcopy;
extern HWND CDP_FogOptions;
extern FOG_DEF * CDP_EditFog;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK FogOptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND thWnd;
float t;
switch (uMsg)
{
case WM_COMMAND:
{
if (IDC_BUTTON_COLOR == LOWORD(wParam))
{
CHOOSECOLOR cc;
cc.lStructSize = sizeof(CHOOSECOLOR);
cc.hwndOwner = danaeApp.m_hWnd;
cc.hInstance = 0; //Ignored
cc.rgbResult = (((long)(float)(fogparam.rgb.r * 255.f) & 255))
| (((long)(float)(fogparam.rgb.g * 255.f) & 255) << 8)
| (((long)(float)(fogparam.rgb.b * 255.f) & 255)) << 16;
cc.lpCustColors = custcr;
cc.Flags = CC_ANYCOLOR | CC_FULLOPEN | CC_RGBINIT;
if (ChooseColor(&cc))
{
fogparam.rgb.b = (float)((cc.rgbResult >> 16 & 255)) * DIV255;
fogparam.rgb.g = (float)((cc.rgbResult >> 8 & 255)) * DIV255;
fogparam.rgb.r = (float)((cc.rgbResult & 255)) * DIV255;
}
}
if (IDAPPLY == LOWORD(wParam))
{
if (CDP_EditFog != NULL)
{
thWnd = GetDlgItem(hWnd, IDC_SLIDER_ROTATIONSPEED);
fogparam.rotatespeed = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) / 1000.f;
thWnd = GetDlgItem(hWnd, IDC_SLIDER_MOVESPEED);
fogparam.speed = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_INITSIZE);
fogparam.size = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_SCALING);
fogparam.scale = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_DURATION);
fogparam.tolive = (long)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * 100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER_FREQUENCY);
fogparam.frequency = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_DIRECTIONAL);
if (SendMessage(thWnd, BM_GETSTATE, 0, 0) == BST_CHECKED)
fogparam.special |= FOG_DIRECTIONAL;
fogparam.pos.x = CDP_EditFog->pos.x;
fogparam.pos.y = CDP_EditFog->pos.y;
fogparam.pos.z = CDP_EditFog->pos.z;
memcpy(CDP_EditFog, &fogparam, sizeof(FOG_DEF));
}
}
if (IDCOPY == LOWORD(wParam))
{
memcpy(&fogcopy, &fogparam, sizeof(FOG_DEF));
}
if (IDPASTE == LOWORD(wParam))
{
fogparam.angle.a = fogcopy.angle.a;
fogparam.angle.b = fogcopy.angle.b;
fogparam.angle.g = fogcopy.angle.g;
fogparam.blend = fogcopy.blend;
fogparam.frequency = fogcopy.frequency;
fogparam.move.x = fogcopy.move.x;
fogparam.move.y = fogcopy.move.y;
fogparam.move.z = fogcopy.move.z;
fogparam.rgb.r = fogcopy.rgb.r;
fogparam.rgb.g = fogcopy.rgb.g;
fogparam.rgb.b = fogcopy.rgb.b;
fogparam.rotatespeed = fogcopy.rotatespeed;
fogparam.scale = fogcopy.scale;
fogparam.size = fogcopy.size;
fogparam.special = fogcopy.special;
fogparam.speed = fogcopy.speed;
fogparam.tolive = fogcopy.tolive;
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
}
if (IDRESET == LOWORD(wParam))
{
fogparam.angle.a = 0.f;
fogparam.angle.b = 0.f;
fogparam.angle.g = 0.f;
fogparam.move.x = 0.f;
fogparam.move.y = 0.f;
fogparam.move.z = 0.f;
fogparam.special = (long)0.f;
fogparam.blend = (long)0.f;
fogparam.frequency = 17.f;
fogparam.rgb.r = 0.3f;
fogparam.rgb.g = 0.3f;
fogparam.rgb.b = 0.5f;
fogparam.rotatespeed = 0.001f;
fogparam.scale = 8.f;
fogparam.size = 80.f;
fogparam.speed = 1.f;
fogparam.tolive = 4500;
SendMessage(hWnd, WM_INITDIALOG, 0, 0);
}
if (IDOK == LOWORD(wParam))
{
if (CDP_EditFog != NULL)
{
thWnd = GetDlgItem(hWnd, IDC_SLIDER_ROTATIONSPEED);
fogparam.rotatespeed = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) / 1000.f;
thWnd = GetDlgItem(hWnd, IDC_SLIDER_MOVESPEED);
fogparam.speed = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_INITSIZE);
fogparam.size = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_SCALING);
fogparam.scale = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_DURATION);
fogparam.tolive = (long)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * 100;
thWnd = GetDlgItem(hWnd, IDC_SLIDER_FREQUENCY);
fogparam.frequency = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_DIRECTIONAL);
if (SendMessage(thWnd, BM_GETSTATE, 0, 0) == BST_CHECKED)
fogparam.special |= FOG_DIRECTIONAL;
memcpy(CDP_EditFog, &fogparam, sizeof(FOG_DEF));
}
CDP_FogOptions = NULL;
EndDialog(hWnd, TRUE);
}
if (IDCANCEL == LOWORD(wParam))
{
CDP_FogOptions = NULL;
EndDialog(hWnd, TRUE);
}
}
break;
case WM_INITDIALOG:
{
thWnd = GetDlgItem(hWnd, IDC_SLIDER_ROTATIONSPEED);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(-100, 100));
t = (float)(long)(fogparam.rotatespeed * 1000.f);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_SLIDER_MOVESPEED);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(0, 100));
t = (float)(long)(fogparam.speed);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_SLIDER_INITSIZE);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 80));
t = (float)(long)(fogparam.size);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_SLIDER_SCALING);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(-80, 80));
t = (float)(long)(fogparam.scale);
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_SLIDER_DURATION);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 400));
t = (float)(long)(fogparam.tolive) / 100;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
thWnd = GetDlgItem(hWnd, IDC_SLIDER_FREQUENCY);
SendMessage(thWnd, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG(1, 99));
t = (float)(long)fogparam.frequency;
SendMessage(thWnd, TBM_SETPOS, TRUE, (LPARAM)(t));
if (fogparam.special & FOG_DIRECTIONAL) SetClick(hWnd, IDC_DIRECTIONAL);
return TRUE;
}
case WM_NOTIFY:
float val;
char temp[64];
thWnd = GetDlgItem(hWnd, IDC_SLIDER_FREQUENCY);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_FREQUENCY_TEXT);
sprintf(temp, "%2.0f%%", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_ROTATIONSPEED);
val = ((float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0)) / 1000.f;
thWnd = GetDlgItem(hWnd, IDC_STATIC2);
sprintf(temp, "%1.3f", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_MOVESPEED);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC3);
sprintf(temp, "%3.0f", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_INITSIZE);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC4);
sprintf(temp, "%3.0f", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_SCALING);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0);
thWnd = GetDlgItem(hWnd, IDC_STATIC5);
sprintf(temp, "%3.0f", val);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_SLIDER_DURATION);
val = (float)SendMessage(thWnd, TBM_GETPOS, TRUE, 0) * DIV10;
thWnd = GetDlgItem(hWnd, IDC_STATIC6);
sprintf(temp, "%4.2fs", val);
SetWindowText(thWnd, temp);
break;
}
return FALSE;
}
long SHOWWARNINGS = 0;
extern HWND CDP_IOOptions;
extern INTERACTIVE_OBJ * CDP_EditIO;
#define MAX_SCRIPT_SIZE 128000
char text1[MAX_SCRIPT_SIZE+1];
char text2[MAX_SCRIPT_SIZE+1];
//*************************************************************************************
//*************************************************************************************
extern HWND LastErrorPopupNO2;
extern HWND LastErrorPopupNO1;
UINT uFindReplaceMsg;
long IOScript_X = -1;
long IOScript_Y = -1;
long IOScript_XX = -1;
long IOScript_YY = -1;
#if _ARX_CEDITOR_
CEditor * edit1 = NULL;
CEditor * edit2 = NULL;
#endif
long edit_lin1 = 0;
long edit_lin2 = 0;
INTERACTIVE_OBJ * edit_io = NULL;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK IOOptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HWND thWnd;
switch (uMsg)
{
case WM_SIZE:
RECT trec, rec, rec2, wndrect;
GetWindowRect(hWnd, &wndrect);
GetClientRect(hWnd, &trec);
long space;
space = ((trec.bottom - 60) / 2) - 25;
rec.left = trec.left + 4;
rec.right = trec.right - 6;
rec.top = 60;
rec.bottom = space;
rec2.left = rec.left;
rec2.right = rec.right;
rec2.top = rec.top + rec.bottom + 25;
rec2.bottom = space;
thWnd = GetDlgItem(hWnd, IDC_EDIT1);
SetWindowPos(thWnd, HWND_TOP, rec.left, rec.top, rec.right, rec.bottom, SWP_NOZORDER);
UpdateWindow(thWnd);
thWnd = GetDlgItem(hWnd, IDC_EDIT2);
SetWindowPos(thWnd, HWND_TOP, rec2.left, rec2.top, rec2.right, rec2.bottom, SWP_NOZORDER);
UpdateWindow(thWnd);
// Primary win
long px, py;
px = rec.left;
py = rec.top - 22;
thWnd = GetDlgItem(hWnd, IDC_LOCSCR1);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_STATICCOL1);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_COL1);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_STATICLINE1);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_LINE1);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
// Secondary win
px = rec2.left;
py = rec2.top - 22;
thWnd = GetDlgItem(hWnd, IDC_LOCSCR2);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_STATICCOL2);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_COL2);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_STATICLINE2);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
thWnd = GetDlgItem(hWnd, IDC_LINE2);
SetWindowPos(thWnd, HWND_TOP, px, py, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
InvalidateRect(thWnd, NULL, TRUE);
UpdateWindow(thWnd);
GetClientRect(thWnd, &rec);
px += rec.right + 5;
UpdateWindow(hWnd);
break;
case WM_DESTROY:
case WM_CLOSE:
KillLightThread();
#if _ARX_CEDITOR_
if ((CDP_EditIO) && edit1 && edit2)
{
edit_io = CDP_EditIO;
edit_lin1 = LOWORD(edit1->GetCurrentPos());
edit_lin2 = LOWORD(edit2->GetCurrentPos());
}
CDP_IOOptions = NULL;
SAFE_DELETE(edit1);
SAFE_DELETE(edit2);
#endif
CDP_IOOptions = NULL;
RECT _wndrect;
GetWindowRect(hWnd, &_wndrect);
IOScript_X = _wndrect.left;
IOScript_Y = _wndrect.top;
IOScript_XX = _wndrect.right - _wndrect.left;
IOScript_YY = _wndrect.bottom - _wndrect.top;
EndDialog(hWnd, TRUE);
break;
case WM_COMMAND:
{
if (IDSYNTAX == LOWORD(wParam))
{
if (CDP_EditIO != NULL)
{
long SC = SYNTAXCHECKING;
SYNTAXCHECKING = 1;
SHOWWARNINGS = 1;
CDP_EditIO->ioflags &= ~IO_FREEZESCRIPT;
if (CheckScriptSyntax(CDP_EditIO) != TRUE) CDP_EditIO->ioflags |= IO_FREEZESCRIPT;
else CDP_EditIO->ioflags &= ~IO_FREEZESCRIPT;
SHOWWARNINGS = 0;
RECT rec;
GetWindowRect(hWnd, &rec);
if (LastErrorPopupNO2 != NULL)
{
SetWindowPos(LastErrorPopupNO2, HWND_TOPMOST, rec.left + rec.right - rec.left, rec.top + 200, 0, 0, SWP_NOSIZE);
SetCheck(hWnd, IDC_FREEZESCRIPT, CHECK);
LastErrorPopupNO2 = NULL;
}
if (LastErrorPopupNO1 != NULL)
{
SetWindowPos(LastErrorPopupNO1, HWND_TOPMOST, rec.left + rec.right - rec.left, rec.top, 0, 0, SWP_NOSIZE);
SetCheck(hWnd, IDC_FREEZESCRIPT, CHECK);
LastErrorPopupNO1 = NULL;
}
SYNTAXCHECKING = SC;
}
}
else if (IDOK == LOWORD(wParam))
{
if (CDP_EditIO != NULL)
{
edit_io = CDP_EditIO;
if (IsChecked(hWnd, IDC_FREEZESCRIPT)) CDP_EditIO->ioflags |= IO_FREEZESCRIPT;
else CDP_EditIO->ioflags &= ~IO_FREEZESCRIPT;
#if _ARX_CEDITOR_
edit_lin1 = LOWORD(edit1->GetCurrentPos());
edit_lin2 = LOWORD(edit2->GetCurrentPos());
edit1->GetText(text1, MAX_SCRIPT_SIZE);
edit2->GetText(text2, MAX_SCRIPT_SIZE);
#endif
long i = 0;
if (CDP_EditIO->script.data != NULL)
{
int n = strcmp(text1, CDP_EditIO->script.data);
if (n) i += 1;
}
else if (strlen(text1) > 0) i += 1;
if ((CDP_EditIO->over_script.data != NULL)
&& (CDP_EditIO->ident != -1))
{
int n = strcmp(text2, CDP_EditIO->over_script.data);
if (n) i += 2;
}
else if (strlen(text2) > 0) i += 2;
switch (i)
{
case 3:
if (OKBox("Save Changes to LOCAL & CLASS script ?", "SAVE Confirmation"))
{
if (CDP_EditIO->script.data != NULL)
{
free(CDP_EditIO->script.data);
CDP_EditIO->script.data = NULL;
}
CDP_EditIO->script.size = strlen(text1) + 1;
CDP_EditIO->script.data = (char *)malloc(CDP_EditIO->script.size);
strcpy(CDP_EditIO->script.data, text1);
if (CDP_EditIO->over_script.data != NULL)
{
free(CDP_EditIO->over_script.data);
CDP_EditIO->over_script.data = NULL;
}
CDP_EditIO->over_script.size = strlen(text2) + 1;
CDP_EditIO->over_script.data = (char *)malloc(CDP_EditIO->over_script.size);
strcpy(CDP_EditIO->over_script.data, text2);
if (CDP_EditIO->script.data != NULL)
CDP_EditIO->over_script.master = (void *)&CDP_EditIO->script;
else CDP_EditIO->over_script.master = NULL;
SaveIOScript(CDP_EditIO, 1);
SaveIOScript(CDP_EditIO, 2);
}
break;
case 2:
if (OKBox("Save Changes to LOCAL script ?", "SAVE Confirmation"))
{
if (CDP_EditIO->over_script.data != NULL)
{
free(CDP_EditIO->over_script.data);
CDP_EditIO->over_script.data = NULL;
}
CDP_EditIO->over_script.size = strlen(text2) + 1;
CDP_EditIO->over_script.data = (char *)malloc(CDP_EditIO->over_script.size);
strcpy(CDP_EditIO->over_script.data, text2);
if (CDP_EditIO->script.data != NULL)
CDP_EditIO->over_script.master = (void *)&CDP_EditIO->script;
else CDP_EditIO->over_script.master = NULL;
SaveIOScript(CDP_EditIO, 2);
}
break;
case 1:
if (OKBox("Save Changes to CLASS script ?", "SAVE Confirmation"))
{
if (CDP_EditIO->script.data != NULL)
{
free(CDP_EditIO->script.data);
CDP_EditIO->script.data = NULL;
}
CDP_EditIO->script.size = strlen(text1) + 1;
CDP_EditIO->script.data = (char *)malloc(CDP_EditIO->script.size);
strcpy(CDP_EditIO->script.data, text1);
if (CDP_EditIO->script.data != NULL)
CDP_EditIO->over_script.master = (void *)&CDP_EditIO->script;
else CDP_EditIO->over_script.master = NULL;
SaveIOScript(CDP_EditIO, 1);
}
break;
}
if (!(CDP_EditIO->ioflags & IO_FREEZESCRIPT))
if (CheckScriptSyntax(CDP_EditIO) != TRUE) CDP_EditIO->ioflags |= IO_FREEZESCRIPT;
}
CDP_IOOptions = NULL;
#if _ARX_CEDITOR_
SAFE_DELETE(edit1);
SAFE_DELETE(edit2);
#endif
RECT _wndrect;
GetWindowRect(hWnd, &_wndrect);
IOScript_X = _wndrect.left;
IOScript_Y = _wndrect.top;
IOScript_XX = _wndrect.right - _wndrect.left;
IOScript_YY = _wndrect.bottom - _wndrect.top;
EndDialog(hWnd, TRUE);
}
if (IDCANCEL == LOWORD(wParam))
{
#if _ARX_CEDITOR_
if ((CDP_EditIO) && (edit1) && (edit2))
{
edit_io = CDP_EditIO;
edit_lin1 = LOWORD(edit1->GetCurrentPos());
edit_lin2 = LOWORD(edit2->GetCurrentPos());
}
SAFE_DELETE(edit1);
SAFE_DELETE(edit2);
#endif
CDP_IOOptions = NULL;
RECT _wndrect;
GetWindowRect(hWnd, &_wndrect);
IOScript_X = _wndrect.left;
IOScript_Y = _wndrect.top;
IOScript_XX = _wndrect.right - _wndrect.left;
IOScript_YY = _wndrect.bottom - _wndrect.top;
EndDialog(hWnd, TRUE);
}
}
break;
case WM_INITDIALOG:
{
uFindReplaceMsg = RegisterWindowMessage(FINDMSGSTRING);
if (CDP_EditIO)
{
// Isis Athena
char temp[256];
thWnd = GetDlgItem(hWnd, IDC_OBJNAME);
strcpy(temp, GetName(CDP_EditIO->filename));
sprintf(temp, "%s_%04d", temp, CDP_EditIO->ident);
SetWindowText(thWnd, temp);
thWnd = GetDlgItem(hWnd, IDC_EDIT1);
#if _ARX_CEDITOR_
edit1 = new CEditor(thWnd, SW_SHOW);
if (CDP_EditIO->script.data)
{
memcpy(text1, CDP_EditIO->script.data, CDP_EditIO->script.size);
text1[CDP_EditIO->script.size] = 0;
for (long k = CDP_EditIO->script.size; k > 0; k--)
{
if (text1[k] <= 32) text1[k] = 0;
else break;
}
}
else strcpy(text1, "");
edit1->SetText(text1);
edit1->SetBackgroundColor(0x00FFFFFF);
HWND h1, h2;
h1 = GetDlgItem(hWnd, IDC_LINE1);
h2 = GetDlgItem(hWnd, IDC_COL1);
edit1->SetHwndWindowPos(h1, h2);
thWnd = GetDlgItem(hWnd, IDC_EDIT2);
edit2 = new CEditor(thWnd, SW_SHOW);
if (CDP_EditIO->over_script.data)
{
memcpy(text2, CDP_EditIO->over_script.data, CDP_EditIO->over_script.size);
text2[CDP_EditIO->over_script.size] = 0;
for (long k = CDP_EditIO->over_script.size; k > 0; k--)
{
if (text2[k] <= 32) text2[k] = 0;
else break;
}
}
else strcpy(text2, "");
edit2->SetText(text2);
if (CDP_EditIO->ident == -1)
edit2->SetBackgroundColor(0x000000FF);
else
edit2->SetBackgroundColor(0x00FFFFFF);
h1 = GetDlgItem(hWnd, IDC_LINE2);
h2 = GetDlgItem(hWnd, IDC_COL2);
edit2->SetHwndWindowPos(h1, h2);
if ((edit_io == CDP_EditIO) && (edit_io != NULL))
{
edit1->SetCurrentLinePos(edit_lin1);
edit2->SetCurrentLinePos(edit_lin2);
}
#endif
if (CDP_EditIO->ioflags & IO_FREEZESCRIPT) SetCheck(hWnd, IDC_FREEZESCRIPT, CHECK);
RECT rec;
GetWindowRect(hWnd, &rec);
if (LastErrorPopupNO2 != NULL)
{
SetWindowPos(LastErrorPopupNO2, HWND_TOPMOST, rec.left + rec.right - rec.left, rec.top + 200, 0, 0, SWP_NOSIZE);
SetCheck(hWnd, IDC_FREEZESCRIPT, CHECK);
}
if (LastErrorPopupNO1 != NULL)
{
SetWindowPos(LastErrorPopupNO1, HWND_TOPMOST, rec.left + rec.right - rec.left, rec.top, 0, 0, SWP_NOSIZE);
SetCheck(hWnd, IDC_FREEZESCRIPT, CHECK);
}
}
if (IOScript_X != -1)
{
SetWindowPos(hWnd, NULL, IOScript_X, IOScript_Y, IOScript_XX, IOScript_YY, SWP_NOZORDER);
}
return TRUE;
}
}
return FALSE;
}
extern HWND CDP_SOUNDOptions;
//*************************************************************************************
//*************************************************************************************
BOOL CALLBACK LanguageOptionsProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM)
{
if (WM_COMMAND == uMsg)
switch (LOWORD(wParam))
{
case IDOK:
if (IsChecked(hWnd, IDC_LANGUAGE1))
{
strcpy(Project.localisationpath, "english");
}
if (IsChecked(hWnd, IDC_LANGUAGE2))
{
strcpy(Project.localisationpath, "fr");
}
EndDialog(hWnd, TRUE);
break;
case IDCANCEL:
EndDialog(hWnd, TRUE);
break;
}
return FALSE;
}
//*************************************************************************************
// Creates A Text Box
//*************************************************************************************
void TextBox(char * title, char * text, long size)
{
ARX_TIME_Pause();
GTE_TITLE = title;
GTE_TEXT = text;
GTE_SIZE = size;
DialogBox((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_GAIATEXTEDIT), danaeApp.m_hWnd, GaiaTextEdit);
ARX_TIME_UnPause();
}
extern long LastSelectedLight;
//-----------------------------------------------------------------------------
void launchlightdialog()
{
if ((LastSelectedLight != -1)
&& (GLight[LastSelectedLight] != NULL)
&& (GLight[LastSelectedLight]->exist))
{
if (!CDP_LIGHTOptions)
{
memcpy(&lightparam, GLight[LastSelectedLight], sizeof(EERIE_LIGHT));
CDP_EditLight = GLight[LastSelectedLight];
if (danaeApp.m_pFramework->m_bIsFullscreen)
{
ARX_TIME_Pause();
danaeApp.Pause(TRUE);
DialogBox((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_LIGHTDIALOG), danaeApp.m_hWnd, LightOptionsProc);
danaeApp.Pause(FALSE);
ARX_TIME_UnPause();
}
else
CDP_LIGHTOptions = (CreateDialogParam((HINSTANCE)GetWindowLong(danaeApp.m_hWnd, GWL_HINSTANCE),
MAKEINTRESOURCE(IDD_LIGHTDIALOG), danaeApp.m_hWnd, LightOptionsProc, 0));
}
}
}