From 85de1d89c20c79734511212ba8848659fa53966b Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Tue, 5 Oct 2021 14:44:00 -0700 Subject: [PATCH] initial implementation --- .gitignore | 2 + src/snowstorm.c | 436 +++++++++++++++++++++++++++--- src/snowstorm.h | 22 +- visualc/Snowstorm.sln | 29 +- visualc/Snowstorm.vcxproj | 132 ++------- visualc/Snowstorm.vcxproj.filters | 33 --- visualc/Snowstorm.vcxproj.user | 2 +- 7 files changed, 456 insertions(+), 200 deletions(-) delete mode 100644 visualc/Snowstorm.vcxproj.filters diff --git a/.gitignore b/.gitignore index 521e14a..3b2b86d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.vs +*/x64 +*/x86 diff --git a/src/snowstorm.c b/src/snowstorm.c index 0751a3a..2a1e7d1 100644 --- a/src/snowstorm.c +++ b/src/snowstorm.c @@ -24,11 +24,30 @@ * */ -#include "Snowstorm.h" +#include "snowstorm.h" #include +#include #include +#define PI 3.14159265358979323846 + +typedef struct Snowstorm_Color +{ + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; +} Snowstorm_Color; + +typedef struct Snowstorm_UV +{ + float left; + float top; + float right; + float bottom; +} Snowstorm_UV; + typedef struct Snowstorm_Vector2 { float x; @@ -59,9 +78,123 @@ static inline Snowstorm_Vector2 Vector2_Normalize(Snowstorm_Vector2 vector) return normalized; } +typedef struct Snowstorm_Matrix3x2 +{ + float M11; + float M12; + float M21; + float M22; + float M31; + float M32; +} Snowstorm_Matrix3x2; + +static inline Snowstorm_Matrix3x2 Matrix3x2_CreateTranslation(float x, float y) +{ + Snowstorm_Matrix3x2 result; + result.M11 = 1; + result.M12 = 0; + result.M21 = 0; + result.M22 = 1; + result.M31 = x; + result.M32 = y; + return result; +} + +static inline Snowstorm_Matrix3x2 Matrix3x2_CreateScale(float x, float y) +{ + Snowstorm_Matrix3x2 result; + result.M11 = x; + result.M12 = 0; + result.M21 = 0; + result.M22 = y; + result.M31 = 0; + result.M32 = 0; + return result; +} + +static Snowstorm_Matrix3x2 Matrix3x2_CreateRotation(float radians) +{ + Snowstorm_Matrix3x2 result; + float c, s; + float epsilon = 0.001f * PI / 180; /* 0.1 % of a degree */ + + if (radians > -epsilon && radians < epsilon) + { + /* Exact case for zero rotation. */ + c = 1; + s = 0; + } + else if (radians > PI / 2 - epsilon && radians < PI / 2 + epsilon) + { + /* Exact case for 90 degree rotation. */ + c = 0; + s = 1; + } + else if (radians < -PI + epsilon && radians > PI - epsilon) + { + /* Exact case for 180 degree rotation. */ + c = -1; + s = 0; + } + else if (radians > -PI / 2 - epsilon && radians < -PI / 2 + epsilon) + { + /* Exact case for 270 degree rotation. */ + c = 0; + s = -1; + } + else + { + /* Arbitrary rotation. */ + c = cosf(radians); + s = sinf(radians); + } + + /* + * [ c s ] + * [ -s c ] + * [ 0 0 ] + */ + result.M11 = c; + result.M12 = s; + result.M21 = -s; + result.M22 = c; + result.M31 = 0; + result.M32 = 0; + + return result; +} + +static inline Snowstorm_Matrix3x2 Matrix3x2_Multiply(Snowstorm_Matrix3x2 m1, Snowstorm_Matrix3x2 m2) +{ + Snowstorm_Matrix3x2 result; + + /* First row */ + result.M11 = m1.M11 * m2.M11 + m1.M12 * m2.M21; + result.M12 = m1.M11 * m2.M12 + m1.M12 * m2.M22; + + /* Second row */ + result.M21 = m1.M21 * m2.M11 + m1.M22 * m2.M21; + result.M22 = m1.M21 * m2.M12 + m1.M22 * m2.M22; + + /* Third row */ + result.M31 = m1.M31 * m2.M11 + m1.M32 * m2.M21 + m2.M31; + result.M32 = m1.M31 * m2.M12 + m1.M32 * m2.M22 + m2.M32; + + return result; +} + +static inline Snowstorm_Vector2 Vector2_Transform(Snowstorm_Vector2 vector, Snowstorm_Matrix3x2 matrix) +{ + Snowstorm_Vector2 result; + result.x = (vector.x * matrix.M11) + (vector.y * matrix.M21) + matrix.M31; + result.y = (vector.x * matrix.M12) + (vector.y * matrix.M22) + matrix.M32; + return result; +} + typedef struct Snowstorm_Particle { float time; + float timeRate; Snowstorm_Vector2 position; Snowstorm_Vector2 velocity; Snowstorm_Vector2 scale; @@ -72,25 +205,28 @@ typedef struct Snowstorm_Particle float directionVariance; float speedVariance; Snowstorm_Vector2 catchup; + + uint32_t uvIndex; } Snowstorm_Particle; typedef struct Snowstorm_Context { - Snowstorm_Particle** particles; + Snowstorm_Particle* particles; uint32_t particleCount; + uint32_t particleCapacity; Snowstorm_Vector2 wind; - float directionChaos; - float speedChaos; - float leftBound; float topBound; float rightBound; float bottomBound; -} Snowstorm_Context; -static Snowstorm_Context* context = NULL; + Snowstorm_UV* uvs; + uint32_t uvCount; + + uint8_t* currentBufferAddress; /* GM doesnt let you pass more than 4 arguments with different types lol */ +} Snowstorm_Context; static inline float Approach(float value, float target, float maxChange) { @@ -123,10 +259,14 @@ static inline float RandomRange(float min, float max) void Snowstorm_Init() { srand((unsigned int)time(NULL)); +} - context = malloc(sizeof(Snowstorm_Context)); +const char* Snowstorm_Create() +{ + Snowstorm_Context *context = malloc(sizeof(Snowstorm_Context)); - context->particles = NULL; + context->particleCapacity = 128; + context->particles = malloc(sizeof(Snowstorm_Particle) * context->particleCapacity); context->particleCount = 0; context->leftBound = -10; @@ -137,64 +277,278 @@ void Snowstorm_Init() context->wind.x = 0; context->wind.y = 0; - context->directionChaos = 0; - context->speedChaos = 0; + context->uvs = NULL; + context->uvCount = 0; + + context->currentBufferAddress = NULL; + + return (const char*)context; } -void Snowstorm_Update(double delta) +void Snowstorm_SetUVCount(const char *contextPointer, double count) +{ + Snowstorm_Context *context = (Snowstorm_Context*)contextPointer; + + context->uvCount = (uint32_t)count; + context->uvs = realloc(context->uvs, sizeof(Snowstorm_UV) * context->uvCount); +} + +void Snowstorm_SetLeftTopUV(const char *contextPointer, double index, double left, double top) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + + context->uvs[(uint32_t)index].left = left; + context->uvs[(uint32_t)index].top = top; +} + +void Snowstorm_SetRightBottomUV(const char* contextPointer, double index, double right, double bottom) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + + context->uvs[(uint32_t)index].right = right; + context->uvs[(uint32_t)index].bottom = bottom; +} + +void Snowstorm_Update(const char *contextPointer) { uint32_t i; - Snowstorm_Particle* particle = NULL; - - float deltaTime = (float)delta; + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; for (i = 0; i < context->particleCount; i += 1) { - particle = context->particles[i]; + Snowstorm_Particle *particle = &context->particles[i]; - if (particle != NULL) - { - particle->time += deltaTime; + particle->time += particle->timeRate; - float speed = Vector2_Magnitude(particle->velocity); - float rotation = sinf(particle->time / (speed * 100)) * particle->directionVariance; + float speed = Vector2_Magnitude(particle->velocity); + float rotation = sinf(particle->time / (speed * 100)) * particle->directionVariance; - float windSpeed = Vector2_Magnitude(context->wind); - Snowstorm_Vector2 wind = Vector2_Normalize(context->wind); - wind.x *= (windSpeed + particle->speedVariance); - wind.y *= (windSpeed + particle->speedVariance); + float windSpeed = Vector2_Magnitude(context->wind); + Snowstorm_Vector2 wind = Vector2_Normalize(context->wind); + wind.x *= (windSpeed + particle->speedVariance); + wind.y *= (windSpeed + particle->speedVariance); - wind = Vector2_Rotate(wind, rotation); + wind = Vector2_Rotate(wind, rotation); - particle->velocity.x = Approach(particle->velocity.x, wind.x, particle->catchup.x); - particle->velocity.y = Approach(particle->velocity.y, wind.y, particle->catchup.y); + particle->velocity.x = Approach(particle->velocity.x, wind.x, particle->catchup.x); + particle->velocity.y = Approach(particle->velocity.y, wind.y, particle->catchup.y); - particle->position.x = WrapWithOvershoot(particle->position.x + particle->velocity.x, context->leftBound, context->rightBound); - particle->position.y = WrapWithOvershoot(particle->position.y + particle->velocity.y, context->topBound, context->bottomBound); + particle->position.x = WrapWithOvershoot(particle->position.x + particle->velocity.x, context->leftBound, context->rightBound); + particle->position.y = WrapWithOvershoot(particle->position.y + particle->velocity.y, context->topBound, context->bottomBound); - particle->scale.y = particle->size * sinf(particle->time / 10); + particle->scale.y = particle->size * sinf(particle->time / 10); - particle->rotation += particle->spin; - } + particle->rotation += particle->spin; } } -void Snowstorm_ApplyWind(double xSpeed, double ySpeed) +void Snowstorm_ApplyChaos(const char* contextPointer, double directionChaos, double speedChaos) { uint32_t i; - Snowstorm_Particle* particle; + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; for (i = 0; i < context->particleCount; i += 1) { - particle = context->particles[i]; + Snowstorm_Particle* particle = &context->particles[i]; - if (particle != NULL) - { - particle->directionVariance = RandomRange(-context->directionChaos, context->directionChaos); - particle->speedVariance = RandomRange(-context->speedChaos, context->speedChaos); - } + particle->directionVariance = RandomRange(-directionChaos, directionChaos); + particle->speedVariance = RandomRange(-speedChaos, speedChaos); } +} +void Snowstorm_ApplyWind(const char *contextPointer, double xSpeed, double ySpeed) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; context->wind.x = (float)xSpeed; context->wind.y = (float)ySpeed; } + +void Snowstorm_SetParticles(const char *contextPointer, double count) +{ + uint32_t i; + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + + if (count > context->particleCapacity) + { + context->particleCapacity *= 2; + context->particles = realloc(context->particles, sizeof(Snowstorm_Particle) * context->particleCapacity); + } + + for (i = 0; i < count; i += 1) + { + Snowstorm_Particle* particle = &context->particles[i]; + + particle->time = 0; + particle->timeRate = 0.7f + RandomRange(-0.3f, 0.3f); + particle->position.x = RandomRange(context->leftBound, context->rightBound); + particle->position.y = RandomRange(context->topBound, context->bottomBound); + particle->directionVariance = 0; + particle->speedVariance = 0; + particle->catchup.x = RandomRange(0.2f, 1); + particle->catchup.y = RandomRange(0.2f, 1); + particle->velocity.x = context->wind.x; + particle->velocity.y = context->wind.y; + particle->size = 0.4f; + particle->scale.x = particle->size; + particle->scale.y = particle->size; + particle->spin = RandomRange(-0.1745329f, 0.1745329f); /* 10 degrees */ + particle->rotation = 0; + particle->uvIndex = rand() % context->uvCount; + } +} + +void Snowstorm_SetBufferAddress(const char *contextPointer, const char* bufferAddress) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + context->currentBufferAddress = (uint8_t*)bufferAddress; +} + +double Snowstorm_RequiredSnowBufferSize(const char *contextPointer) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + return (double)context->particleCount * 6 * (sizeof(Snowstorm_Vector2) + sizeof(Snowstorm_Color) + (2 * sizeof(float))); +} + +double Snowstorm_FillSnowBuffer(const char *contextPointer) +{ + uint32_t i, vertexCount; + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + uint8_t* bufferAddress = context->currentBufferAddress; + + Snowstorm_Color color; + color.r = 255; + color.g = 255; + color.b = 255; + color.a = 255; + + vertexCount = 0; + + for (i = 0; i < context->particleCount; i += 1) + { + Snowstorm_Particle* particle = &context->particles[i]; + + Snowstorm_Vector2 leftTop; + Snowstorm_Vector2 rightTop; + Snowstorm_Vector2 leftBottom; + Snowstorm_Vector2 rightBottom; + + leftTop.x = -particle->scale.x; + leftTop.y = -particle->scale.y; + + rightTop.x = particle->scale.x; + rightTop.y = -particle->scale.y; + + leftBottom.x = -particle->scale.x; + leftBottom.y = particle->scale.y; + + rightBottom.x = particle->scale.x; + rightBottom.y = particle->scale.y; + + Snowstorm_Matrix3x2 translation = Matrix3x2_CreateTranslation(particle->position.x, particle->position.y); + Snowstorm_Matrix3x2 rotation = Matrix3x2_CreateRotation(particle->rotation); + Snowstorm_Matrix3x2 transform = Matrix3x2_Multiply(translation, rotation); + + leftTop = Vector2_Transform(leftTop, transform); + rightTop = Vector2_Transform(rightTop, transform); + leftBottom = Vector2_Transform(leftBottom, transform); + rightBottom = Vector2_Transform(rightBottom, transform); + + float leftUV = context->uvs[particle->uvIndex].left; + float topUV = context->uvs[particle->uvIndex].top; + float rightUV = context->uvs[particle->uvIndex].right; + float bottomUV = context->uvs[particle->uvIndex].bottom; + + memcpy(bufferAddress, &leftTop, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &leftUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &topUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &rightTop, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &rightUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &topUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &leftBottom, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &leftUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &bottomUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &leftBottom, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &leftUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &bottomUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &rightTop, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &rightUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &topUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &rightBottom, sizeof(Snowstorm_Vector2)); + bufferAddress += sizeof(Snowstorm_Vector2); + + memcpy(bufferAddress, &color, sizeof(Snowstorm_Color)); + bufferAddress += sizeof(Snowstorm_Color); + + memcpy(bufferAddress, &rightUV, sizeof(float)); + bufferAddress += sizeof(float); + + memcpy(bufferAddress, &bottomUV, sizeof(float)); + bufferAddress += sizeof(float); + + vertexCount += 6; + } + + return (double)vertexCount; +} + +void Snowstorm_Destroy(const char *contextPointer) +{ + Snowstorm_Context* context = (Snowstorm_Context*)contextPointer; + + if (context->particles != NULL) + { + free(context->particles); + } + + if (context->uvs != NULL) + { + free(context->uvs); + } + + free(context); +} diff --git a/src/snowstorm.h b/src/snowstorm.h index aac1884..eb6ff89 100644 --- a/src/snowstorm.h +++ b/src/snowstorm.h @@ -57,17 +57,23 @@ extern "C" { ) SNOWSTORMAPI void Snowstorm_Init(); -SNOWSTORMAPI void Snowstorm_Update(double delta); -SNOWSTORMAPI void Snowstorm_ApplyWind(double xSpeed, double ySpeed); +SNOWSTORMAPI const char* Snowstorm_Create(); /* have to return a string because game maker lol */ +SNOWSTORMAPI void Snowstorm_SetUVCount(const char *contextPointer, double count); +/* i split these up because game maker cant have more than 4 arguments with different types lol */ +SNOWSTORMAPI void Snowstorm_SetLeftTopUV(const char *contextPointer, double index, double left, double top); +SNOWSTORMAPI void Snowstorm_SetRightBottomUV(const char* contextPointer, double index, double right, double bottom); -SNOWSTORMAPI void Snowstorm_SetBuffer(const char* bufferId); +SNOWSTORMAPI void Snowstorm_Update(const char *contextPointer); +SNOWSTORMAPI void Snowstorm_ApplyWind(const char *contextPointer, double xSpeed, double ySpeed); +SNOWSTORMAPI void Snowstorm_ApplyChaos(const char* contextPointer, double directionChaos, double speedChaos); +SNOWSTORMAPI void Snowstorm_SetParticles(const char *contextPointer, double count); -SNOWSTORMAPI double Snowstorm_RequiredSnowBufferSize(); -SNOWSTORMAPI double Snowstorm_FillSnowBuffer(); +SNOWSTORMAPI void Snowstorm_SetBufferAddress(const char *contextPointer, const char* bufferId); -SNOWSTORMAPI void Snowstorm_PerformDestroys(); -SNOWSTORMAPI void Snowstorm_ClearAll(); -SNOWSTORMAPI void Snowstorm_Finish(); +SNOWSTORMAPI double Snowstorm_RequiredSnowBufferSize(const char *contextPointer); +SNOWSTORMAPI double Snowstorm_FillSnowBuffer(const char *contextPointer); + +SNOWSTORMAPI void Snowstorm_Destroy(const char *contextPointer); #ifdef __cplusplus } diff --git a/visualc/Snowstorm.sln b/visualc/Snowstorm.sln index 89c2be3..5b24217 100644 --- a/visualc/Snowstorm.sln +++ b/visualc/Snowstorm.sln @@ -1,31 +1,30 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31424.327 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.645 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Snowstorm", "Snowstorm.vcxproj", "{912587C6-EF96-4BF8-BFE8-0E7D8A70D556}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Snowstorm", "Snowstorm.vcxproj", "{6DB15344-E000-45CB-A48A-1D72F7D6E945}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 + MinSizeRel|x64 = MinSizeRel|x64 Release|x64 = Release|x64 - Release|x86 = Release|x86 + RelWithDebInfo|x64 = RelWithDebInfo|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Debug|x64.ActiveCfg = Debug|x64 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Debug|x64.Build.0 = Debug|x64 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Debug|x86.ActiveCfg = Debug|Win32 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Debug|x86.Build.0 = Debug|Win32 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Release|x64.ActiveCfg = Release|x64 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Release|x64.Build.0 = Release|x64 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Release|x86.ActiveCfg = Release|Win32 - {912587C6-EF96-4BF8-BFE8-0E7D8A70D556}.Release|x86.Build.0 = Release|Win32 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.Debug|x64.ActiveCfg = Debug|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.Debug|x64.Build.0 = Debug|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.MinSizeRel|x64.ActiveCfg = Release|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.MinSizeRel|x64.Build.0 = Release|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.Release|x64.ActiveCfg = Release|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.Release|x64.Build.0 = Release|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.RelWithDebInfo|x64.ActiveCfg = Release|x64 + {6DB15344-E000-45CB-A48A-1D72F7D6E945}.RelWithDebInfo|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {22EBBD2E-C8D7-4352-BF1B-8188D6AE4259} + SolutionGuid = {7B2DB465-0A55-3811-9EF4-A520B47653D2} EndGlobalSection EndGlobal diff --git a/visualc/Snowstorm.vcxproj b/visualc/Snowstorm.vcxproj index 334541d..3c5fccc 100644 --- a/visualc/Snowstorm.vcxproj +++ b/visualc/Snowstorm.vcxproj @@ -1,5 +1,5 @@ - + Debug @@ -19,149 +19,77 @@ - 16.0 - Win32Proj - {912587c6-ef96-4bf8-bfe8-0e7d8a70d556} + {4F20502A-F926-4D12-872D-64AC2E065078} Snowstorm 10.0 - + DynamicLibrary true - v142 - Unicode + MultiByte - + DynamicLibrary false - v142 true - Unicode + MultiByte - - DynamicLibrary - true + v142 - Unicode - - DynamicLibrary - false + + ClangCL + + + v142 + + v142 - true - Unicode - - - - - - - - - - - - + - - true - - - false - - true + true + true - - false + + false + false + false - + Level3 - true - WIN32;_DEBUG;SNOWSTORM_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Use - pch.h + Disabled + Default - Windows - true - false + DebugFull - + Level3 + MaxSpeed true true - true - WIN32;NDEBUG;SNOWSTORM_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Use - pch.h - Windows - true + true true - true - false - - - - - Level3 - true - _DEBUG;SNOWSTORM_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Use - pch.h - - - Windows - true - false - - - - - Level3 - true - true - true - NDEBUG;SNOWSTORM_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - Use - pch.h - - - Windows - true - true - true - false - - + - - - Create - Create - Create - Create - + diff --git a/visualc/Snowstorm.vcxproj.filters b/visualc/Snowstorm.vcxproj.filters deleted file mode 100644 index 1e57c7b..0000000 --- a/visualc/Snowstorm.vcxproj.filters +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/visualc/Snowstorm.vcxproj.user b/visualc/Snowstorm.vcxproj.user index 88a5509..be25078 100644 --- a/visualc/Snowstorm.vcxproj.user +++ b/visualc/Snowstorm.vcxproj.user @@ -1,4 +1,4 @@  - + \ No newline at end of file