v1.2版本改为通过xbox系列手柄进行遥控,并增加智能模式和手动模式
This commit is contained in:
1 parent
76603d3c31
commit
1a97bc32c3
1839 files changed
+478852
-3
No files matched your search
@@ -0,0 +1,92 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "fl/span.h"
|
||||
#include "fl/vector.h"
|
||||
#include "fl/allocator.h"
|
||||
|
||||
namespace fl {
|
||||
|
||||
|
||||
template <typename T> class Grid {
|
||||
public:
|
||||
Grid() = default;
|
||||
|
||||
Grid(u32 width, u32 height) { reset(width, height); }
|
||||
|
||||
void reset(u32 width, u32 height) {
|
||||
clear();
|
||||
if (width != mWidth || height != mHeight) {
|
||||
mWidth = width;
|
||||
mHeight = height;
|
||||
mData.resize(width * height);
|
||||
|
||||
}
|
||||
mSlice = fl::MatrixSlice<T>(mData.data(), width, height, 0, 0,
|
||||
width, height);
|
||||
}
|
||||
|
||||
|
||||
void clear() {
|
||||
for (u32 i = 0; i < mWidth * mHeight; ++i) {
|
||||
mData[i] = T();
|
||||
}
|
||||
}
|
||||
|
||||
vec2<T> minMax() const {
|
||||
T minValue = mData[0];
|
||||
T maxValue = mData[0];
|
||||
for (u32 i = 1; i < mWidth * mHeight; ++i) {
|
||||
if (mData[i] < minValue) {
|
||||
minValue = mData[i];
|
||||
}
|
||||
if (mData[i] > maxValue) {
|
||||
maxValue = mData[i];
|
||||
}
|
||||
}
|
||||
// *min = minValue;
|
||||
// *max = maxValue;
|
||||
vec2<T> out(minValue, maxValue);
|
||||
return out;
|
||||
}
|
||||
|
||||
T &at(u32 x, u32 y) { return access(x, y); }
|
||||
const T &at(u32 x, u32 y) const { return access(x, y); }
|
||||
|
||||
T &operator()(u32 x, u32 y) { return at(x, y); }
|
||||
const T &operator()(u32 x, u32 y) const { return at(x, y); }
|
||||
|
||||
u32 width() const { return mWidth; }
|
||||
u32 height() const { return mHeight; }
|
||||
|
||||
T* data() { return mData.data(); }
|
||||
const T* data() const { return mData.data(); }
|
||||
|
||||
fl::size size() const { return mData.size(); }
|
||||
|
||||
private:
|
||||
static T &NullValue() {
|
||||
static T gNull;
|
||||
return gNull;
|
||||
}
|
||||
T &access(u32 x, u32 y) {
|
||||
if (x < mWidth && y < mHeight) {
|
||||
return mSlice.at(x, y);
|
||||
} else {
|
||||
return NullValue(); // safe.
|
||||
}
|
||||
}
|
||||
const T &access(u32 x, u32 y) const {
|
||||
if (x < mWidth && y < mHeight) {
|
||||
return mSlice.at(x, y);
|
||||
} else {
|
||||
return NullValue(); // safe.
|
||||
}
|
||||
}
|
||||
fl::vector<T, fl::allocator_psram<T>> mData;
|
||||
u32 mWidth = 0;
|
||||
u32 mHeight = 0;
|
||||
fl::MatrixSlice<T> mSlice;
|
||||
};
|
||||
|
||||
} // namespace fl
|
||||
Reference in new issue
Block a user