v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
50
source/game/StarCollisionGenerator.hpp
Normal file
50
source/game/StarCollisionGenerator.hpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
#ifndef STAR_COLLISION_GENERATOR_HPP
|
||||
#define STAR_COLLISION_GENERATOR_HPP
|
||||
|
||||
#include "StarCollisionBlock.hpp"
|
||||
#include "StarMultiArray.hpp"
|
||||
|
||||
#include <functional>
|
||||
|
||||
namespace Star {
|
||||
|
||||
STAR_CLASS(CollisionGenerator);
|
||||
|
||||
// Turns cell geometry into "smoothed" polygonal geometry. Used by World to
|
||||
// generate ramps and slopes based on tiles.
|
||||
class CollisionGenerator {
|
||||
public:
|
||||
// The maximum number of spaces away from a block that can influence the
|
||||
// collision geometry of a given block.
|
||||
static int const BlockInfluenceRadius = 2;
|
||||
|
||||
// The Maximum number of blocks that will be generated for a single tile
|
||||
// space.
|
||||
static size_t const MaximumCollisionsPerSpace = 4;
|
||||
|
||||
// Callback function to tell what kind of collision geometry is in a cell.
|
||||
// Will be called up to BlockInfluenceRadius outside of the given query
|
||||
// region.
|
||||
typedef std::function<CollisionKind(int, int)> CollisionKindAccessor;
|
||||
|
||||
void init(CollisionKindAccessor accessor);
|
||||
|
||||
// Get collision geometry for the given block region.
|
||||
List<CollisionBlock> getBlocks(RectI const& region) const;
|
||||
|
||||
private:
|
||||
void getBlocksPlatforms(List<CollisionBlock>& output, RectI const& region, CollisionKind kind) const;
|
||||
void getBlocksMarchingSquares(List<CollisionBlock>& output, RectI const& region, CollisionKind kind) const;
|
||||
|
||||
void populateCollisionBuffer(RectI const& region) const;
|
||||
CollisionKind collisionKind(int x, int y) const;
|
||||
|
||||
CollisionKindAccessor m_accessor;
|
||||
|
||||
mutable Vec2I m_collisionBufferCorner;
|
||||
mutable MultiArray<CollisionKind, 2> m_collisionBuffer;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue