tge/lib/maxsdk70/include/ParticleFlow/PreciseTimeValue.h
2017-04-17 06:17:10 -06:00

95 lines
3.2 KiB
C++
Executable File

/*! \file PreciseTimeValue.h
\brief Class definitions for PreciseTimeValue.
Though time is stored internall in 3ds max as an integer
number of ticks, the precision is not sufficient particularly
for collision detection and particle systems tests.
The class is used where an additional degree of time pre-
cision is required.
The "fraction" member stays in range [-0.5f, 0.5f] if
there is no direct manipulation with the member.
*/
/**********************************************************************
*<
CREATED BY: Oleg Bayborodin
HISTORY: created 10-17-01
*> Copyright (c) 2001, All Rights Reserved.
**********************************************************************/
#ifndef _PRECISETIMEVALUE_H
#define _PRECISETIMEVALUE_H
#include "PFExport.h"
class PFExport PreciseTimeValue {
public:
int tick;
float fraction;
// Constructors
PreciseTimeValue() {}
PreciseTimeValue(int t, float f) { tick = t; fraction = f; }
PreciseTimeValue(int t) { tick = t; fraction = 0.0f; }
PreciseTimeValue(float f);
PreciseTimeValue(const PreciseTimeValue& v);
// Data members
static const PreciseTimeValue Origin;
// Conversion function
operator int() { return tick; }
operator float() { return tick+fraction; }
// Unary operators
PreciseTimeValue operator-() const;
PreciseTimeValue operator+() const { return *this; }
// Property functions
int TimeValue() const { return tick; }
float PreciseTime() const { return tick+fraction; }
// Assignment operators
PreciseTimeValue& operator-=(const PreciseTimeValue&);
PreciseTimeValue& operator-=(const int v) { tick -= v; return *this; }
PreciseTimeValue& operator-=(const float);
PreciseTimeValue& operator+=(const PreciseTimeValue&);
PreciseTimeValue& operator+=(const int v) { tick += v; return *this; }
PreciseTimeValue& operator+=(const float);
PreciseTimeValue& operator*=(const int);
PreciseTimeValue& operator*=(const float);
PreciseTimeValue& operator/=(const float);
PreciseTimeValue& Set(int t, float f) { tick=t; fraction=f; return *this; }
// Test for equality
int operator==(const PreciseTimeValue& v) const
{ return ((v.tick==tick)&&(v.fraction==fraction)); }
int operator!=(const PreciseTimeValue& v) const
{ return ((v.tick!=tick)||(v.fraction!=fraction)); }
int Equals(const PreciseTimeValue& v, float epsilon = 1E-6f) const;
int Equals(int t, float epsilon = 1E-6f) const;
int Equals(float t, float epsilon = 1E-6f) const;
int operator>(const PreciseTimeValue& v) const;
int operator<(const PreciseTimeValue& v) const;
int operator>=(const PreciseTimeValue& v) const;
int operator<=(const PreciseTimeValue& v) const;
// Binary operators
PreciseTimeValue operator-(const PreciseTimeValue&) const;
PreciseTimeValue operator-(const int) const;
PreciseTimeValue operator-(const float) const;
PreciseTimeValue operator+(const PreciseTimeValue&) const;
PreciseTimeValue operator+(const int) const;
PreciseTimeValue operator+(const float) const;
PreciseTimeValue operator*(const int) const;
PreciseTimeValue operator*(const float) const;
PreciseTimeValue operator/(const float) const;
// internal use
void AdjustFraction();
};
#endif // _PRECISETIMEVALUE_H_