mirror of
https://github.com/Ragora/T2-CPP.git
synced 2026-02-14 12:13:36 +00:00
Initial commit.
This commit is contained in:
parent
9538049d44
commit
44e5f33ee7
99 changed files with 2363 additions and 0 deletions
169
Mod Sources/RandomMod/BaseMod/randomCmds.cpp
Normal file
169
Mod Sources/RandomMod/BaseMod/randomCmds.cpp
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
#include "stdafx.h"
|
||||
#include <math.h>
|
||||
#include <cstdlib>
|
||||
#include <stdio.h>
|
||||
#include "mt.h"
|
||||
|
||||
#include "t2api.h"
|
||||
|
||||
// Merscenne Twister
|
||||
MersenneTwister *mt = NULL;
|
||||
const char *conMRandom(SimObject *obj, S32 argc, const char *argv[])
|
||||
{
|
||||
if (!mt)
|
||||
{
|
||||
mt = new MersenneTwister;
|
||||
mt->init_genrand(time(NULL));
|
||||
}
|
||||
|
||||
char mem[256];
|
||||
memset(mem, 0x00, 255);
|
||||
if (argc == 1)
|
||||
{
|
||||
sprintf_s(mem, 256, "%f", mt->random());
|
||||
return mem;
|
||||
}
|
||||
|
||||
char *a_c = (char*)argv[1];
|
||||
char *b_c;
|
||||
if (argc == 3)
|
||||
b_c = (char*)argv[2];
|
||||
else if (argc == 2)
|
||||
{
|
||||
b_c = a_c;
|
||||
a_c = "0";
|
||||
}
|
||||
|
||||
int a = atoi(a_c);
|
||||
int b = atoi(b_c);
|
||||
|
||||
// Check to see if we have any negative arguments
|
||||
if (a < 0)
|
||||
{
|
||||
int max = b + abs(a);
|
||||
int rand = mt->genrand_int32() % (max);
|
||||
if (rand > b)
|
||||
rand = -(rand-b);
|
||||
sprintf_s(mem, 256, "%d", rand);
|
||||
return mem;
|
||||
}
|
||||
|
||||
sprintf_s(mem, 256, "%f", floor(mt->random() * b + a));
|
||||
return mem;
|
||||
}
|
||||
|
||||
const char *conMRandomFloat(SimObject *obj, S32 argc, const char *argv[])
|
||||
{
|
||||
if (!mt)
|
||||
{
|
||||
mt = new MersenneTwister;
|
||||
mt->init_genrand(time(NULL));
|
||||
}
|
||||
|
||||
char mem[256];
|
||||
memset(mem, 0x00, 255);
|
||||
if (argc == 1)
|
||||
{
|
||||
sprintf_s(mem, 256, "%f", mt->random());
|
||||
return mem;
|
||||
}
|
||||
|
||||
char *a_c = (char*)argv[1];
|
||||
char *b_c;
|
||||
if (argc == 3)
|
||||
b_c = (char*)argv[2];
|
||||
else if (argc == 2)
|
||||
{
|
||||
b_c = a_c;
|
||||
a_c = "0";
|
||||
}
|
||||
|
||||
float a = atof(a_c);
|
||||
float b = atof(b_c);
|
||||
if (a > b)
|
||||
{
|
||||
int d = b;
|
||||
b = a;
|
||||
a = d;
|
||||
}
|
||||
|
||||
sprintf_s(mem, 256, "%f", mt->random() * b + a);
|
||||
return mem;
|
||||
}
|
||||
|
||||
const char *conMSeed(SimObject *obj, S32 argc, const char *argv[])
|
||||
{
|
||||
if (!mt)
|
||||
{
|
||||
mt = new MersenneTwister;
|
||||
mt->init_genrand(time(NULL));
|
||||
}
|
||||
const char *a_c = argv[1];
|
||||
|
||||
unsigned long a = 0;
|
||||
unsigned int len = strlen(a_c);
|
||||
for (unsigned int i = 0; i < len; i++)
|
||||
if ( a_c[i] > 57 || a_c[i] < 48)
|
||||
{
|
||||
mt->init_by_array((unsigned long*)a_c, len+1);
|
||||
return "1";
|
||||
}
|
||||
|
||||
a = atof(a_c);
|
||||
mt->init_genrand(a);
|
||||
return "1";
|
||||
}
|
||||
|
||||
|
||||
#define QPC_MAX_STOPWATCHES 20
|
||||
|
||||
static unsigned int CURRENT_STOPWATCH_COUNT = 0;
|
||||
static __int64 QPC_STOPWATCHES[QPC_MAX_STOPWATCHES];
|
||||
|
||||
__int64 STARTING_QPC_TIME;
|
||||
const char*conQPCBegin(SimObject *obj, S32 argc, const char *argv[])
|
||||
{
|
||||
if (!QueryPerformanceCounter((LARGE_INTEGER*)&QPC_STOPWATCHES[CURRENT_STOPWATCH_COUNT]))
|
||||
{
|
||||
Con::errorf(0, "QPCBegin(): Failed to start timer! (%u)", GetLastError());
|
||||
return "-1";
|
||||
}
|
||||
else if (CURRENT_STOPWATCH_COUNT >= QPC_MAX_STOPWATCHES)
|
||||
{
|
||||
Con::errorf(0, "QPCBegin(): Too many stopwatches active! (Maximum: %u)", QPC_MAX_STOPWATCHES);
|
||||
return "-1";
|
||||
}
|
||||
|
||||
unsigned int return_value = CURRENT_STOPWATCH_COUNT;
|
||||
char result[256];
|
||||
sprintf_s<256>(result, "%u", return_value);
|
||||
|
||||
CURRENT_STOPWATCH_COUNT++;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
const char*conQPCEnd(SimObject *obj, S32 argc, const char *argv[])
|
||||
{
|
||||
__int64 ENDING_QPC_TIME;
|
||||
if (!QueryPerformanceCounter((LARGE_INTEGER*)&ENDING_QPC_TIME))
|
||||
{
|
||||
Con::errorf(0, "QPCEnd(): Failed to stop timer! (%u)", GetLastError());
|
||||
return "-1";
|
||||
}
|
||||
else if (CURRENT_STOPWATCH_COUNT == 0)
|
||||
{
|
||||
Con::errorf(0, "QPCEnd(): No stopwatches to stop!");
|
||||
return "-1";
|
||||
}
|
||||
|
||||
__int64 qpc_frequency;
|
||||
QueryPerformanceFrequency((LARGE_INTEGER*)&qpc_frequency);
|
||||
|
||||
char result[256];
|
||||
sprintf_s<256>(result, "%f", ((QPC_STOPWATCHES[CURRENT_STOPWATCH_COUNT - 1]) - ENDING_QPC_TIME) * 1.0 / qpc_frequency);
|
||||
|
||||
CURRENT_STOPWATCH_COUNT--;
|
||||
|
||||
return result;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue