| 124 | } |
| 125 | |
| 126 | Frame* getFrame(const char* name) |
| 127 | { |
| 128 | FrameMap::iterator iFrame = s_frames.find(name); |
| 129 | if (iFrame != s_frames.end()) |
| 130 | { |
| 131 | return iFrame->second; |
| 132 | } |
| 133 | |
| 134 | // It doesn't exist yet, try to load the texture. |
| 135 | if (!TFE_AssetSystem::readAssetFromArchive(c_defaultGob, ARCHIVE_GOB, name, s_buffer)) |
| 136 | { |
| 137 | return nullptr; |
| 138 | } |
| 139 | |
| 140 | Frame* frame = new Frame; |
| 141 | u8* data = s_buffer.data(); |
| 142 | FME_Frame* fme_frame = (FME_Frame*)data; |
| 143 | FME_Cell* fme_cell = (FME_Cell *)&data[fme_frame->Cell]; |
| 144 | |
| 145 | // Load the image. |
| 146 | u8* image = new u8[fme_cell->SizeX * fme_cell->SizeY]; |
| 147 | const u8* srcData = (u8*)fme_cell + sizeof(FME_Cell); |
| 148 | loadCell(fme_cell->SizeX, fme_cell->SizeY, fme_cell->Compressed, fme_cell->DataSize, srcData, image); |
| 149 | |
| 150 | frame->InsertX = fme_frame->InsertX; |
| 151 | frame->InsertY = fme_frame->InsertY; |
| 152 | frame->Flip = fme_frame->Flip; |
| 153 | frame->width = fme_cell->SizeX; |
| 154 | frame->height = fme_cell->SizeY; |
| 155 | frame->image = image; |
| 156 | |
| 157 | // area. |
| 158 | frame->rect[0] = frame->InsertX; |
| 159 | frame->rect[1] = -frame->height - frame->InsertY; |
| 160 | frame->rect[2] = frame->rect[0] + frame->width; |
| 161 | frame->rect[3] = frame->rect[1] + frame->height; |
| 162 | |
| 163 | s_frames[name] = frame; |
| 164 | return frame; |
| 165 | } |
| 166 | |
| 167 | std::vector<s32> s_tempFrames; |
| 168 | std::vector<s32> s_tempCells; |
nothing calls this directly
no test coverage detected