diff --git a/.travis.yml b/.travis.yml
index 880791ae..f8c97def 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -37,6 +37,7 @@ matrix:
before_script:
- export CC=clang
- export CPLUS=clang++
+ - export MACOSX_DEPLOYMENT_TARGET=10.10
script: cd main/source/linux && make
allow_failures:
diff --git a/main/source/cl_dll/cl_dll.vcxproj b/main/source/cl_dll/cl_dll.vcxproj
index 603f4466..b487e5a1 100644
--- a/main/source/cl_dll/cl_dll.vcxproj
+++ b/main/source/cl_dll/cl_dll.vcxproj
@@ -14,7 +14,7 @@
{665C1DAF-9248-E06F-4E5C-A664BAFDE9D8}
- 10.0.16299.0
+ 10.0
@@ -22,7 +22,7 @@
false
false
MultiByte
- v141
+ v142
diff --git a/main/source/cl_dll/vgui_ScorePanel.cpp b/main/source/cl_dll/vgui_ScorePanel.cpp
index b820283c..ab2f2258 100644
--- a/main/source/cl_dll/vgui_ScorePanel.cpp
+++ b/main/source/cl_dll/vgui_ScorePanel.cpp
@@ -107,17 +107,6 @@ int EV_TFC_IsAllyTeam( int iTeam1, int iTeam2 );
void LoadData(void* inBuffer, const unsigned char* inData, int inSizeToCopy, int& inSizeVariable);
void SaveData(unsigned char* inBuffer, const void* inData, int inSizeToCopy, int& inSizeVariable);
-void Output(const char* szFormat, ...)
-{
- char szBuff[1024];
- va_list arg;
- va_start(arg, szFormat);
- _vsnprintf(szBuff, sizeof(szBuff), szFormat, arg);
- va_end(arg);
-
- OutputDebugString(szBuff);
-}
-
int ScorePanel_InitializeDemoPlayback(int inSize, unsigned char* inBuffer)
{
int theBytesRead = 0;
@@ -398,6 +387,7 @@ ScorePanel::ScorePanel(int x, int y, int wide, int tall) : Panel(x, y, wide, tal
m_pCloseButton->setFont(tfont);
m_pCloseButton->setBoundKey( (char)255 );
m_pCloseButton->setContentAlignment(Label::a_center);
+
Initialize();
}
@@ -1100,10 +1090,7 @@ void ScorePanel::FillGrid()
}
*/
// set Player Color
- //Output((to_string(thePlayerId)+ string("\n")).c_str());
- //ConsolePrint((to_string(thePlayerId)+ string("\n")).c_str());
-
-
+
switch (theTeamNumber) {
case 1:
@@ -1327,13 +1314,16 @@ void ScorePanel::FillGrid()
pLabel->setFgColorAsImageColor(false);
// Parse color (last 3 bytes are the RGB values 1-9)
- string theColor = theCustomIcon.substr( strlen(theCustomIcon.c_str())-3, 3);
+ string theColor = theCustomIcon.substr( strlen(theCustomIcon.c_str()) - 3, 3);
+ string rStr = theColor.substr(0, 1);
+ string bStr = theColor.substr(1, 1);
+ string gStr = theColor.substr(2, 1);
-
- int theRed = (MakeIntFromString(theColor.substr(0, 1))/9.0f)*255;
- int theGreen = (MakeIntFromString(theColor.substr(1, 1))/9.0f)*255;
- int theBlue = (MakeIntFromString(theColor.substr(2, 1))/9.0f)*255;
+ //pass reference type
+ int theRed = (MakeIntFromString(rStr) / 9.0f) * 255;
+ int theGreen = (MakeIntFromString(bStr) / 9.0f) * 255;
+ int theBlue = (MakeIntFromString(gStr) / 9.0f) * 255;
pIcon->setColor(BuildColor(theRed, theGreen, theBlue, gHUD.GetGammaSlope()));
@@ -1364,12 +1354,6 @@ void ScorePanel::FillGrid()
}
#endif
break;
- /* case COLUMN_PLAYER_COLOR:
- Preparation for Player Color in own column
- pLabel->setImage(m_pCYellow);
- pLabel->setFgColorAsImageColor(false);
- m_pCYellow->setColor(BuildColor(255, 255, 255, gHUD.GetGammaSlope()));
- break;*/
case COLUMN_SCORE:
if(!theIsForEnemy && theLocalPlayerTeam != TEAM_IND || (gHUD.GetPlayMode() == PLAYMODE_OBSERVER))
{
diff --git a/main/source/dlls/Playtest/hl.vcxproj.FileListAbsolute.txt b/main/source/dlls/Playtest/hl.vcxproj.FileListAbsolute.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/main/source/dlls/Playtest/vc141.idb b/main/source/dlls/Playtest/vc141.idb
deleted file mode 100644
index 67a621f6..00000000
Binary files a/main/source/dlls/Playtest/vc141.idb and /dev/null differ
diff --git a/main/source/dlls/Playtest/vc142.idb b/main/source/dlls/Playtest/vc142.idb
new file mode 100644
index 00000000..25405baa
Binary files /dev/null and b/main/source/dlls/Playtest/vc142.idb differ
diff --git a/main/source/dlls/hl.vcxproj b/main/source/dlls/hl.vcxproj
index 1981e109..d68f36e3 100644
--- a/main/source/dlls/hl.vcxproj
+++ b/main/source/dlls/hl.vcxproj
@@ -26,29 +26,29 @@
{BC87A180-F17B-83FC-5D7D-470FAD003ABC}
- 10.0.16299.0
+ 10.0
DynamicLibrary
false
- v141
+ v142
DynamicLibrary
false
MultiByte
- v141
+ v142
DynamicLibrary
false
- v141
+ v142
DynamicLibrary
false
- v141
+ v142
diff --git a/main/source/linux/Makefile b/main/source/linux/Makefile
index eee80f55..d70ceb3d 100644
--- a/main/source/linux/Makefile
+++ b/main/source/linux/Makefile
@@ -49,7 +49,7 @@ ifeq ($(OS),Darwin)
endif
#SDKROOT ?= $(SDK_DIR)/MacOSX10.6.sdk
- SDKROOT ?= $(SDK_DIR)/MacOSX10.8.sdk
+ SDKROOT ?= $(SDK_DIR)/MacOSX10.10.sdk
ARCH_FLAGS ?= -arch i386 -m32 -march=prescott -gdwarf-2 -g2 -Wno-typedef-redefinition -momit-leaf-frame-pointer -mtune=core2
CPP_LIB=-lstdc++ -lpthread
@@ -58,10 +58,10 @@ ifeq ($(OS),Darwin)
AR = libtool -static -o
endif
ifeq ($(origin CC), default)
- CC ="$(COMPILER_BIN_DIR)/clang -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
+ CC ="$(COMPILER_BIN_DIR)/clang -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.7 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
endif
ifeq ($(origin CPLUS), default)
- CPLUS ="$(COMPILER_BIN_DIR)/clang++ -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.5 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
+ CPLUS ="$(COMPILER_BIN_DIR)/clang++ -std=c++11 -Qunused-arguments -isysroot $(SDKROOT) -mmacosx-version-min=10.7 -fasm-blocks -I$(SDKROOT)/usr/include/malloc $(ARCH_FLAGS)"
endif
LINK ?= $(CPLUS)
endif
diff --git a/main/source/linux/Makefile.hl_cdll b/main/source/linux/Makefile.hl_cdll
index d49acfd3..15ae72e6 100644
--- a/main/source/linux/Makefile.hl_cdll
+++ b/main/source/linux/Makefile.hl_cdll
@@ -32,14 +32,21 @@ INCLUDEDIRS= -I$(HL_SRC_DIR) -I$(NS_MOD_SRC_DIR) -I$(COMMON_SRC_DIR) -I$(PUBLIC_
ifeq ($(OS),Darwin)
LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -L. libpng12.dylib -lz -framework Carbon -framework OpenGL vgui.dylib -L. -lSDL2-2.0.0 -L. libparticleMP.a
+DO_CC=$(CPLUS) -std=c++11 -stdlib=libc++ $(INCLUDEDIRS) $(CFLAGS) -o $@ -c $<
+DO_PUBLIC_CC=$(CPLUS) -std=c++11 -stdlib=libc++ $(COMMON_INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
+DO_COMMON_CC=$(CPLUS) -std=c++11 -stdlib=libc++ $(INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
+DO_PM_SHARED_CC=$(CPLUS) -std=c++11 -stdlib=libc++ $(INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
+
else
LDFLAGS=$(SHLIBLDFLAGS) $(CPP_LIB) -lpng -lz -lfmod-3.75 -L$(CFG) vgui.so -L. libSDL2-2.0.so.0 -L. libparticleMP.a
-endif
-
DO_CC=$(CPLUS) $(INCLUDEDIRS) $(CFLAGS) -o $@ -c $<
DO_PUBLIC_CC=$(CPLUS) $(COMMON_INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
DO_COMMON_CC=$(CPLUS) $(INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
DO_PM_SHARED_CC=$(CPLUS) $(INCLUDEDIRS) $(CFLAGS) $(SHLIBCFLAGS) -o $@ -c $<
+
+endif
+
+
#####################################################################
HL1_OBJS = \
diff --git a/main/source/particles/HLRender.cpp b/main/source/particles/HLRender.cpp
index 2264f424..eedf43c6 100644
--- a/main/source/particles/HLRender.cpp
+++ b/main/source/particles/HLRender.cpp
@@ -8,11 +8,11 @@
#endif
//#include
-#include "common/triangleapi.h"
-#include "cl_dll/wrect.h"
-#include "cl_dll/cl_dll.h"
-#include "common/renderingconst.h"
-#include "particles/papi.h"
+#include "../common/triangleapi.h"
+#include "../cl_dll/wrect.h"
+#include "../cl_dll/cl_dll.h"
+#include "../common/renderingconst.h"
+#include "papi.h"
// XXX #include
diff --git a/main/source/particles/Makefile b/main/source/particles/Makefile
index 4ff94947..e6aabae6 100644
--- a/main/source/particles/Makefile
+++ b/main/source/particles/Makefile
@@ -5,7 +5,7 @@
#
######################################################################
-C++ = g++ -m32
+C++ = g++ -std=c++11 -m32
GLUT_HOME =/usr/local/contrib/unmoderated
diff --git a/main/source/particles/WIN32_Release/particles.lastbuildstate b/main/source/particles/WIN32_Release/particles.lastbuildstate
deleted file mode 100644
index 308d264d..00000000
--- a/main/source/particles/WIN32_Release/particles.lastbuildstate
+++ /dev/null
@@ -1,2 +0,0 @@
-#v4.0:v100
-Release|Win32|C:\Users\fabian\Downloads\NS\main\source\particles\|
diff --git a/main/source/particles/WIN32_Release/particles.lib b/main/source/particles/WIN32_Release/particles.lib
deleted file mode 100644
index 0fcbb530..00000000
Binary files a/main/source/particles/WIN32_Release/particles.lib and /dev/null differ
diff --git a/main/source/particles/action_api.cpp b/main/source/particles/action_api.cpp
index c00ae746..5e13de78 100644
--- a/main/source/particles/action_api.cpp
+++ b/main/source/particles/action_api.cpp
@@ -7,7 +7,7 @@
// added to an action list.
#include "general.h"
-#include "particles/papi.h"
+#include "papi.h"
extern void _pAddActionToList(ParticleAction *S, int size);
extern void _pCallActionList(ParticleAction *pa, int num_actions,
@@ -33,359 +33,361 @@ void _pSendAction(ParticleAction *S, PActionEnum type, int size)
}
}
-PARTICLEDLL_API void pAvoid(float magnitude, float epsilon, float look_ahead,
- PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PAAvoid S;
-
- S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.look_ahead = look_ahead;
-
- _pSendAction(&S, PAAvoidID, sizeof(PAAvoid));
-}
-
-PARTICLEDLL_API void pBounce(float friction, float resilience, float cutoff,
- PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PABounce S;
-
- S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
- S.oneMinusFriction = 1.0f - friction;
- S.resilience = resilience;
- S.cutoffSqr = fsqr(cutoff);
-
- _pSendAction(&S, PABounceID, sizeof(PABounce));
-}
-
-PARTICLEDLL_API void pCopyVertexB(bool copy_pos, bool copy_vel)
-{
- PACopyVertexB S;
-
- S.copy_pos = copy_pos;
- S.copy_vel = copy_vel;
-
- _pSendAction(&S, PACopyVertexBID, sizeof(PACopyVertexB));
-}
-
-PARTICLEDLL_API void pDamping(float damping_x, float damping_y, float damping_z,
- float vlow, float vhigh)
-{
- PADamping S;
-
- S.damping = pVector(damping_x, damping_y, damping_z);
- S.vlowSqr = fsqr(vlow);
- S.vhighSqr = fsqr(vhigh);
-
- _pSendAction(&S, PADampingID, sizeof(PADamping));
-}
-
-PARTICLEDLL_API void pExplosion(float center_x, float center_y, float center_z, float velocity,
- float magnitude, float stdev, float epsilon, float age)
-{
- PAExplosion S;
-
- S.center = pVector(center_x, center_y, center_z);
- S.velocity = velocity;
- S.magnitude = magnitude;
- S.stdev = stdev;
- S.epsilon = epsilon;
- S.age = age;
-
- if(S.epsilon < 0.0f)
- S.epsilon = P_EPS;
-
- _pSendAction(&S, PAExplosionID, sizeof(PAExplosion));
-}
-
-PARTICLEDLL_API void pFollow(float magnitude, float epsilon, float max_radius)
-{
- PAFollow S;
-
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAFollowID, sizeof(PAFollow));
-}
-
-PARTICLEDLL_API void pGravitate(float magnitude, float epsilon, float max_radius)
-{
- PAGravitate S;
-
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAGravitateID, sizeof(PAGravitate));
-}
-
-PARTICLEDLL_API void pGravity(float dir_x, float dir_y, float dir_z)
-{
- PAGravity S;
-
- S.direction = pVector(dir_x, dir_y, dir_z);
-
- _pSendAction(&S, PAGravityID, sizeof(PAGravity));
-}
-
-PARTICLEDLL_API void pJet(float center_x, float center_y, float center_z,
- float magnitude, float epsilon, float max_radius)
-{
- _ParticleState &_ps = _GetPState();
-
- PAJet S;
-
- S.center = pVector(center_x, center_y, center_z);
- S.acc = _ps.Vel;
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAJetID, sizeof(PAJet));
-}
-
-PARTICLEDLL_API void pKillOld(float age_limit, bool kill_less_than)
-{
- PAKillOld S;
-
- S.age_limit = age_limit;
- S.kill_less_than = kill_less_than;
-
- _pSendAction(&S, PAKillOldID, sizeof(PAKillOld));
-}
-
-PARTICLEDLL_API void pMatchVelocity(float magnitude, float epsilon, float max_radius)
-{
- PAMatchVelocity S;
-
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAMatchVelocityID, sizeof(PAMatchVelocity));
-}
-
-PARTICLEDLL_API void pMove()
-{
- PAMove S;
-
- _pSendAction(&S, PAMoveID, sizeof(PAMove));
-}
-
-PARTICLEDLL_API void pOrbitLine(float p_x, float p_y, float p_z,
- float axis_x, float axis_y, float axis_z,
- float magnitude, float epsilon, float max_radius)
-{
- PAOrbitLine S;
-
- S.p = pVector(p_x, p_y, p_z);
- S.axis = pVector(axis_x, axis_y, axis_z);
- S.axis.normalize();
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAOrbitLineID, sizeof(PAOrbitLine));
-}
-
-PARTICLEDLL_API void pOrbitPoint(float center_x, float center_y, float center_z,
- float magnitude, float epsilon, float max_radius)
-{
- PAOrbitPoint S;
-
- S.center = pVector(center_x, center_y, center_z);
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAOrbitPointID, sizeof(PAOrbitPoint));
-}
-
-PARTICLEDLL_API void pRandomAccel(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PARandomAccel S;
-
- S.gen_acc = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
- _pSendAction(&S, PARandomAccelID, sizeof(PARandomAccel));
-}
-
-PARTICLEDLL_API void pRandomDisplace(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PARandomDisplace S;
-
- S.gen_disp = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
- _pSendAction(&S, PARandomDisplaceID, sizeof(PARandomDisplace));
-}
-
-PARTICLEDLL_API void pRandomVelocity(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PARandomVelocity S;
-
- S.gen_vel = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
- _pSendAction(&S, PARandomVelocityID, sizeof(PARandomVelocity));
-}
-
-PARTICLEDLL_API void pRestore(float time_left)
-{
- PARestore S;
-
- S.time_left = time_left;
-
- _pSendAction(&S, PARestoreID, sizeof(PARestore));
-}
-
-PARTICLEDLL_API void pSink(bool kill_inside, PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PASink S;
-
- S.kill_inside = kill_inside;
- S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
- _pSendAction(&S, PASinkID, sizeof(PASink));
-}
-
-PARTICLEDLL_API void pSinkVelocity(bool kill_inside, PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- PASinkVelocity S;
-
- S.kill_inside = kill_inside;
- S.velocity = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-
- _pSendAction(&S, PASinkVelocityID, sizeof(PASinkVelocity));
-}
-
-PARTICLEDLL_API void pSource(float particle_rate, PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- _ParticleState &_ps = _GetPState();
-
- PASource S;
-
- S.particle_rate = particle_rate;
- S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
- S.positionB = _ps.VertexB;
- S.size = _ps.Size;
- S.velocity = _ps.Vel;
- S.color = _ps.Color;
- S.alpha = _ps.Alpha;
- S.age = _ps.Age;
- S.age_sigma = _ps.AgeSigma;
- S.vertexB_tracks = _ps.vertexB_tracks;
-
- _pSendAction(&S, PASourceID, sizeof(PASource));
-}
-
-PARTICLEDLL_API void pSpeedLimit(float min_speed, float max_speed)
-{
- PASpeedLimit S;
-
- S.min_speed = min_speed;
- S.max_speed = max_speed;
-
- _pSendAction(&S, PASpeedLimitID, sizeof(PASpeedLimit));
-}
-
-PARTICLEDLL_API void pTargetColor(float color_x, float color_y, float color_z,
- float alpha, float scale)
-{
- PATargetColor S;
-
- S.color = pVector(color_x, color_y, color_z);
- S.alpha = alpha;
- S.scale = scale;
-
- _pSendAction(&S, PATargetColorID, sizeof(PATargetColor));
-}
-
-PARTICLEDLL_API void pTargetSize(float size_x, float size_y, float size_z,
- float scale_x, float scale_y, float scale_z)
-{
- PATargetSize S;
-
- S.size = pVector(size_x, size_y, size_z);
- S.scale = pVector(scale_x, scale_y, scale_z);
-
- _pSendAction(&S, PATargetSizeID, sizeof(PATargetSize));
-}
-
-PARTICLEDLL_API void pTargetVelocity(float vel_x, float vel_y, float vel_z, float scale)
-{
- PATargetVelocity S;
-
- S.velocity = pVector(vel_x, vel_y, vel_z);
- S.scale = scale;
-
- _pSendAction(&S, PATargetVelocityID, sizeof(PATargetVelocity));
-}
-
-// If in immediate mode, quickly add a vertex.
-// If building an action list, call pSource.
-PARTICLEDLL_API void pVertex(float x, float y, float z)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
+extern "C" {
+ void pAvoid(float magnitude, float epsilon, float look_ahead,
+ PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
{
- pSource(1, PDPoint, x, y, z);
- return;
- }
-
- // Immediate mode. Quickly add the vertex.
- if(_ps.pgrp == NULL)
- return;
-
- pVector pos(x, y, z);
- pVector siz, vel, col, posB;
- if(_ps.vertexB_tracks)
- posB = pos;
- else
- _ps.VertexB.Generate(posB);
- _ps.Size.Generate(siz);
- _ps.Vel.Generate(vel);
- _ps.Color.Generate(col);
- _ps.pgrp->Add(pos, posB, siz, vel, col, _ps.Alpha, _ps.Age);
-}
+ PAAvoid S;
-PARTICLEDLL_API void pVortex(float center_x, float center_y, float center_z,
- float axis_x, float axis_y, float axis_z,
- float magnitude, float epsilon, float max_radius)
-{
- PAVortex S;
-
- S.center = pVector(center_x, center_y, center_z);
- S.axis = pVector(axis_x, axis_y, axis_z);
- S.axis.normalize();
- S.magnitude = magnitude;
- S.epsilon = epsilon;
- S.max_radius = max_radius;
-
- _pSendAction(&S, PAVortexID, sizeof(PAVortex));
-}
+ S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.look_ahead = look_ahead;
+
+ _pSendAction(&S, PAAvoidID, sizeof(PAAvoid));
+ }
+
+ void pBounce(float friction, float resilience, float cutoff,
+ PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PABounce S;
+
+ S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ S.oneMinusFriction = 1.0f - friction;
+ S.resilience = resilience;
+ S.cutoffSqr = fsqr(cutoff);
+
+ _pSendAction(&S, PABounceID, sizeof(PABounce));
+ }
+
+ void pCopyVertexB(bool copy_pos, bool copy_vel)
+ {
+ PACopyVertexB S;
+
+ S.copy_pos = copy_pos;
+ S.copy_vel = copy_vel;
+
+ _pSendAction(&S, PACopyVertexBID, sizeof(PACopyVertexB));
+ }
+
+ void pDamping(float damping_x, float damping_y, float damping_z,
+ float vlow, float vhigh)
+ {
+ PADamping S;
+
+ S.damping = pVector(damping_x, damping_y, damping_z);
+ S.vlowSqr = fsqr(vlow);
+ S.vhighSqr = fsqr(vhigh);
+
+ _pSendAction(&S, PADampingID, sizeof(PADamping));
+ }
+
+ void pExplosion(float center_x, float center_y, float center_z, float velocity,
+ float magnitude, float stdev, float epsilon, float age)
+ {
+ PAExplosion S;
+
+ S.center = pVector(center_x, center_y, center_z);
+ S.velocity = velocity;
+ S.magnitude = magnitude;
+ S.stdev = stdev;
+ S.epsilon = epsilon;
+ S.age = age;
+
+ if (S.epsilon < 0.0f)
+ S.epsilon = P_EPS;
+
+ _pSendAction(&S, PAExplosionID, sizeof(PAExplosion));
+ }
+
+ void pFollow(float magnitude, float epsilon, float max_radius)
+ {
+ PAFollow S;
+
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAFollowID, sizeof(PAFollow));
+ }
+
+ void pGravitate(float magnitude, float epsilon, float max_radius)
+ {
+ PAGravitate S;
+
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAGravitateID, sizeof(PAGravitate));
+ }
+
+ void pGravity(float dir_x, float dir_y, float dir_z)
+ {
+ PAGravity S;
+
+ S.direction = pVector(dir_x, dir_y, dir_z);
+
+ _pSendAction(&S, PAGravityID, sizeof(PAGravity));
+ }
+
+ void pJet(float center_x, float center_y, float center_z,
+ float magnitude, float epsilon, float max_radius)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ PAJet S;
+
+ S.center = pVector(center_x, center_y, center_z);
+ S.acc = _ps.Vel;
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAJetID, sizeof(PAJet));
+ }
+
+ void pKillOld(float age_limit, bool kill_less_than)
+ {
+ PAKillOld S;
+
+ S.age_limit = age_limit;
+ S.kill_less_than = kill_less_than;
+
+ _pSendAction(&S, PAKillOldID, sizeof(PAKillOld));
+ }
+
+ void pMatchVelocity(float magnitude, float epsilon, float max_radius)
+ {
+ PAMatchVelocity S;
+
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAMatchVelocityID, sizeof(PAMatchVelocity));
+ }
+
+ void pMove()
+ {
+ PAMove S;
+
+ _pSendAction(&S, PAMoveID, sizeof(PAMove));
+ }
+
+ void pOrbitLine(float p_x, float p_y, float p_z,
+ float axis_x, float axis_y, float axis_z,
+ float magnitude, float epsilon, float max_radius)
+ {
+ PAOrbitLine S;
+
+ S.p = pVector(p_x, p_y, p_z);
+ S.axis = pVector(axis_x, axis_y, axis_z);
+ S.axis.normalize();
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAOrbitLineID, sizeof(PAOrbitLine));
+ }
+
+ void pOrbitPoint(float center_x, float center_y, float center_z,
+ float magnitude, float epsilon, float max_radius)
+ {
+ PAOrbitPoint S;
+
+ S.center = pVector(center_x, center_y, center_z);
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAOrbitPointID, sizeof(PAOrbitPoint));
+ }
+
+ void pRandomAccel(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PARandomAccel S;
+
+ S.gen_acc = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ _pSendAction(&S, PARandomAccelID, sizeof(PARandomAccel));
+ }
+
+ void pRandomDisplace(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PARandomDisplace S;
+
+ S.gen_disp = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ _pSendAction(&S, PARandomDisplaceID, sizeof(PARandomDisplace));
+ }
+
+ void pRandomVelocity(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PARandomVelocity S;
+
+ S.gen_vel = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ _pSendAction(&S, PARandomVelocityID, sizeof(PARandomVelocity));
+ }
+
+ void pRestore(float time_left)
+ {
+ PARestore S;
+
+ S.time_left = time_left;
+
+ _pSendAction(&S, PARestoreID, sizeof(PARestore));
+ }
+
+ void pSink(bool kill_inside, PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PASink S;
+
+ S.kill_inside = kill_inside;
+ S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ _pSendAction(&S, PASinkID, sizeof(PASink));
+ }
+
+ void pSinkVelocity(bool kill_inside, PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ PASinkVelocity S;
+
+ S.kill_inside = kill_inside;
+ S.velocity = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+
+ _pSendAction(&S, PASinkVelocityID, sizeof(PASinkVelocity));
+ }
+
+ void pSource(float particle_rate, PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ PASource S;
+
+ S.particle_rate = particle_rate;
+ S.position = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ S.positionB = _ps.VertexB;
+ S.size = _ps.Size;
+ S.velocity = _ps.Vel;
+ S.color = _ps.Color;
+ S.alpha = _ps.Alpha;
+ S.age = _ps.Age;
+ S.age_sigma = _ps.AgeSigma;
+ S.vertexB_tracks = _ps.vertexB_tracks;
+
+ _pSendAction(&S, PASourceID, sizeof(PASource));
+ }
+
+ void pSpeedLimit(float min_speed, float max_speed)
+ {
+ PASpeedLimit S;
+
+ S.min_speed = min_speed;
+ S.max_speed = max_speed;
+
+ _pSendAction(&S, PASpeedLimitID, sizeof(PASpeedLimit));
+ }
+
+ void pTargetColor(float color_x, float color_y, float color_z,
+ float alpha, float scale)
+ {
+ PATargetColor S;
+
+ S.color = pVector(color_x, color_y, color_z);
+ S.alpha = alpha;
+ S.scale = scale;
+
+ _pSendAction(&S, PATargetColorID, sizeof(PATargetColor));
+ }
+
+ void pTargetSize(float size_x, float size_y, float size_z,
+ float scale_x, float scale_y, float scale_z)
+ {
+ PATargetSize S;
+
+ S.size = pVector(size_x, size_y, size_z);
+ S.scale = pVector(scale_x, scale_y, scale_z);
+
+ _pSendAction(&S, PATargetSizeID, sizeof(PATargetSize));
+ }
+
+ void pTargetVelocity(float vel_x, float vel_y, float vel_z, float scale)
+ {
+ PATargetVelocity S;
+
+ S.velocity = pVector(vel_x, vel_y, vel_z);
+ S.scale = scale;
+
+ _pSendAction(&S, PATargetVelocityID, sizeof(PATargetVelocity));
+ }
+
+ // If in immediate mode, quickly add a vertex.
+ // If building an action list, call pSource.
+ void pVertex(float x, float y, float z)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ {
+ pSource(1, PDPoint, x, y, z);
+ return;
+ }
+
+ // Immediate mode. Quickly add the vertex.
+ if (_ps.pgrp == NULL)
+ return;
+
+ pVector pos(x, y, z);
+ pVector siz, vel, col, posB;
+ if (_ps.vertexB_tracks)
+ posB = pos;
+ else
+ _ps.VertexB.Generate(posB);
+ _ps.Size.Generate(siz);
+ _ps.Vel.Generate(vel);
+ _ps.Color.Generate(col);
+ _ps.pgrp->Add(pos, posB, siz, vel, col, _ps.Alpha, _ps.Age);
+ }
+
+ void pVortex(float center_x, float center_y, float center_z,
+ float axis_x, float axis_y, float axis_z,
+ float magnitude, float epsilon, float max_radius)
+ {
+ PAVortex S;
+
+ S.center = pVector(center_x, center_y, center_z);
+ S.axis = pVector(axis_x, axis_y, axis_z);
+ S.axis.normalize();
+ S.magnitude = magnitude;
+ S.epsilon = epsilon;
+ S.max_radius = max_radius;
+
+ _pSendAction(&S, PAVortexID, sizeof(PAVortex));
+ }
+}
\ No newline at end of file
diff --git a/main/source/particles/cpp.hint b/main/source/particles/cpp.hint
new file mode 100644
index 00000000..96d83f3a
--- /dev/null
+++ b/main/source/particles/cpp.hint
@@ -0,0 +1,4 @@
+// Hint files help the Visual Studio IDE interpret Visual C++ identifiers
+// such as names of functions and macros.
+// For more information see https://go.microsoft.com/fwlink/?linkid=865984
+#define PARTICLEDLL_API
diff --git a/main/source/particles/opengl.cpp b/main/source/particles/opengl.cpp
index 564ff577..4ab76f74 100644
--- a/main/source/particles/opengl.cpp
+++ b/main/source/particles/opengl.cpp
@@ -21,136 +21,139 @@
// XXX #include
-// Emit OpenGL calls to draw the particles. These are drawn with
-// whatever primitive type the user specified(GL_POINTS, for
-// example). The color and radius are set per primitive, by default.
-// For GL_LINES, the other vertex of the line is the velocity vector.
-// XXX const_size is ignored.
-PARTICLEDLL_API void pDrawGroupp(int primitive, bool const_size, bool const_color)
-{
- _ParticleState &_ps = _GetPState();
+extern "C" {
- // Get a pointer to the particles in gp memory
- ParticleGroup *pg = _ps.pgrp;
+ // Emit OpenGL calls to draw the particles. These are drawn with
+ // whatever primitive type the user specified(GL_POINTS, for
+ // example). The color and radius are set per primitive, by default.
+ // For GL_LINES, the other vertex of the line is the velocity vector.
+ // XXX const_size is ignored.
+ void pDrawGroupp(int primitive, bool const_size, bool const_color)
+ {
+ _ParticleState& _ps = _GetPState();
- if(pg == NULL)
- return; // ERROR
-
- if(pg->p_count < 1)
- return;
-
- if(primitive == GL_POINTS)
- {
- glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
- glEnableClientState(GL_VERTEX_ARRAY);
- if(!const_color)
+ // Get a pointer to the particles in gp memory
+ ParticleGroup* pg = _ps.pgrp;
+
+ if (pg == NULL)
+ return; // ERROR
+
+ if (pg->p_count < 1)
+ return;
+
+ if (primitive == GL_POINTS)
{
- glEnableClientState(GL_COLOR_ARRAY);
- glColorPointer(4, GL_FLOAT, sizeof(Particle), &pg->list[0].color);
- }
-
- glVertexPointer(3, GL_FLOAT, sizeof(Particle), &pg->list[0].pos);
- glDrawArrays((GLenum)primitive, 0, pg->p_count);
- glPopClientAttrib();
- // XXX For E&S
- glDisableClientState(GL_COLOR_ARRAY);
- }
- else
- {
- // Assume GL_LINES
- glBegin((GLenum)primitive);
-
- if(!const_color)
- {
- for(int i = 0; i < pg->p_count; i++)
+ glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ if (!const_color)
{
- Particle &m = pg->list[i];
-
- // Warning: this depends on alpha following color in the Particle struct.
- glColor4fv((GLfloat *)&m.color);
- glVertex3fv((GLfloat *)&m.pos);
-
- // For lines, make a tail with the velocity vector's direction and
- // a length of radius.
- pVector tail = m.pos - m.vel;
- glVertex3fv((GLfloat *)&tail);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glColorPointer(4, GL_FLOAT, sizeof(Particle), &pg->list[0].color);
}
+
+ glVertexPointer(3, GL_FLOAT, sizeof(Particle), &pg->list[0].pos);
+ glDrawArrays((GLenum)primitive, 0, pg->p_count);
+ glPopClientAttrib();
+ // XXX For E&S
+ glDisableClientState(GL_COLOR_ARRAY);
}
else
{
- for(int i = 0; i < pg->p_count; i++)
+ // Assume GL_LINES
+ glBegin((GLenum)primitive);
+
+ if (!const_color)
{
- Particle &m = pg->list[i];
- glVertex3fv((GLfloat *)&m.pos);
-
- // For lines, make a tail with the velocity vector's direction and
- // a length of radius.
- pVector tail = m.pos - m.vel;
- glVertex3fv((GLfloat *)&tail);
+ for (int i = 0; i < pg->p_count; i++)
+ {
+ Particle& m = pg->list[i];
+
+ // Warning: this depends on alpha following color in the Particle struct.
+ glColor4fv((GLfloat*)&m.color);
+ glVertex3fv((GLfloat*)&m.pos);
+
+ // For lines, make a tail with the velocity vector's direction and
+ // a length of radius.
+ pVector tail = m.pos - m.vel;
+ glVertex3fv((GLfloat*)&tail);
+ }
}
- }
- glEnd();
- }
-}
-
-PARTICLEDLL_API void pDrawGroupl(int dlist, bool const_size, bool const_color, bool const_rotation)
-{
- _ParticleState &_ps = _GetPState();
-
- // Get a pointer to the particles in gp memory
- ParticleGroup *pg = _ps.pgrp;
- if(pg == NULL)
- return; // ERROR
-
- if(pg->p_count < 1)
- return;
-
- //if(const_color)
- // glColor4fv((GLfloat *)&pg->list[0].color);
-
- for(int i = 0; i < pg->p_count; i++)
- {
- Particle &m = pg->list[i];
-
- glPushMatrix();
- glTranslatef(m.pos.x, m.pos.y, m.pos.z);
-
- if(!const_size)
- glScalef(m.size.x, m.size.y, m.size.z);
- else
- glScalef(pg->list[i].size.x, pg->list[i].size.y, pg->list[i].size.z);
-
- // Expensive! A sqrt, cross prod and acos. Yow.
- if(!const_rotation)
- {
- pVector vN(m.vel);
- vN.normalize();
- pVector voN(m.velB);
- voN.normalize();
-
- pVector biN;
- if(voN.x == vN.x && voN.y == vN.y && voN.z == vN.z)
- biN = pVector(0, 1, 0);
else
- biN = vN ^ voN;
- biN.normalize();
+ {
+ for (int i = 0; i < pg->p_count; i++)
+ {
+ Particle& m = pg->list[i];
+ glVertex3fv((GLfloat*)&m.pos);
- pVector N(vN ^ biN);
-
- double M[16];
- M[0] = vN.x; M[4] = biN.x; M[8] = N.x; M[12] = 0;
- M[1] = vN.y; M[5] = biN.y; M[9] = N.y; M[13] = 0;
- M[2] = vN.z; M[6] = biN.z; M[10] = N.z; M[14] = 0;
- M[3] = 0; M[7] = 0; M[11] = 0; M[15] = 1;
- glMultMatrixd(M);
+ // For lines, make a tail with the velocity vector's direction and
+ // a length of radius.
+ pVector tail = m.pos - m.vel;
+ glVertex3fv((GLfloat*)&tail);
+ }
+ }
+ glEnd();
}
-
- // Warning: this depends on alpha following color in the Particle struct.
- if(!const_color)
- glColor4fv((GLfloat *)&m.color);
-
- glCallList(dlist);
-
- glPopMatrix();
}
-}
+
+ void pDrawGroupl(int dlist, bool const_size, bool const_color, bool const_rotation)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ // Get a pointer to the particles in gp memory
+ ParticleGroup* pg = _ps.pgrp;
+ if (pg == NULL)
+ return; // ERROR
+
+ if (pg->p_count < 1)
+ return;
+
+ //if(const_color)
+ // glColor4fv((GLfloat *)&pg->list[0].color);
+
+ for (int i = 0; i < pg->p_count; i++)
+ {
+ Particle& m = pg->list[i];
+
+ glPushMatrix();
+ glTranslatef(m.pos.x, m.pos.y, m.pos.z);
+
+ if (!const_size)
+ glScalef(m.size.x, m.size.y, m.size.z);
+ else
+ glScalef(pg->list[i].size.x, pg->list[i].size.y, pg->list[i].size.z);
+
+ // Expensive! A sqrt, cross prod and acos. Yow.
+ if (!const_rotation)
+ {
+ pVector vN(m.vel);
+ vN.normalize();
+ pVector voN(m.velB);
+ voN.normalize();
+
+ pVector biN;
+ if (voN.x == vN.x && voN.y == vN.y && voN.z == vN.z)
+ biN = pVector(0, 1, 0);
+ else
+ biN = vN ^ voN;
+ biN.normalize();
+
+ pVector N(vN ^ biN);
+
+ double M[16];
+ M[0] = vN.x; M[4] = biN.x; M[8] = N.x; M[12] = 0;
+ M[1] = vN.y; M[5] = biN.y; M[9] = N.y; M[13] = 0;
+ M[2] = vN.z; M[6] = biN.z; M[10] = N.z; M[14] = 0;
+ M[3] = 0; M[7] = 0; M[11] = 0; M[15] = 1;
+ glMultMatrixd(M);
+ }
+
+ // Warning: this depends on alpha following color in the Particle struct.
+ if (!const_color)
+ glColor4fv((GLfloat*)&m.color);
+
+ glCallList(dlist);
+
+ glPopMatrix();
+ }
+ }
+}
\ No newline at end of file
diff --git a/main/source/particles/p_vector.h b/main/source/particles/p_vector.h
index 54e28ba1..b6f668a6 100644
--- a/main/source/particles/p_vector.h
+++ b/main/source/particles/p_vector.h
@@ -22,8 +22,6 @@
#define drand48() (((float) rand())/((float) RAND_MAX))
#define srand48(x) srand(x)
-// This is because their stupid compiler thinks it's smart.
-#define inline __forceinline
#endif
class pVector
diff --git a/main/source/particles/papi.h b/main/source/particles/papi.h
index c80e6de4..b933ef43 100644
--- a/main/source/particles/papi.h
+++ b/main/source/particles/papi.h
@@ -14,188 +14,189 @@
#define P_VERSION 120
// added <<< cgc >>>
-#include
-#include
-#include
+#include "p_vector.h"
+#include "general.h"
+#include "particledefs.h"
// State setting calls
-PARTICLEDLL_API void pColor(float red, float green, float blue, float alpha = 1.0f);
+extern "C" {
+ void pColor(float red, float green, float blue, float alpha = 1.0f);
-PARTICLEDLL_API void pColorD(float alpha, PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pColorD(float alpha, PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pSize(float size_x, float size_y = 1.0f, float size_z = 1.0f);
+ void pSize(float size_x, float size_y = 1.0f, float size_z = 1.0f);
-PARTICLEDLL_API void pSizeD(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pSizeD(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pStartingAge(float age, float sigma = 1.0f);
+ void pStartingAge(float age, float sigma = 1.0f);
-PARTICLEDLL_API void pTimeStep(float new_dt);
+ void pTimeStep(float new_dt);
-PARTICLEDLL_API void pVelocity(float x, float y, float z);
+ void pVelocity(float x, float y, float z);
-PARTICLEDLL_API void pVelocityD(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pVelocityD(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pVertexB(float x, float y, float z);
+ void pVertexB(float x, float y, float z);
-PARTICLEDLL_API void pVertexBD(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pVertexBD(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pVertexBTracks(bool track_vertex = true);
+ void pVertexBTracks(bool track_vertex = true);
-// Action List Calls
+ // Action List Calls
-PARTICLEDLL_API void pCallActionList(int action_list_num);
+ void pCallActionList(int action_list_num);
-PARTICLEDLL_API void pDeleteActionLists(int action_list_num, int action_list_count = 1);
+ void pDeleteActionLists(int action_list_num, int action_list_count = 1);
-PARTICLEDLL_API void pEndActionList();
+ void pEndActionList();
-PARTICLEDLL_API int pGenActionLists(int action_list_count = 1);
+ int pGenActionLists(int action_list_count = 1);
-PARTICLEDLL_API void pNewActionList(int action_list_num);
+ void pNewActionList(int action_list_num);
-// Particle Group Calls
+ // Particle Group Calls
-PARTICLEDLL_API ParticleGroup* pGetParticleGroupRef(int p_group_num);
+ ParticleGroup* pGetParticleGroupRef(int p_group_num);
-PARTICLEDLL_API void pCopyGroup(int p_src_group_num, int index = 0, int copy_count = P_MAXINT);
+ void pCopyGroup(int p_src_group_num, int index = 0, int copy_count = P_MAXINT);
-PARTICLEDLL_API void pCurrentGroup(int p_group_num);
+ void pCurrentGroup(int p_group_num);
-PARTICLEDLL_API ParticleGroup* pGetCurrentGroup(void);
+ ParticleGroup* pGetCurrentGroup(void);
-PARTICLEDLL_API void pDeleteParticleGroups(int p_group_num, int p_group_count = 1);
+ void pDeleteParticleGroups(int p_group_num, int p_group_count = 1);
-PARTICLEDLL_API void pDrawGroupl(int dlist, bool const_size = false,
- bool const_color = false, bool const_rotation = false);
+ void pDrawGroupl(int dlist, bool const_size = false,
+ bool const_color = false, bool const_rotation = false);
-PARTICLEDLL_API void pDrawGroupp(int primitive, bool const_size = false,
- bool const_color = false);
+ void pDrawGroupp(int primitive, bool const_size = false,
+ bool const_color = false);
-// Added <<< cgc >>>
-PARTICLEDLL_API void DrawGroupTriSplat(const pVector &view, const pVector &up, float size_scale = 1.0f, bool draw_tex=false, bool const_size=false, bool const_color=false);
-// end
+ // Added <<< cgc >>>
+ void DrawGroupTriSplat(const pVector& view, const pVector& up, float size_scale = 1.0f, bool draw_tex = false, bool const_size = false, bool const_color = false);
+ // end
-PARTICLEDLL_API int pGenParticleGroups(int p_group_count = 1, int max_particles = 0);
+ int pGenParticleGroups(int p_group_count = 1, int max_particles = 0);
-PARTICLEDLL_API int pGetGroupCount();
+ int pGetGroupCount();
-PARTICLEDLL_API int pGetParticles(int index, int count, float *position = NULL, float *color = NULL,
- float *vel = NULL, float *size = NULL, float *age = NULL);
+ int pGetParticles(int index, int count, float* position = NULL, float* color = NULL,
+ float* vel = NULL, float* size = NULL, float* age = NULL);
-PARTICLEDLL_API int pSetMaxParticles(int max_count);
+ int pSetMaxParticles(int max_count);
-// Actions
+ // Actions
-PARTICLEDLL_API void pAvoid(float magnitude, float epsilon, float look_ahead,
- PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pAvoid(float magnitude, float epsilon, float look_ahead,
+ PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pBounce(float friction, float resilience, float cutoff,
- PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pBounce(float friction, float resilience, float cutoff,
+ PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pCopyVertexB(bool copy_pos = true, bool copy_vel = false);
+ void pCopyVertexB(bool copy_pos = true, bool copy_vel = false);
-PARTICLEDLL_API void pDamping(float damping_x, float damping_y, float damping_z,
- float vlow = 0.0f, float vhigh = P_MAXFLOAT);
+ void pDamping(float damping_x, float damping_y, float damping_z,
+ float vlow = 0.0f, float vhigh = P_MAXFLOAT);
-PARTICLEDLL_API void pExplosion(float center_x, float center_y, float center_z, float velocity,
- float magnitude, float stdev, float epsilon = P_EPS, float age = 0.0f);
+ void pExplosion(float center_x, float center_y, float center_z, float velocity,
+ float magnitude, float stdev, float epsilon = P_EPS, float age = 0.0f);
-PARTICLEDLL_API void pFollow(float magnitude = 1.0f, float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
+ void pFollow(float magnitude = 1.0f, float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pGravitate(float magnitude = 1.0f, float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
+ void pGravitate(float magnitude = 1.0f, float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pGravity(float dir_x, float dir_y, float dir_z);
+ void pGravity(float dir_x, float dir_y, float dir_z);
-PARTICLEDLL_API void pJet(float center_x, float center_y, float center_z, float magnitude = 1.0f,
- float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
+ void pJet(float center_x, float center_y, float center_z, float magnitude = 1.0f,
+ float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pKillOld(float age_limit, bool kill_less_than = false);
+ void pKillOld(float age_limit, bool kill_less_than = false);
-PARTICLEDLL_API void pMatchVelocity(float magnitude = 1.0f, float epsilon = P_EPS,
- float max_radius = P_MAXFLOAT);
+ void pMatchVelocity(float magnitude = 1.0f, float epsilon = P_EPS,
+ float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pMove();
+ void pMove();
-PARTICLEDLL_API void pOrbitLine(float p_x, float p_y, float p_z,
- float axis_x, float axis_y, float axis_z, float magnitude = 1.0f,
- float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
+ void pOrbitLine(float p_x, float p_y, float p_z,
+ float axis_x, float axis_y, float axis_z, float magnitude = 1.0f,
+ float epsilon = P_EPS, float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pOrbitPoint(float center_x, float center_y, float center_z,
- float magnitude = 1.0f, float epsilon = P_EPS,
- float max_radius = P_MAXFLOAT);
+ void pOrbitPoint(float center_x, float center_y, float center_z,
+ float magnitude = 1.0f, float epsilon = P_EPS,
+ float max_radius = P_MAXFLOAT);
-PARTICLEDLL_API void pRandomAccel(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pRandomAccel(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pRandomDisplace(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pRandomDisplace(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pRandomVelocity(PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pRandomVelocity(PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pRestore(float time);
+ void pRestore(float time);
-PARTICLEDLL_API void pShade(float color_x, float color_y, float color_z,
- float alpha, float scale);
+ void pShade(float color_x, float color_y, float color_z,
+ float alpha, float scale);
-PARTICLEDLL_API void pSink(bool kill_inside, PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pSink(bool kill_inside, PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pSinkVelocity(bool kill_inside, PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pSinkVelocity(bool kill_inside, PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pSource(float particle_rate, PDomainEnum dtype,
- float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
- float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
- float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
+ void pSource(float particle_rate, PDomainEnum dtype,
+ float a0 = 0.0f, float a1 = 0.0f, float a2 = 0.0f,
+ float a3 = 0.0f, float a4 = 0.0f, float a5 = 0.0f,
+ float a6 = 0.0f, float a7 = 0.0f, float a8 = 0.0f);
-PARTICLEDLL_API void pSpeedLimit(float min_speed, float max_speed = P_MAXFLOAT);
+ void pSpeedLimit(float min_speed, float max_speed = P_MAXFLOAT);
-PARTICLEDLL_API void pTargetColor(float color_x, float color_y, float color_z,
- float alpha, float scale);
+ void pTargetColor(float color_x, float color_y, float color_z,
+ float alpha, float scale);
-PARTICLEDLL_API void pTargetSize(float size_x, float size_y, float size_z,
- float scale_x = 0.0f, float scale_y = 0.0f, float scale_z = 0.0f);
+ void pTargetSize(float size_x, float size_y, float size_z,
+ float scale_x = 0.0f, float scale_y = 0.0f, float scale_z = 0.0f);
-PARTICLEDLL_API void pTargetVelocity(float vel_x, float vel_y, float vel_z, float scale);
+ void pTargetVelocity(float vel_x, float vel_y, float vel_z, float scale);
-PARTICLEDLL_API void pVertex(float x, float y, float z);
-
-PARTICLEDLL_API void pVortex(float center_x, float center_y, float center_z,
- float axis_x, float axis_y, float axis_z,
- float magnitude = 1.0f, float epsilon = P_EPS,
- float max_radius = P_MAXFLOAT);
+ void pVertex(float x, float y, float z);
+ void pVortex(float center_x, float center_y, float center_z,
+ float axis_x, float axis_y, float axis_z,
+ float magnitude = 1.0f, float epsilon = P_EPS,
+ float max_radius = P_MAXFLOAT);
+}
#endif
diff --git a/main/source/particles/particledefs.h b/main/source/particles/particledefs.h
index 5a411213..77238a1f 100644
--- a/main/source/particles/particledefs.h
+++ b/main/source/particles/particledefs.h
@@ -11,22 +11,6 @@
#ifdef WIN32
#include
-
-// removed <<< cgc >>>
-//#ifdef PARTICLEDLL_EXPORTS
-//#define PARTICLEDLL_API __declspec(dllexport)
-//#else
-//#define PARTICLEDLL_API __declspec(dllimport)
-//#endif
-#define PARTICLEDLL_API extern "C"
-
-// removed <<< cgc >>>
-#else
-#define PARTICLEDLL_API
-#endif
-
-
-#ifdef _WIN32
#pragma warning (disable:4244)
#endif
@@ -43,21 +27,22 @@
//////////////////////////////////////////////////////////////////////
// Type codes for domains
-PARTICLEDLL_API enum PDomainEnum
-{
- PDPoint = 0, // Single point
- PDLine = 1, // Line segment
- PDTriangle = 2, // Triangle
- PDPlane = 3, // Arbitrarily-oriented plane
- PDBox = 4, // Axis-aligned box
- PDSphere = 5, // Sphere
- PDCylinder = 6, // Cylinder
- PDCone = 7, // Cone
- PDBlob = 8, // Gaussian blob
- PDDisc = 9, // Arbitrarily-oriented disc
- PDRectangle = 10 // Rhombus-shaped planar region
-};
-
+extern "C" {
+ enum PDomainEnum
+ {
+ PDPoint = 0, // Single point
+ PDLine = 1, // Line segment
+ PDTriangle = 2, // Triangle
+ PDPlane = 3, // Arbitrarily-oriented plane
+ PDBox = 4, // Axis-aligned box
+ PDSphere = 5, // Sphere
+ PDCylinder = 6, // Cylinder
+ PDCone = 7, // Cone
+ PDBlob = 8, // Gaussian blob
+ PDDisc = 9, // Arbitrarily-oriented disc
+ PDRectangle = 10 // Rhombus-shaped planar region
+ };
+}
// A single particle
struct Particle
{
diff --git a/main/source/particles/particles.vcxproj b/main/source/particles/particles.vcxproj
index 48ec55ac..ec7c4963 100644
--- a/main/source/particles/particles.vcxproj
+++ b/main/source/particles/particles.vcxproj
@@ -12,25 +12,22 @@
{5AADD469-7488-4B34-A9FD-01CFAC5972FD}
- v4.5.2
ManagedCProj
particles
- 10.0.16299.0
+ 10.0
+ v4.5.2
StaticLibrary
- true
true
- Unicode
- v141
+ v142
+ true
StaticLibrary
- false
true
- Unicode
- v141
+ v142
@@ -44,18 +41,16 @@
true
- $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;..;
+ $(VC_IncludePath);$(WindowsSDK_IncludePath);../common;../public
false
- $(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;.;$(VCToolsInstallDir)\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\shared;..;../common;../public
+ $(VC_IncludePath);$(WindowsSDK_IncludePath);../common;../public
Level3
- Disabled
WIN32;_DEBUG;%(PreprocessorDefinitions)
- NotUsing
true
@@ -67,10 +62,7 @@
Level3
WIN32;NDEBUG;%(PreprocessorDefinitions)
- NotUsing
- $(VCInstallDir)
$(FrameworkPathOverride)
- MultiThreadedDLL
true
@@ -84,6 +76,7 @@
+
true
diff --git a/main/source/particles/particles.vcxproj.filters b/main/source/particles/particles.vcxproj.filters
index c536028b..ed7fe70f 100644
--- a/main/source/particles/particles.vcxproj.filters
+++ b/main/source/particles/particles.vcxproj.filters
@@ -18,6 +18,7 @@
+
diff --git a/main/source/particles/system.cpp b/main/source/particles/system.cpp
index e9d47539..0afc3261 100644
--- a/main/source/particles/system.cpp
+++ b/main/source/particles/system.cpp
@@ -417,492 +417,495 @@ void _pAddActionToList(ParticleAction *S, int size)
////////////////////////////////////////////////////////
// State setting calls
-PARTICLEDLL_API void pColor(float red, float green, float blue, float alpha)
-{
- _ParticleState &_ps = _GetPState();
+extern "C" {
- _ps.Alpha = alpha;
- _ps.Color = pDomain(PDPoint, red, green, blue);
-}
-
-PARTICLEDLL_API void pColorD(float alpha, PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Alpha = alpha;
- _ps.Color = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-PARTICLEDLL_API void pVelocity(float x, float y, float z)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Vel = pDomain(PDPoint, x, y, z);
-}
-
-PARTICLEDLL_API void pVelocityD(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Vel = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-PARTICLEDLL_API void pVertexB(float x, float y, float z)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.VertexB = pDomain(PDPoint, x, y, z);
-}
-
-PARTICLEDLL_API void pVertexBD(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.VertexB = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-
-PARTICLEDLL_API void pVertexBTracks(bool trackVertex)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.vertexB_tracks = trackVertex;
-}
-
-PARTICLEDLL_API void pSize(float size_x, float size_y, float size_z)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Size = pDomain(PDPoint, size_x, size_y, size_z);
-}
-
-PARTICLEDLL_API void pSizeD(PDomainEnum dtype,
- float a0, float a1, float a2,
- float a3, float a4, float a5,
- float a6, float a7, float a8)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Size = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
-}
-
-PARTICLEDLL_API void pStartingAge(float age, float sigma)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.Age = age;
- _ps.AgeSigma = sigma;
-}
-
-PARTICLEDLL_API void pTimeStep(float newDT)
-{
- _ParticleState &_ps = _GetPState();
-
- _ps.dt = newDT;
-}
-
-////////////////////////////////////////////////////////
-// Action List Calls
-
-PARTICLEDLL_API int pGenActionLists(int action_list_count)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return -1; // ERROR
-
- _PLock();
-
- int ind = _ps.GenerateLists(action_list_count);
-
- for(int i=ind; iactions_allocated = 8;
- _ps.alist_list[i]->type = PAHeaderID;
- _ps.alist_list[i]->count = 1;
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Alpha = alpha;
+ _ps.Color = pDomain(PDPoint, red, green, blue);
}
- _PUnLock();
-
- return ind;
-}
-
-PARTICLEDLL_API void pNewActionList(int action_list_num)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return; // ERROR
-
- _ps.pact = _ps.GetListPtr(action_list_num);
-
- if(_ps.pact == NULL)
- return; // ERROR
-
- _ps.list_id = action_list_num;
- _ps.in_new_list = true;
-
- // Remove whatever used to be in the list.
- _ps.pact->count = 1;
-}
-
-PARTICLEDLL_API void pEndActionList()
-{
- _ParticleState &_ps = _GetPState();
-
- if(!_ps.in_new_list)
- return; // ERROR
-
- _ps.in_new_list = false;
-
- _ps.pact = NULL;
- _ps.list_id = -1;
-}
-
-PARTICLEDLL_API void pDeleteActionLists(int action_list_num, int action_list_count)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return; // ERROR
-
- if(action_list_num < 0)
- return; // ERROR
-
- if(action_list_num + action_list_count > _ps.alist_count)
- return; // ERROR
-
- _PLock();
-
- for(int i = action_list_num; i < action_list_num + action_list_count; i++)
+ void pColorD(float alpha, PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
{
- if(_ps.alist_list[i])
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Alpha = alpha;
+ _ps.Color = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ void pVelocity(float x, float y, float z)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Vel = pDomain(PDPoint, x, y, z);
+ }
+
+ void pVelocityD(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Vel = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ void pVertexB(float x, float y, float z)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.VertexB = pDomain(PDPoint, x, y, z);
+ }
+
+ void pVertexBD(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.VertexB = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+
+ void pVertexBTracks(bool trackVertex)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.vertexB_tracks = trackVertex;
+ }
+
+ void pSize(float size_x, float size_y, float size_z)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Size = pDomain(PDPoint, size_x, size_y, size_z);
+ }
+
+ void pSizeD(PDomainEnum dtype,
+ float a0, float a1, float a2,
+ float a3, float a4, float a5,
+ float a6, float a7, float a8)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Size = pDomain(dtype, a0, a1, a2, a3, a4, a5, a6, a7, a8);
+ }
+
+ void pStartingAge(float age, float sigma)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.Age = age;
+ _ps.AgeSigma = sigma;
+ }
+
+ void pTimeStep(float newDT)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ _ps.dt = newDT;
+ }
+
+ ////////////////////////////////////////////////////////
+ // Action List Calls
+
+ int pGenActionLists(int action_list_count)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return -1; // ERROR
+
+ _PLock();
+
+ int ind = _ps.GenerateLists(action_list_count);
+
+ for (int i = ind; i < ind + action_list_count; i++)
{
- delete [] _ps.alist_list[i];
- _ps.alist_list[i] = NULL;
+ _ps.alist_list[i] = new PAHeader[8];
+ _ps.alist_list[i]->actions_allocated = 8;
+ _ps.alist_list[i]->type = PAHeaderID;
+ _ps.alist_list[i]->count = 1;
+ }
+
+ _PUnLock();
+
+ return ind;
+ }
+
+ void pNewActionList(int action_list_num)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return; // ERROR
+
+ _ps.pact = _ps.GetListPtr(action_list_num);
+
+ if (_ps.pact == NULL)
+ return; // ERROR
+
+ _ps.list_id = action_list_num;
+ _ps.in_new_list = true;
+
+ // Remove whatever used to be in the list.
+ _ps.pact->count = 1;
+ }
+
+ void pEndActionList()
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (!_ps.in_new_list)
+ return; // ERROR
+
+ _ps.in_new_list = false;
+
+ _ps.pact = NULL;
+ _ps.list_id = -1;
+ }
+
+ void pDeleteActionLists(int action_list_num, int action_list_count)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return; // ERROR
+
+ if (action_list_num < 0)
+ return; // ERROR
+
+ if (action_list_num + action_list_count > _ps.alist_count)
+ return; // ERROR
+
+ _PLock();
+
+ for (int i = action_list_num; i < action_list_num + action_list_count; i++)
+ {
+ if (_ps.alist_list[i])
+ {
+ delete[] _ps.alist_list[i];
+ _ps.alist_list[i] = NULL;
+ }
+ else
+ {
+ _PUnLock();
+ return; // ERROR
+ }
+ }
+
+ _PUnLock();
+ }
+
+ void pCallActionList(int action_list_num)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ {
+ // Add this call as an action to the current list.
+ // <<< cgc >>> commented out predeclaration
+ //void _pSendAction(ParticleAction *S, PActionEnum type, int size);
+
+ PACallActionList S;
+ S.action_list_num = action_list_num;
+
+ _pSendAction(&S, PACallActionListID, sizeof(PACallActionList));
}
else
{
+ // Execute the specified action list.
+ PAHeader* pa = _ps.GetListPtr(action_list_num);
+
+ if (pa == NULL)
+ return; // ERRROR
+
+ // XXX A temporary hack.
+ pa->dt = _ps.dt;
+
+ _ps.in_call_list = true;
+
+ _pCallActionList(pa + 1, pa->count - 1, _ps.pgrp);
+
+ _ps.in_call_list = false;
+ }
+ }
+
+ ////////////////////////////////////////////////////////
+ // Particle Group Calls
+
+ // Create particle groups, each with max_particles allocated.
+ int pGenParticleGroups(int p_group_count, int max_particles)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return -1; // ERROR
+
+ _PLock();
+ // cerr << "Generating pg " << _ps.tid << " cnt= " << max_particles << endl;
+
+ int ind = _ps.GenerateGroups(p_group_count);
+
+ for (int i = ind; i < ind + p_group_count; i++)
+ {
+ _ps.group_list[i] = (ParticleGroup*)new
+ Particle[max_particles + 2];
+ _ps.group_list[i]->max_particles = max_particles;
+ _ps.group_list[i]->particles_allocated = max_particles;
+ _ps.group_list[i]->p_count = 0;
+ }
+
+ _PUnLock();
+
+ return ind;
+ }
+
+ void pDeleteParticleGroups(int p_group_num, int p_group_count)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (p_group_num < 0)
+ return; // ERROR
+
+ if (p_group_num + p_group_count > _ps.group_count)
+ return; // ERROR
+
+ _PLock();
+
+ for (int i = p_group_num; i < p_group_num + p_group_count; i++)
+ {
+ if (_ps.group_list[i])
+ {
+ delete[] _ps.group_list[i];
+ _ps.group_list[i] = NULL;
+ }
+ else
+ {
+ _PUnLock();
+ return; // ERROR
+ }
+ }
+
+ _PUnLock();
+ }
+
+ // Change which group is current.
+ void pCurrentGroup(int p_group_num)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return; // ERROR
+
+ _ps.pgrp = _ps.GetGroupPtr(p_group_num);
+ if (_ps.pgrp)
+ _ps.group_id = p_group_num;
+ else
+ _ps.group_id = -1;
+ }
+
+ ParticleGroup* pGetCurrentGroup(void)
+ {
+ _ParticleState& _ps = _GetPState();
+ ParticleGroup* pg = _ps.pgrp;
+ return pg;
+ }
+
+ // Change the maximum number of particles in the current group.
+ int pSetMaxParticles(int max_count)
+ {
+ _ParticleState& _ps = _GetPState();
+
+ if (_ps.in_new_list)
+ return 0; // ERROR
+
+ ParticleGroup* pg = _ps.pgrp;
+ if (pg == NULL)
+ return 0; // ERROR
+
+ if (max_count < 0)
+ return 0; // ERROR
+
+ // Reducing max.
+ if (pg->particles_allocated >= max_count)
+ {
+ pg->max_particles = max_count;
+
+ // May have to kill particles.
+ if (pg->p_count > pg->max_particles)
+ pg->p_count = pg->max_particles;
+
+ return max_count;
+ }
+
+ _PLock();
+
+ // Allocate particles.
+ ParticleGroup* pg2 = (ParticleGroup*)new Particle[max_count + 2];
+ if (pg2 == NULL)
+ {
+ // Not enough memory. Just give all we've got.
+ // ERROR
+ pg->max_particles = pg->particles_allocated;
+
_PUnLock();
- return; // ERROR
+
+ return pg->max_particles;
}
- }
- _PUnLock();
-}
+ memcpy(pg2, pg, (pg->p_count + 2) * sizeof(Particle));
-PARTICLEDLL_API void pCallActionList(int action_list_num)
-{
- _ParticleState &_ps = _GetPState();
+ delete[] pg;
- if(_ps.in_new_list)
- {
- // Add this call as an action to the current list.
- // <<< cgc >>> commented out predeclaration
- //void _pSendAction(ParticleAction *S, PActionEnum type, int size);
+ _ps.group_list[_ps.group_id] = _ps.pgrp = pg2;
+ pg2->max_particles = max_count;
+ pg2->particles_allocated = max_count;
- PACallActionList S;
- S.action_list_num = action_list_num;
-
- _pSendAction(&S, PACallActionListID, sizeof(PACallActionList));
- }
- else
- {
- // Execute the specified action list.
- PAHeader *pa = _ps.GetListPtr(action_list_num);
-
- if(pa == NULL)
- return; // ERRROR
-
- // XXX A temporary hack.
- pa->dt = _ps.dt;
-
- _ps.in_call_list = true;
-
- _pCallActionList(pa+1, pa->count-1, _ps.pgrp);
-
- _ps.in_call_list = false;
- }
-}
-
-////////////////////////////////////////////////////////
-// Particle Group Calls
-
-// Create particle groups, each with max_particles allocated.
-PARTICLEDLL_API int pGenParticleGroups(int p_group_count, int max_particles)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return -1; // ERROR
-
- _PLock();
- // cerr << "Generating pg " << _ps.tid << " cnt= " << max_particles << endl;
-
- int ind = _ps.GenerateGroups(p_group_count);
-
- for(int i=ind; imax_particles = max_particles;
- _ps.group_list[i]->particles_allocated = max_particles;
- _ps.group_list[i]->p_count = 0;
- }
-
- _PUnLock();
-
- return ind;
-}
-
-PARTICLEDLL_API void pDeleteParticleGroups(int p_group_num, int p_group_count)
-{
- _ParticleState &_ps = _GetPState();
-
- if(p_group_num < 0)
- return; // ERROR
-
- if(p_group_num + p_group_count > _ps.group_count)
- return; // ERROR
-
- _PLock();
-
- for(int i = p_group_num; i < p_group_num + p_group_count; i++)
- {
- if(_ps.group_list[i])
- {
- delete [] _ps.group_list[i];
- _ps.group_list[i] = NULL;
- }
- else
- {
- _PUnLock();
- return; // ERROR
- }
- }
-
- _PUnLock();
-}
-
-// Change which group is current.
-PARTICLEDLL_API void pCurrentGroup(int p_group_num)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return; // ERROR
-
- _ps.pgrp = _ps.GetGroupPtr(p_group_num);
- if(_ps.pgrp)
- _ps.group_id = p_group_num;
- else
- _ps.group_id = -1;
-}
-
-PARTICLEDLL_API ParticleGroup* pGetCurrentGroup(void)
-{
- _ParticleState &_ps = _GetPState();
- ParticleGroup *pg = _ps.pgrp;
- return pg;
-}
-
-// Change the maximum number of particles in the current group.
-PARTICLEDLL_API int pSetMaxParticles(int max_count)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return 0; // ERROR
-
- ParticleGroup *pg = _ps.pgrp;
- if(pg == NULL)
- return 0; // ERROR
-
- if(max_count < 0)
- return 0; // ERROR
-
- // Reducing max.
- if(pg->particles_allocated >= max_count)
- {
- pg->max_particles = max_count;
-
- // May have to kill particles.
- if(pg->p_count > pg->max_particles)
- pg->p_count = pg->max_particles;
+ _PUnLock();
return max_count;
}
- _PLock();
-
- // Allocate particles.
- ParticleGroup *pg2 =(ParticleGroup *)new Particle[max_count + 2];
- if(pg2 == NULL)
+ // Copy from the specified group to the current group.
+ void pCopyGroup(int p_src_group_num, int index, int copy_count)
{
- // Not enough memory. Just give all we've got.
- // ERROR
- pg->max_particles = pg->particles_allocated;
+ _ParticleState& _ps = _GetPState();
- _PUnLock();
-
- return pg->max_particles;
+ if (_ps.in_new_list)
+ return; // ERROR
+
+ ParticleGroup* srcgrp = _ps.GetGroupPtr(p_src_group_num);
+ if (srcgrp == NULL)
+ return; // ERROR
+
+ ParticleGroup* destgrp = _ps.pgrp;
+ if (destgrp == NULL)
+ return; // ERROR
+
+ // Find out exactly how many to copy.
+ int ccount = copy_count;
+ if (ccount > srcgrp->p_count - index)
+ ccount = srcgrp->p_count - index;
+ if (ccount > destgrp->max_particles - destgrp->p_count)
+ ccount = destgrp->max_particles - destgrp->p_count;
+
+ // #pragma critical
+ // cerr << p_src_group_num << ": " << ccount << " " << srcgrp->p_count << " " << index << endl;
+
+ if (ccount < 0)
+ ccount = 0;
+
+ // Directly copy the particles to the current list.
+ for (int i = 0; i < ccount; i++)
+ {
+ destgrp->list[destgrp->p_count + i] =
+ srcgrp->list[index + i];
+ }
+ destgrp->p_count += ccount;
}
-
- memcpy(pg2, pg, (pg->p_count + 2) * sizeof(Particle));
-
- delete [] pg;
-
- _ps.group_list[_ps.group_id] = _ps.pgrp = pg2;
- pg2->max_particles = max_count;
- pg2->particles_allocated = max_count;
- _PUnLock();
-
- return max_count;
-}
-
-// Copy from the specified group to the current group.
-PARTICLEDLL_API void pCopyGroup(int p_src_group_num, int index, int copy_count)
-{
- _ParticleState &_ps = _GetPState();
-
- if(_ps.in_new_list)
- return; // ERROR
-
- ParticleGroup *srcgrp = _ps.GetGroupPtr(p_src_group_num);
- if(srcgrp == NULL)
- return; // ERROR
-
- ParticleGroup *destgrp = _ps.pgrp;
- if(destgrp == NULL)
- return; // ERROR
-
- // Find out exactly how many to copy.
- int ccount = copy_count;
- if(ccount > srcgrp->p_count - index)
- ccount = srcgrp->p_count - index;
- if(ccount > destgrp->max_particles - destgrp->p_count)
- ccount = destgrp->max_particles - destgrp->p_count;
-
- // #pragma critical
- // cerr << p_src_group_num << ": " << ccount << " " << srcgrp->p_count << " " << index << endl;
-
- if(ccount<0)
- ccount = 0;
-
- // Directly copy the particles to the current list.
- for(int i=0; ilist[destgrp->p_count+i] =
- srcgrp->list[index+i];
+ ParticleGroup* theGroup = NULL;
+
+ _ParticleState& _ps = _GetPState();
+
+ if (!_ps.in_new_list)
+ {
+ theGroup = _ps.GetGroupPtr(p_group_num);
+ }
+ return theGroup;
}
- destgrp->p_count += ccount;
-}
-PARTICLEDLL_API ParticleGroup* pGetParticleGroupRef(int p_group_num)
-{
- ParticleGroup* theGroup = NULL;
-
- _ParticleState &_ps = _GetPState();
-
- if(!_ps.in_new_list)
- {
- theGroup = _ps.GetGroupPtr(p_group_num);
- }
- return theGroup;
-}
-
-// Copy from the current group to application memory.
-PARTICLEDLL_API int pGetParticles(int index, int count, float *verts,
- float *color, float *vel, float *size, float *age)
-{
- _ParticleState &_ps = _GetPState();
-
- // XXX I should think about whether color means color3, color4, or what.
- // For now, it means color4.
-
- if(_ps.in_new_list)
- return -1; // ERROR
-
- ParticleGroup *pg = _ps.pgrp;
- if(pg == NULL)
- return -2; // ERROR
-
- if(index < 0 || count < 0)
- return -3; // ERROR
-
- if(index + count > pg->p_count)
- {
- count = pg->p_count - index;
- if(count <= 0)
- return -4; // ERROR index out of bounds.
- }
-
- int vi = 0, ci = 0, li = 0, si = 0, ai = 0;
-
- // This could be optimized.
- for(int i=0; ilist[index + i];
+ _ParticleState& _ps = _GetPState();
- if(verts)
+ // XXX I should think about whether color means color3, color4, or what.
+ // For now, it means color4.
+
+ if (_ps.in_new_list)
+ return -1; // ERROR
+
+ ParticleGroup* pg = _ps.pgrp;
+ if (pg == NULL)
+ return -2; // ERROR
+
+ if (index < 0 || count < 0)
+ return -3; // ERROR
+
+ if (index + count > pg->p_count)
{
- verts[vi++] = m.pos.x;
- verts[vi++] = m.pos.y;
- verts[vi++] = m.pos.z;
+ count = pg->p_count - index;
+ if (count <= 0)
+ return -4; // ERROR index out of bounds.
}
- if(color)
+ int vi = 0, ci = 0, li = 0, si = 0, ai = 0;
+
+ // This could be optimized.
+ for (int i = 0; i < count; i++)
{
- color[ci++] = m.color.x;
- color[ci++] = m.color.y;
- color[ci++] = m.color.z;
- color[ci++] = m.alpha;
+ Particle& m = pg->list[index + i];
+
+ if (verts)
+ {
+ verts[vi++] = m.pos.x;
+ verts[vi++] = m.pos.y;
+ verts[vi++] = m.pos.z;
+ }
+
+ if (color)
+ {
+ color[ci++] = m.color.x;
+ color[ci++] = m.color.y;
+ color[ci++] = m.color.z;
+ color[ci++] = m.alpha;
+ }
+
+ if (vel)
+ {
+ vel[li++] = m.vel.x;
+ vel[li++] = m.vel.y;
+ vel[li++] = m.vel.z;
+ }
+
+ if (size)
+ {
+ size[si++] = m.size.x;
+ size[si++] = m.size.y;
+ size[si++] = m.size.z;
+ }
+
+ if (age)
+ {
+ age[ai++] = m.age;
+ }
}
- if(vel)
- {
- vel[li++] = m.vel.x;
- vel[li++] = m.vel.y;
- vel[li++] = m.vel.z;
- }
-
- if(size)
- {
- size[si++] = m.size.x;
- size[si++] = m.size.y;
- size[si++] = m.size.z;
- }
-
- if(age)
- {
- age[ai++] = m.age;
- }
+ return count;
}
- return count;
-}
+ // Returns the number of particles currently in the group.
+ int pGetGroupCount()
+ {
+ _ParticleState& _ps = _GetPState();
-// Returns the number of particles currently in the group.
-PARTICLEDLL_API int pGetGroupCount()
-{
- _ParticleState &_ps = _GetPState();
+ if (_ps.in_new_list)
+ return 0; // ERROR
- if(_ps.in_new_list)
- return 0; // ERROR
-
- if(_ps.pgrp == NULL)
- return 0; // ERROR
+ if (_ps.pgrp == NULL)
+ return 0; // ERROR
- return _ps.pgrp->p_count;
-}
+ return _ps.pgrp->p_count;
+ }
+}
\ No newline at end of file