Initial commit
This commit is contained in:
75
Torque/SDK/engine/interior/lightUpdateGrouper.cc
Normal file
75
Torque/SDK/engine/interior/lightUpdateGrouper.cc
Normal file
@@ -0,0 +1,75 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// Torque Game Engine
|
||||
// Copyright (C) GarageGames.com, Inc.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "interior/lightUpdateGrouper.h"
|
||||
|
||||
LightUpdateGrouper::LightUpdateGrouper(const U32 bitStart, const U32 bitEnd)
|
||||
{
|
||||
AssertFatal(bitEnd >= bitStart, "Error, bitend must be greater than bit start");
|
||||
AssertFatal(bitEnd < 32, "Error, bitend too large. must be in the range 0..31");
|
||||
|
||||
mBitStart = bitStart;
|
||||
mBitEnd = bitEnd;
|
||||
}
|
||||
|
||||
|
||||
LightUpdateGrouper::~LightUpdateGrouper()
|
||||
{
|
||||
mBitStart = 0xFFFFFFFF;
|
||||
mBitEnd = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
|
||||
void LightUpdateGrouper::addKey(const U32 key)
|
||||
{
|
||||
#ifdef TORQUE_DEBUG
|
||||
for (U32 i = 0; i < mKeys.size(); i++)
|
||||
AssertFatal(mKeys[i] != key, "Error, key already in the array!");
|
||||
#endif
|
||||
|
||||
mKeys.push_back(key);
|
||||
}
|
||||
|
||||
U32 LightUpdateGrouper::getKeyMask(const U32 key) const
|
||||
{
|
||||
U32 numBits = mBitEnd - mBitStart + 1;
|
||||
for (U32 i = 0; i < mKeys.size(); i++) {
|
||||
if (mKeys[i] == key) {
|
||||
U32 idx = i % numBits;
|
||||
return (1 << (idx + mBitStart));
|
||||
}
|
||||
}
|
||||
|
||||
AssertFatal(false, "Error, key not in the array!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
LightUpdateGrouper::BitIterator LightUpdateGrouper::begin()
|
||||
{
|
||||
BitIterator itr;
|
||||
itr.mGrouper = this;
|
||||
itr.mCurrBit = mBitStart;
|
||||
itr.resetKeyArray();
|
||||
|
||||
return itr;
|
||||
}
|
||||
|
||||
void LightUpdateGrouper::BitIterator::resetKeyArray()
|
||||
{
|
||||
mKeyArray.clear();
|
||||
if (valid() == false)
|
||||
return;
|
||||
|
||||
// Ok, we need to select out every (mBitEnd - mBitStart - 1)th key,
|
||||
// starting at mCurrBit.
|
||||
|
||||
U32 numBits = mGrouper->mBitEnd - mGrouper->mBitStart + 1;
|
||||
U32 numKeys = mGrouper->mKeys.size();
|
||||
|
||||
for (U32 i = mCurrBit - mGrouper->mBitStart; i < numKeys; i += numBits) {
|
||||
mKeyArray.push_back(mGrouper->mKeys[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user