| 160 | //========================================================================== |
| 161 | |
| 162 | void PClassActor::InitializeDefaults() |
| 163 | { |
| 164 | if (IsDescendantOf(RUNTIME_CLASS(DCoreActor))) |
| 165 | { |
| 166 | assert(Defaults == nullptr); |
| 167 | Defaults = (uint8_t*)M_Malloc(Size); |
| 168 | |
| 169 | ConstructNative(Defaults); |
| 170 | // We must unlink the defaults from the class list because it's just a static block of data to the engine. |
| 171 | DObject* optr = (DObject*)Defaults; |
| 172 | GC::Root = optr->ObjNext; |
| 173 | optr->ObjNext = nullptr; |
| 174 | optr->SetClass(this); |
| 175 | |
| 176 | // Copy the defaults from the parent but leave the DObject part alone because it contains important data. |
| 177 | if (ParentClass->Defaults != nullptr) |
| 178 | { |
| 179 | memcpy(Defaults + sizeof(DObject), ParentClass->Defaults + sizeof(DObject), ParentClass->Size - sizeof(DObject)); |
| 180 | if (Size > ParentClass->Size) |
| 181 | { |
| 182 | memset(Defaults + ParentClass->Size, 0, Size - ParentClass->Size); |
| 183 | } |
| 184 | } |
| 185 | else |
| 186 | { |
| 187 | memset(Defaults + sizeof(DObject), 0, Size - sizeof(DObject)); |
| 188 | } |
| 189 | |
| 190 | assert(MetaSize >= ParentClass->MetaSize); |
| 191 | if (MetaSize != 0) |
| 192 | { |
| 193 | Meta = (uint8_t*)M_Malloc(MetaSize); |
| 194 | |
| 195 | // Copy the defaults from the parent but leave the DObject part alone because it contains important data. |
| 196 | if (ParentClass->Meta != nullptr) |
| 197 | { |
| 198 | memcpy(Meta, ParentClass->Meta, ParentClass->MetaSize); |
| 199 | if (MetaSize > ParentClass->MetaSize) |
| 200 | { |
| 201 | memset(Meta + ParentClass->MetaSize, 0, MetaSize - ParentClass->MetaSize); |
| 202 | } |
| 203 | } |
| 204 | else |
| 205 | { |
| 206 | memset(Meta, 0, MetaSize); |
| 207 | } |
| 208 | |
| 209 | if (MetaSize > 0) memcpy(Meta, ParentClass->Meta, ParentClass->MetaSize); |
| 210 | else memset(Meta, 0, MetaSize); |
| 211 | } |
| 212 | } |
| 213 | PClass::InitializeDefaults(); |
| 214 | } |
| 215 | |
| 216 | //========================================================================== |
| 217 | // |
no test coverage detected