Skip to content

Commit 3d425d2

Browse files
authored
Merge pull request #21 from lr8soft/dev-y
v0.28x
2 parents 9da3ae0 + 0b7fdd8 commit 3d425d2

24 files changed

Lines changed: 613 additions & 128 deletions

.idea/workspace.xml

Lines changed: 8 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python2D/Python2D.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,11 @@
141141
<ClCompile Include="XCCore\Bullet\BulletHelper.cpp" />
142142
<ClCompile Include="XCCore\Bullet\CircleTypeBullet.cpp" />
143143
<ClCompile Include="XCCore\Bullet\RectangleTypeBullet.cpp" />
144+
<ClCompile Include="XCCore\Enemy\EnemyObject.cpp" />
144145
<ClCompile Include="XCCore\Task\Task.cpp" />
145146
<ClCompile Include="XCCore\Task\TaskDispatcher.cpp" />
146147
<ClCompile Include="XCCore\Task\TaskHelper.cpp" />
148+
<ClCompile Include="XCCore\Task\TaskEnemy.cpp" />
147149
<ClCompile Include="XCCore\Task\TaskInsideUnit.cpp" />
148150
<ClCompile Include="XCCore\UserInterface\CoverInterface.cpp" />
149151
<ClCompile Include="XCCore\UserInterface\GameInfoInterface.cpp" />
@@ -185,9 +187,11 @@
185187
<ClInclude Include="XCCore\Bullet\BulletHelper.h" />
186188
<ClInclude Include="XCCore\Bullet\CircleTypeBullet.h" />
187189
<ClInclude Include="XCCore\Bullet\RectangleTypeBullet.h" />
190+
<ClInclude Include="XCCore\Enemy\EnemyObject.h" />
188191
<ClInclude Include="XCCore\Task\Task.h" />
189192
<ClInclude Include="XCCore\Task\TaskDispatcher.h" />
190193
<ClInclude Include="XCCore\Task\TaskHelper.h" />
194+
<ClInclude Include="XCCore\Task\TaskEnemy.h" />
191195
<ClInclude Include="XCCore\Task\TaskInsideUnit.h" />
192196
<ClInclude Include="XCCore\UserInterface\CoverInterface.h" />
193197
<ClInclude Include="XCCore\UserInterface\GameInfoInterface.h" />

Python2D/Python2D.vcxproj.filters

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
<Filter Include="XCCore\XCAudio">
4141
<UniqueIdentifier>{d0df81fa-abea-42c1-a3d3-a689a213969e}</UniqueIdentifier>
4242
</Filter>
43+
<Filter Include="XCCore\Enemy">
44+
<UniqueIdentifier>{2e419218-6347-4310-bc9f-14bf80549af2}</UniqueIdentifier>
45+
</Filter>
4346
</ItemGroup>
4447
<ItemGroup>
4548
<ClCompile Include="util\ConfigManager.cpp">
@@ -156,6 +159,12 @@
156159
<ClCompile Include="XCCore\XCRender\RenderManager.cpp">
157160
<Filter>XCCore\XCRender</Filter>
158161
</ClCompile>
162+
<ClCompile Include="XCCore\Enemy\EnemyObject.cpp">
163+
<Filter>XCCore\Enemy</Filter>
164+
</ClCompile>
165+
<ClCompile Include="XCCore\Task\TaskEnemy.cpp">
166+
<Filter>XCCore\Task</Filter>
167+
</ClCompile>
159168
</ItemGroup>
160169
<ItemGroup>
161170
<ClInclude Include="util\ConfigManager.h">
@@ -289,5 +298,11 @@
289298
<ClInclude Include="XCCore\XCRender\RenderObject.h">
290299
<Filter>XCCore\XCRender</Filter>
291300
</ClInclude>
301+
<ClInclude Include="XCCore\Enemy\EnemyObject.h">
302+
<Filter>XCCore\Enemy</Filter>
303+
</ClInclude>
304+
<ClInclude Include="XCCore\Task\TaskEnemy.h">
305+
<Filter>XCCore\Task</Filter>
306+
</ClInclude>
292307
</ItemGroup>
293308
</Project>

