summaryrefslogtreecommitdiff
path: root/indra/newview/llpathfindinglinkset.h
blob: 0f2268861f8c66a920ac9ad4c1fcbc9e199e44c7 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
* @file   llpathfindinglinkset.h
* @brief  Definition of a pathfinding linkset that contains various properties required for havok pathfinding.
* @author Stinson@lindenlab.com
*
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2012, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
* $/LicenseInfo$
*/
#ifndef LL_LLPATHFINDINGLINKSET_H
#define LL_LLPATHFINDINGLINKSET_H

#include <string>

#include "llpathfindingobject.h"

class LLSD;

class LLPathfindingLinkset : public LLPathfindingObject
{
public:
    typedef enum
    {
        kUnknown,
        kWalkable,
        kStaticObstacle,
        kDynamicObstacle,
        kMaterialVolume,
        kExclusionVolume,
        kDynamicPhantom
    } ELinksetUse;

    LLPathfindingLinkset(const LLSD &pTerrainData);
    LLPathfindingLinkset(const std::string &pUUID, const LLSD &pLinksetData);
    LLPathfindingLinkset(const LLPathfindingLinkset& pOther);
    virtual ~LLPathfindingLinkset();

    LLPathfindingLinkset& operator = (const LLPathfindingLinkset& pOther);

    inline bool        isTerrain() const                   {return mIsTerrain;};
    inline U32         getLandImpact() const               {return mLandImpact;};
    bool               isModifiable() const                {return mIsModifiable;};
    bool               isPhantom() const;
    bool               canBeVolume() const                 {return mCanBeVolume;};
    static ELinksetUse getLinksetUseWithToggledPhantom(ELinksetUse pLinksetUse);

    inline ELinksetUse getLinksetUse() const               {return mLinksetUse;};

    inline bool        isScripted() const                  {return mIsScripted;};
    inline bool        hasIsScripted() const               {return mHasIsScripted;};

    inline S32         getWalkabilityCoefficientA() const  {return mWalkabilityCoefficientA;};
    inline S32         getWalkabilityCoefficientB() const  {return mWalkabilityCoefficientB;};
    inline S32         getWalkabilityCoefficientC() const  {return mWalkabilityCoefficientC;};
    inline S32         getWalkabilityCoefficientD() const  {return mWalkabilityCoefficientD;};

    bool               isShowUnmodifiablePhantomWarning(ELinksetUse pLinksetUse) const;
    bool               isShowPhantomToggleWarning(ELinksetUse pLinksetUse) const;
    bool               isShowCannotBeVolumeWarning(ELinksetUse pLinksetUse) const;
    LLSD               encodeAlteredFields(ELinksetUse pLinksetUse, S32 pA, S32 pB, S32 pC, S32 pD) const;

    static const S32 MIN_WALKABILITY_VALUE;
    static const S32 MAX_WALKABILITY_VALUE;

protected:

private:
    typedef enum
    {
        kNavMeshGenerationIgnore,
        kNavMeshGenerationInclude,
        kNavMeshGenerationExclude
    } ENavMeshGenerationCategory;

    void                              parseLinksetData(const LLSD &pLinksetData);
    void                              parsePathfindingData(const LLSD &pLinksetData);

    static bool                       isPhantom(ELinksetUse pLinksetUse);
    static ELinksetUse                getLinksetUse(bool pIsPhantom, ENavMeshGenerationCategory pNavMeshGenerationCategory);
    static ENavMeshGenerationCategory getNavMeshGenerationCategory(ELinksetUse pLinksetUse);
    static LLSD                       convertCategoryToLLSD(ENavMeshGenerationCategory pNavMeshGenerationCategory);
    static ENavMeshGenerationCategory convertCategoryFromLLSD(const LLSD &llsd);

    bool         mIsTerrain;
    U32          mLandImpact;
    bool         mIsModifiable;
    bool         mCanBeVolume;
    bool         mIsScripted;
    bool         mHasIsScripted;
    ELinksetUse  mLinksetUse;
    S32          mWalkabilityCoefficientA;
    S32          mWalkabilityCoefficientB;
    S32          mWalkabilityCoefficientC;
    S32          mWalkabilityCoefficientD;
};

#endif // LL_LLPATHFINDINGLINKSET_H