summaryrefslogtreecommitdiff
path: root/lib/hkStubs/Havok/Physics2012/Collide/Shape/Compound/Collection/hkpShapeCollection.h
blob: 899a1c87730951e0e1067b30b28f7d83ff8b62b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#pragma once

#include <Havok/Common/Base/hkBase.h>
#include <Havok/Physics2012/Collide/Shape/hkpShape.h>
#include <Havok/Physics2012/Collide/Shape/hkpShapeContainer.h>
#include <Havok/Physics2012/Collide/Util/Welding/hkpWeldingUtility.h>

class hkpShapeCollection : public hkpShape, public hkpShapeContainer {
public:
    HK_DECLARE_CLASS_ALLOCATOR(hkpShapeCollection)
    HKCD_DECLARE_SHAPE_TYPE(hkcdShapeType::COLLECTION)

    enum CollectionType {
        COLLECTION_LIST,
        COLLECTION_EXTENDED_MESH,
        COLLECTION_TRISAMPLED_HEIGHTFIELD,
        COLLECTION_USER,
        COLLECTION_SIMPLE_MESH,
        COLLECTION_MESH_SHAPE,
        COLLECTION_COMPRESSED_MESH,
        COLLECTION_MAX
    };

    HK_FORCE_INLINE hkpShapeCollection() = default;
    hkpShapeCollection(ShapeType type, CollectionType collectionType);
    explicit hkpShapeCollection(hkFinishLoadedObjectFlag flag);

    void getAabb(const hkTransform& localToWorld, hkReal tolerance, hkAabb& out) const override;

    hkBool castRay(const hkpShapeRayCastInput& input,
                   hkpShapeRayCastOutput& results) const override;

    void castRayWithCollector(const hkpShapeRayCastInput& input, const hkpCdBody& cdBody,
                              hkpRayHitCollector& collector) const override;

    hkReal getMaximumProjection(const hkVector4& direction) const override;

    const hkpShapeContainer* getContainer() const override;

    virtual void initWeldingInfo(hkpWeldingUtility::WeldingType weldingType);
    virtual void setWeldingInfo(hkpShapeKey key, hkInt16 weldingInfo);

    bool isWeldingEnabled() const override { return !m_disableWelding; }

    hkBool m_disableWelding;
    hkEnum<CollectionType, hkUint8> m_collectionType;
};