Python2D/XCCore/Bullet/Bullet.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ class Bullet:public RenderObject {
6767
else {
6868
float renderWidth = scaleX * XCFrameInfo::FrameRight;
6969
float renderHeight = scaleY * XCFrameInfo::FrameTop;
70-
if (renderY + renderHeight > frameHeight || renderY + renderHeight< -frameHeight
71-
|| renderX + renderWidth > frameWidth || renderX + renderWidth < -frameWidth) {
70+
if (renderY - renderHeight > frameHeight || renderY + renderHeight< -frameHeight
71+
|| renderX - renderWidth > frameWidth || renderX + renderWidth < -frameWidth) {
7272
return true;
7373
}
7474
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#include "EnemyObject.h"
2+
#include <GL3/gl3w.h>
3+
#include "../../XCFrameInfo.h"
4+
5+
EnemyObject::EnemyObject(IRenderHelper *ptr, glm::vec2 dInfo, glm::vec3 sInfo, glm::vec2 sbInfo, glm::vec2 wInfo,
6+
glm::vec3 iCoord, float v, float a, float agle, float agleA, int type)
7+
{
8+
imageHelper = ptr;
9+
divideInfo = dInfo;
10+
scaleInfo = sInfo;
11+
standbyInfo = sbInfo;
12+
walkInfo = wInfo;
13+
NowPosition = iCoord;
14+
15+
velocity = v;
16+
acceleration = a;
17+
angle = agle;
18+
angleAcceleration = agleA;
19+
20+
colorType = type;
21+
22+
23+
//set as enemytype
24+
setCurrentType(EnemyType);
25+
}
26+
27+
void EnemyObject::Init()
28+
{
29+
if ((angle == 0 && velocity == 0) || angle == 270.0f || angle == 90.0f) {
30+
nowTexIndex = standbyInfo[0];
31+
}
32+
else {
33+
nowTexIndex = walkInfo[0];
34+
}
35+
}
36+
37+
void EnemyObject::Render()
38+
{
39+
timer.Tick();
40+
float deltaTime = timer.getDeltaFrame();
41+
float pi = 3.1415926535f;
42+
NowPosition[0] += velocity * cos(angle / 180.0f * pi) * deltaTime;
43+
NowPosition[1] += velocity * sin(angle / 180.0f * pi) * deltaTime;
44+
angle += angleAcceleration * deltaTime;
45+
velocity += acceleration * deltaTime;
46+
47+
glEnable(GL_BLEND);
48+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
49+
bool isAnti = false;
50+
if ((angle == 0 && velocity == 0) || angle == 270.0f || angle == 90.0f) {
51+
if (nowTexIndex < standbyInfo[1])
52+
nowTexIndex += 8.0f * deltaTime;
53+
else
54+
nowTexIndex = standbyInfo[0];
55+
}
56+
else {
57+
if (nowTexIndex < walkInfo[1])
58+
nowTexIndex += 8.0f * deltaTime;
59+
else
60+
nowTexIndex = walkInfo[0];
61+
62+
if (angle >= 90.0f && angle <= 270.0f) {
63+
isAnti = true;
64+
}
65+
}
66+
67+
imageHelper->Render(NowPosition, glm::vec4(1.0f), glm::radians(isAnti ? 180.0f : 0.0f), glm::vec3(0, 1, 0), scaleInfo,
68+
IRenderHelper::GetSpecificTexWithRate(XCFrameInfo::FrameRight, XCFrameInfo::FrameTop, divideInfo[0], divideInfo[1], (int)nowTexIndex, colorType));
69+
70+
glDisable(GL_BLEND);
71+
72+
float frameWidth = XCFrameInfo::FrameRight, frameHeight = XCFrameInfo::FrameTop;
73+
float renderWidth = scaleInfo[0] * XCFrameInfo::FrameRight;
74+
float renderHeight = scaleInfo[1] * XCFrameInfo::FrameTop;
75+
float renderX = NowPosition[0] * frameWidth, renderY = NowPosition[1] * frameHeight;
76+
if (renderY - renderHeight > frameHeight || renderY + renderHeight< -frameHeight
77+
|| renderX - renderWidth > frameWidth || renderX + renderWidth < -frameWidth) {
78+
isWorkFinish = true;
79+
}
80+
}
81+
82+
void EnemyObject::Release()
83+
{
84+
imageHelper->Release();
85+
delete imageHelper;
86+
}
87+
88+
glm::vec3 EnemyObject::getNowPosition()
89+
{
90+
return NowPosition;
91+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#pragma once
2+
#ifndef _ENEMY_OBJECT_H_
3+
#define _ENEMY_OBJECT_H_
4+
#include "../XCRender/RenderObject.h"
5+
#include "../XCRender/IRenderHelper.h"
6+
#include "../../util/GameTimer.h"
7+
#include <glm/glm.hpp>
8+
class EnemyObject :public RenderObject {
9+
private:
10+
XCGameTimer timer;
11+
IRenderHelper* imageHelper = nullptr;
12+
glm::vec2 divideInfo;
13+
glm::vec3 scaleInfo;
14+
glm::vec2 standbyInfo;
15+
glm::vec2 walkInfo;
16+
glm::vec3 NowPosition;
17+
int colorType; float nowTexIndex = 0;
18+
float velocity = 0.0f, acceleration = 0.0f, angle = 0.0f, angleAcceleration = 0.0f;
19+
public:
20+
EnemyObject(IRenderHelper*, glm::vec2 divideInfo, glm::vec3 scaleInfo, glm::vec2 standbyInfo, glm::vec2 walkInfo,
21+
glm::vec3 initCoord, float velocity, float acceleration, float angle, float angleAcceleration, int type);
22+
virtual void Init() override;
23+
virtual void Render() override;
24+
virtual void Release() override;
25+
26+
glm::vec3 getNowPosition();
27+
};
28+
#endif

Python2D/XCCore/Task/Task.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ void Task::TaskInit()
2020
{
2121
if (!taskIsInit) {
2222
TaskDispatcher::addTask(targetUUID);
23+
auto iterBegin = subUnitGroup.begin();
24+
auto iterEnd = subUnitGroup.end();
25+
for (auto unit = iterBegin; unit != iterEnd; unit++) {
26+
(*unit)->UnitInit();
27+
}
2328
taskIsInit = true;
2429
}
2530
}

Python2D/XCCore/Task/Task.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ class Task {
1717
public:
1818
/*while taskType==TaskWait, the task will wait for target task to end and start.
1919
repeatTime == -1 means task will work repeatedly.*/
20-
Task(std::string taskUuid, std::string targetTaskUuid, int repeatTime = -1, int intervalFrame = 0);
20+
Task(std::string taskUuid, std::string targetTaskUuid, int repeatTime, int intervalFrame);
2121
void addSubUnit(TaskInsideUnit* unit);
2222

23-
void TaskInit();
24-
void TaskWork();
25-
void TaskRelease();
23+
virtual void TaskInit();
24+
virtual void TaskWork();
25+
virtual void TaskRelease();
2626

2727
bool getTaskFinish();
2828
bool getTaskInit();

Python2D/XCCore/Task/TaskEnemy.cpp

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#include "TaskEnemy.h"
2+
#include "../XCRender/XCImageHelper.h"
3+
#include "../XCRender/RenderManager.h"
4+
#include "TaskDispatcher.h"
5+
TaskEnemy::TaskEnemy(std::string taskUuid, std::string targetTaskUuid, int repeatTime, int intervalFrame,
6+
std::string enemyImage, glm::vec2 dInfo, glm::vec3 sInfo, glm::vec2 sbInfo, glm::vec2 wInfo,
7+
glm::vec3 iCoord, float v, float a, float agle, float agleA, int type, float hp):Task(taskUuid, targetTaskUuid, repeatTime, intervalFrame)
8+
{
9+
imagePath = enemyImage;
10+
divideInfo = dInfo;
11+
scaleInfo = sInfo;
12+
standbyInfo = sbInfo;
13+
walkInfo = wInfo;
14+
NowPosition = iCoord;
15+
16+
velocity = v;
17+
acceleration = a;
18+
angle = agle;
19+
angleAcceleration = agleA;
20+
21+
colorType = type;
22+
nowLife = hp;
23+
}
24+
25+
void TaskEnemy::TaskInit()
26+
{
27+
if (!taskIsInit) {
28+
TaskDispatcher::addTask(targetUUID);
29+
auto iterBegin = subUnitGroup.begin();
30+
auto iterEnd = subUnitGroup.end();
31+
for (auto unit = iterBegin; unit != iterEnd; unit++) {
32+
(*unit)->UnitInit();
33+
}
34+
35+
XCImageHelper *image = new XCImageHelper(imagePath, true);
36+
enemyImage = new EnemyObject(image, divideInfo, scaleInfo, standbyInfo, walkInfo,
37+
NowPosition, velocity, acceleration, angle, angleAcceleration, colorType);
38+
enemyImage->Init();
39+
taskIsInit = true;
40+
}
41+
42+
43+
}
44+
45+
void TaskEnemy::TaskWork()
46+
{
47+
if (taskNowDurationFrame < taskDurationFrame || taskDurationFrame < 0) {
48+
if (taskAccumlateTime >= taskIntervalFrame) {
49+
if (!haveImageAddInQueue) {
50+
RenderManager::getInstance()->AddRenderObject(taskUUID, enemyImage);
51+
haveImageAddInQueue = true;
52+
}
53+
else {
54+
NowPosition = enemyImage->getNowPosition();
55+
}
56+
auto iterBegin = subUnitGroup.begin();
57+
auto iterEnd = subUnitGroup.end();
58+
for (auto unit = iterBegin; unit != iterEnd; unit++) {
59+
if (!(*unit)->IsAddToQueue()) {
60+
(*unit)->setBulletInitCoord(NowPosition[0], NowPosition[1], NowPosition[2]);
61+
(*unit)->UnitWork();
62+
}
63+
if ((*unit)->IsAddToQueue()) {//release here
64+
(*unit)->UnitRelease();
65+
delete (*unit);
66+
if (std::next(unit) == subUnitGroup.end()) {
67+
subUnitGroup.erase(unit);
68+
break;
69+
}
70+
else {
71+
unit = subUnitGroup.erase(unit);
72+
iterEnd = subUnitGroup.end();
73+
}
74+
}
75+
}
76+
if ( (subUnitGroup.empty() && RenderManager::getInstance()->CheckRenderComplete(taskUUID)) || enemyImage->getIsTerminate())
77+
taskFinish = true;
78+
taskNowDurationFrame++;
79+
}
80+
taskAccumlateTime++;
81+
}
82+
else {
83+
taskFinish = true;
84+
}
85+
}
86+
87+
void TaskEnemy::TaskRelease()
88+
{
89+
TaskDispatcher::updateTask(taskUUID, true);
90+
auto iterBegin = subUnitGroup.begin();
91+
auto iterEnd = subUnitGroup.end();
92+
for (auto unit = iterBegin; unit != iterEnd; unit++) {
93+
(*unit)->UnitRelease();
94+
delete (*unit);
95+
}
96+
RenderManager::getInstance()->CleanRenderObject(taskUUID);
97+
subUnitGroup.clear();
98+
99+
if (!haveImageAddInQueue) {
100+
enemyImage->Release();
101+
delete enemyImage;
102+
}
103+
taskIsInit = false;
104+
}
105+
106+
107+
108+
109+

0 commit comments

Comments
 (0)