1#include "sprite_class.h"
4sprite_class::sprite_class()
17sprite_class::~sprite_class()
21bool sprite_class::Initialize(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
int screenWidth,
int screenHeight,
char* spriteFilename,
int renderX,
int renderY)
27 m_screenWidth = screenWidth;
28 m_screenHeight = screenHeight;
38 result = InitializeBuffers(device);
45 result = LoadTextures(device, deviceContext, spriteFilename);
55void sprite_class::Shutdown()
67bool sprite_class::Render(ID3D11DeviceContext* deviceContext)
73 result = UpdateBuffers(deviceContext);
80 RenderBuffers(deviceContext);
85void sprite_class::Update(
float frameTime)
88 m_frameTime += frameTime;
91 if (m_frameTime >= m_cycleTime)
94 m_frameTime -= m_cycleTime;
99 if (m_currentTexture == m_textureCount)
101 m_currentTexture = 0;
109int sprite_class::GetIndexCount()
114ID3D11ShaderResourceView* sprite_class::GetTexture()
116 return m_Textures[m_currentTexture].GetTexture();
120bool sprite_class::InitializeBuffers(ID3D11Device* device)
122 VertexType* vertices;
123 unsigned long* indices;
124 D3D11_BUFFER_DESC vertexBufferDesc, indexBufferDesc;
125 D3D11_SUBRESOURCE_DATA vertexData, indexData;
138 m_indexCount = m_vertexCount;
141 vertices =
new VertexType[m_vertexCount];
144 indices =
new unsigned long[m_indexCount];
147 memset(vertices, 0, (
sizeof(VertexType) * m_vertexCount));
150 for (i = 0; i < m_indexCount; i++)
156 vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
157 vertexBufferDesc.ByteWidth =
sizeof(VertexType) * m_vertexCount;
158 vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
159 vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
160 vertexBufferDesc.MiscFlags = 0;
161 vertexBufferDesc.StructureByteStride = 0;
164 vertexData.pSysMem = vertices;
165 vertexData.SysMemPitch = 0;
166 vertexData.SysMemSlicePitch = 0;
169 result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer);
176 indexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
177 indexBufferDesc.ByteWidth =
sizeof(
unsigned long) * m_indexCount;
178 indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
179 indexBufferDesc.CPUAccessFlags = 0;
180 indexBufferDesc.MiscFlags = 0;
181 indexBufferDesc.StructureByteStride = 0;
184 indexData.pSysMem = indices;
185 indexData.SysMemPitch = 0;
186 indexData.SysMemSlicePitch = 0;
189 result = device->CreateBuffer(&indexBufferDesc, &indexData, &m_indexBuffer);
206void sprite_class::ShutdownBuffers()
211 m_indexBuffer->Release();
218 m_vertexBuffer->Release();
226bool sprite_class::UpdateBuffers(ID3D11DeviceContext* deviceContent)
228 float left, right, top, bottom;
229 VertexType* vertices;
230 D3D11_MAPPED_SUBRESOURCE mappedResource;
236 if ((m_prevPosX == m_renderX) && (m_prevPosY == m_renderY))
242 m_prevPosX = m_renderX;
243 m_prevPosY = m_renderY;
246 vertices =
new VertexType[m_vertexCount];
249 left = (float)((m_screenWidth / 2) * -1) + (float)m_renderX;
252 right = left + (float)m_bitmapWidth;
255 top = (float)(m_screenHeight / 2) - (float)m_renderY;
258 bottom = top - (float)m_bitmapHeight;
262 vertices[0].position = XMFLOAT3(left, top, 0.0f);
263 vertices[0].texture = XMFLOAT2(0.0f, 0.0f);
265 vertices[1].position = XMFLOAT3(right, bottom, 0.0f);
266 vertices[1].texture = XMFLOAT2(1.0f, 1.0f);
268 vertices[2].position = XMFLOAT3(left, bottom, 0.0f);
269 vertices[2].texture = XMFLOAT2(0.0f, 1.0f);
272 vertices[3].position = XMFLOAT3(left, top, 0.0f);
273 vertices[3].texture = XMFLOAT2(0.0f, 0.0f);
275 vertices[4].position = XMFLOAT3(right, top, 0.0f);
276 vertices[4].texture = XMFLOAT2(1.0f, 0.0f);
278 vertices[5].position = XMFLOAT3(right, bottom, 0.0f);
279 vertices[5].texture = XMFLOAT2(1.0f, 1.0f);
282 result = deviceContent->Map(m_vertexBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
289 dataPtr = (VertexType*)mappedResource.pData;
292 memcpy(dataPtr, (
void*)vertices, (
sizeof(VertexType) * m_vertexCount));
295 deviceContent->Unmap(m_vertexBuffer, 0);
308void sprite_class::RenderBuffers(ID3D11DeviceContext* deviceContext)
315 stride =
sizeof(VertexType);
319 deviceContext->IASetVertexBuffers(0, 1, &m_vertexBuffer, &stride, &offset);
322 deviceContext->IASetIndexBuffer(m_indexBuffer, DXGI_FORMAT_R32_UINT, 0);
325 deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
330bool sprite_class::LoadTextures(ID3D11Device* device, ID3D11DeviceContext* deviceContext,
char* filename)
332 std::string textureFilename(256,
'0');
347 fin >> m_textureCount;
356 for (i = 0; i < m_textureCount; i++)
360 while (
input !=
'\n')
362 textureFilename[j] =
input;
366 textureFilename[j] =
'\0';
369 result = m_Textures[i].Initialize(device, deviceContext, textureFilename);
380 m_cycleTime = m_cycleTime * 0.001f;
386 m_bitmapWidth = m_Textures[0].GetWidth();
387 m_bitmapHeight = m_Textures[0].GetHeight();
390 m_currentTexture = 0;
395void sprite_class::ReleaseTextures()
403 for (i = 0; i < m_textureCount; i++)
405 m_Textures[i].Shutdown();
416void sprite_class::SetRenderLocation(
int x,
int y)