Mercurial > fife-parpg
annotate engine/core/util/resource/resource_ptr.h @ 407:f27880d4c08c
Moved getAngleBetween() form Camera to angles.h and updated it to not use the camera angle in it's calculation.
Added camera rotation to the angle calculation for selecting the correct image by angles.
Added a call to setRotation() to make sure that instance rotation is valid.
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Fri, 29 Jan 2010 21:03:51 +0000 |
parents | 6e7d228def30 |
children |
rev | line source |
---|---|
150
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
1 /*************************************************************************** |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
2 * Copyright (C) 2005-2008 by the FIFE team * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
3 * http://www.fifengine.de * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
4 * This file is part of FIFE. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
5 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
6 * FIFE is free software; you can redistribute it and/or * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
8 * License as published by the Free Software Foundation; either * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
10 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
11 * This library is distributed in the hope that it will be useful, * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
14 * Lesser General Public License for more details. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
15 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
17 * License along with this library; if not, write to the * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
18 * Free Software Foundation, Inc., * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
20 ***************************************************************************/ |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
21 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
22 #ifndef FIFE_RESOURE_PTR_H |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
23 #define FIFE_RESOURE_PTR_H |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
24 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
25 // Standard C++ library includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
26 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
27 // 3rd party library includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
28 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
29 // FIFE includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
30 // These includes are split up in two parts, separated by one empty line |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
31 // First block: files included from the FIFE root src directory |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
32 // Second block: files included from the same folder |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
33 #include "resource.h" |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
34 #include "pool.h" |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
35 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
36 namespace FIFE { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
37 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
38 /** A lazy loading resource. |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
39 */ |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
40 class ResourcePtr { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
41 public: |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
42 ResourcePtr(IResource* ptr = 0) : m_ptr(ptr),m_pool(0),m_index(Pool::INVALID_ID) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
43 if( m_ptr ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
44 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
45 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
46 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
47 ResourcePtr(Pool* pool,int index) : m_ptr(0),m_pool(pool),m_index(index) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
48 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
49 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
50 ResourcePtr(const ResourcePtr& r) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
51 : m_ptr(r.m_ptr),m_pool(r.m_pool),m_index(r.m_index) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
52 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
53 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
54 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
55 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
56 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
57 ResourcePtr& operator=(const ResourcePtr& r) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
58 if( this == &r ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
59 return *this; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
60 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
61 m_ptr = r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
62 m_pool = r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
63 m_index = r.m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
64 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
65 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
66 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
67 return *this; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
68 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
69 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
70 ~ResourcePtr() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
71 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
72 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
73 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
74 IResource& operator->() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
75 load(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
76 return *m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
77 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
78 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
79 const IResource& operator->() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
80 constLoad(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
81 return *m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
82 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
83 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
84 operator bool() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
85 return isValid(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
86 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
87 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
88 bool isValid() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
89 return m_ptr || isLoadable(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
90 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
91 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
92 bool isLoadable() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
93 return m_pool && m_index != Pool::INVALID_ID; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
94 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
95 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
96 bool operator==(const ResourcePtr& r) const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
97 if( isLoadable() && r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
98 return m_index == r.m_index && m_pool == r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
99 if( !isLoadable() && !r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
100 return m_ptr == r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
101 return false; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
102 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
103 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
104 bool operator<(const ResourcePtr& r) const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
105 if( isLoadable() && r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
106 { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
107 if( m_pool == r.m_pool ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
108 return m_index < r.m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
109 return m_pool < r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
110 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
111 if( !isLoadable() && !r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
112 return m_ptr < r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
113 return isLoadable() < r.isLoadable(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
114 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
115 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
116 void release() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
117 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
118 m_ptr->decRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
119 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
120 m_ptr = 0; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
121 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
122 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
123 void load() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
124 constLoad(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
125 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
126 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
127 void unload() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
128 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
129 if( isLoadable() ) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
130 m_pool->release(m_index); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
131 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
132 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
133 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
134 template<class T> |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
135 T* get() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
136 if( isValid() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
137 load(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
138 return dynamic_cast<T*>(m_ptr); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
139 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
140 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
141 private: |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
142 void constLoad() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
143 if( m_ptr ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
144 return; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
145 m_ptr = &m_pool->get(m_index); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
146 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
147 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
148 mutable IResource* m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
149 Pool* m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
150 int m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
151 }; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
152 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
153 #endif |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
154 |