95 lines
3.2 KiB
C++
Executable File
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_
|