Skip to content

Commit c6db3c5

Browse files
authored
Merge pull request #16 from lr8soft/dev-y
dev-y
2 parents 1c01f72 + 06d4140 commit c6db3c5

34 files changed

Lines changed: 617 additions & 96 deletions

.idea/workspace.xml

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python2D/Python2D.vcxproj

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,12 @@
143143
<ClCompile Include="XCCore\UserInterface\GameInfoInterface.cpp" />
144144
<ClCompile Include="XCCore\XCCollide\CollideHelper.cpp" />
145145
<ClCompile Include="XCCore\XCCollide\CollideInfo.cpp" />
146+
<ClCompile Include="XCCore\XCRender\SpecialEffect\ExplodeParticleGroupSE.cpp" />
147+
<ClCompile Include="XCCore\XCRender\SpecialEffect\XCParticle.cpp" />
146148
<ClCompile Include="XCCore\XCRender\XCFont.cpp" />
147149
<ClCompile Include="XCCore\Item\Item.cpp" />
148150
<ClCompile Include="XCCore\Item\Player.cpp" />
149-
<ClCompile Include="XCCore\XCRender\DecisionPointSE.cpp" />
151+
<ClCompile Include="XCCore\XCRender\SpecialEffect\DecisionPointSE.cpp" />
150152
<ClCompile Include="XCCore\XCRender\IRenderHelper.cpp" />
151153
<ClCompile Include="XCCore\XCRender\RenderManager.cpp" />
152154
<ClCompile Include="XCCore\XCRender\XCAdvImageHelper.cpp" />
@@ -180,13 +182,15 @@
180182
<ClInclude Include="XCCore\UserInterface\IUserInterface.h" />
181183
<ClInclude Include="XCCore\XCCollide\CollideHelper.h" />
182184
<ClInclude Include="XCCore\XCCollide\CollideInfo.h" />
185+
<ClInclude Include="XCCore\XCRender\SpecialEffect\ExplodeParticleGroupSE.h" />
186+
<ClInclude Include="XCCore\XCRender\SpecialEffect\XCParticle.h" />
183187
<ClInclude Include="XCCore\XCRender\XCFont.h" />
184188
<ClInclude Include="XCCore\Item\Item.h" />
185189
<ClInclude Include="XCCore\Item\Player.h" />
186190
<ClInclude Include="XCCore\XCRender\BlendHelper.h" />
187-
<ClInclude Include="XCCore\XCRender\DecisionPointSE.h" />
191+
<ClInclude Include="XCCore\XCRender\SpecialEffect\DecisionPointSE.h" />
188192
<ClInclude Include="XCCore\XCRender\IRenderHelper.h" />
189-
<ClInclude Include="XCCore\XCRender\ISpecialEffect.h" />
193+
<ClInclude Include="XCCore\XCRender\SpecialEffect\ISpecialEffect.h" />
190194
<ClInclude Include="XCCore\XCRender\RenderManager.h" />
191195
<ClInclude Include="XCCore\XCRender\XCAdvImageHelper.h" />
192196
<ClInclude Include="XCCore\XCRender\XCColorBlockHelper.h" />

Python2D/Python2D.vcxproj.filters

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,21 @@
120120
<ClCompile Include="XCCore\XCRender\XCFont.cpp">
121121
<Filter>XCCore\XCRender</Filter>
122122
</ClCompile>
123-
<ClCompile Include="XCCore\XCRender\DecisionPointSE.cpp">
124-
<Filter>XCCore\XCRender\SpecialEffect</Filter>
125-
</ClCompile>
126123
<ClCompile Include="XCCore\XCCollide\CollideHelper.cpp">
127124
<Filter>XCCore\XCCollide</Filter>
128125
</ClCompile>
129126
<ClCompile Include="XCCore\XCCollide\CollideInfo.cpp">
130127
<Filter>XCCore\XCCollide</Filter>
131128
</ClCompile>
129+
<ClCompile Include="XCCore\XCRender\SpecialEffect\DecisionPointSE.cpp">
130+
<Filter>XCCore\XCRender\SpecialEffect</Filter>
131+
</ClCompile>
132+
<ClCompile Include="XCCore\XCRender\SpecialEffect\XCParticle.cpp">
133+
<Filter>XCCore\XCRender\SpecialEffect</Filter>
134+
</ClCompile>
135+
<ClCompile Include="XCCore\XCRender\SpecialEffect\ExplodeParticleGroupSE.cpp">
136+
<Filter>XCCore\XCRender\SpecialEffect</Filter>
137+
</ClCompile>
132138
</ItemGroup>
133139
<ItemGroup>
134140
<ClInclude Include="util\ConfigManager.h">
@@ -226,14 +232,20 @@
226232
<ClInclude Include="XCCore\XCCollide\CollideHelper.h">
227233
<Filter>XCCore\XCCollide</Filter>
228234
</ClInclude>
229-
<ClInclude Include="XCCore\XCRender\ISpecialEffect.h">
235+
<ClInclude Include="XCCore\XCCollide\CollideInfo.h">
236+
<Filter>XCCore\XCCollide</Filter>
237+
</ClInclude>
238+
<ClInclude Include="XCCore\XCRender\SpecialEffect\DecisionPointSE.h">
230239
<Filter>XCCore\XCRender\SpecialEffect</Filter>
231240
</ClInclude>
232-
<ClInclude Include="XCCore\XCRender\DecisionPointSE.h">
241+
<ClInclude Include="XCCore\XCRender\SpecialEffect\ISpecialEffect.h">
233242
<Filter>XCCore\XCRender\SpecialEffect</Filter>
234243
</ClInclude>
235-
<ClInclude Include="XCCore\XCCollide\CollideInfo.h">
236-
<Filter>XCCore\XCCollide</Filter>
244+
<ClInclude Include="XCCore\XCRender\SpecialEffect\XCParticle.h">
245+
<Filter>XCCore\XCRender\SpecialEffect</Filter>
246+
</ClInclude>
247+
<ClInclude Include="XCCore\XCRender\SpecialEffect\ExplodeParticleGroupSE.h">
248+
<Filter>XCCore\XCRender\SpecialEffect</Filter>
237249
</ClInclude>
238250
</ItemGroup>
239251
</Project>

Python2D/XCCore/Bullet/Bullet.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ class Bullet {
88

99
float NowPosition[3] = { 0.0f, 0.0f, 0.0f };
1010

11-
bool isWorkFinish = false;
11+
bool isWorkFinish = false, isFinishTime = false;
1212

13-
void checkReboundOrOverflow(int *reBoundTimePointer, float *angle, float scaleX, float scaleY)
13+
bool checkReboundOrOverflow(int *reBoundTimePointer, float *angle, float scaleX, float scaleY)
1414
{
1515
float frameWidth = XCFrameInfo::FrameRight;
1616
float frameHeight = XCFrameInfo::FrameTop;
@@ -66,22 +66,29 @@ class Bullet {
6666
float renderHeight = scaleY * XCFrameInfo::FrameTop;
6767
if (renderY + renderHeight > frameHeight || renderY + renderHeight< -frameHeight
6868
|| renderX + renderWidth > frameWidth || renderX + renderWidth < -frameWidth) {
69-
isWorkFinish = true;
69+
return true;
7070
}
71-
7271
}
7372
}
73+
return false;
7474
}
7575
public:
7676
virtual void BulletInit() = 0;
7777
virtual void BulletRender() = 0;
7878
virtual void BulletRelease() = 0;
7979

8080
virtual bool BulletCollideWithPoint(float x, float y) = 0;
81-
bool getIsFinish() {
81+
82+
virtual void startFinishEffect() = 0;
83+
84+
bool getIsTerminate() {
8285
return isWorkFinish;
8386
}
8487

88+
bool getIsFinishTime() {
89+
return isFinishTime;
90+
}
91+
8592
void setPosition(float x, float y, float z) {
8693
NowPosition[0] = x;
8794
NowPosition[1] = y;

Python2D/XCCore/Bullet/BulletHelper.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
#include "BulletHelper.h"
22
#include "CircleTypeBullet.h"
33
#include "../../XCInterpreter/ScriptLoader.h"
4-
Bullet * BulletHelper::getNewBulletObject(std::string bulletImage,std::string bulletType, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 initCoord
5-
, float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer)
4+
Bullet * BulletHelper::getNewBulletObject(std::string bulletImage,std::string bulletType, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 collideSize,
5+
glm::vec3 initCoord, float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer,
6+
int particleDensity, float particleFinishTime, float particleVelocity, float particleSize, glm::vec4 particleColor)
67
{
78
Bullet *bullet = nullptr;
89
if (bulletType == "circleTypeBullet") {
9-
bullet = new CircleTypeBullet(bulletImage, divideInfo, scaleInfo, initCoord, velocity, acceleration, angle, increateAngle, reboundTime, aimPlayer);
10+
bullet = new CircleTypeBullet(bulletImage, divideInfo, scaleInfo, collideSize, initCoord, velocity, acceleration, angle, increateAngle, reboundTime, aimPlayer,
11+
particleDensity, particleFinishTime, particleVelocity, particleSize, particleColor);
1012
}
1113
return bullet;
1214
}
@@ -19,9 +21,11 @@ Bullet * BulletHelper::parseBulletObject(PyObject * bulletObject)
1921
auto imageInfo = PyObject_CallMethod(bulletObject, "_cpp_getInitRenderInfo", NULL);
2022
auto bulletGenerateInfo = PyObject_CallMethod(bulletObject, "_cpp_getGenerateInfo", NULL);
2123
auto bulletCoordInfo = PyObject_CallMethod(bulletObject, "_cpp_getInitCoord", NULL);
24+
auto bulletReleaseInfo = PyObject_CallMethod(bulletObject, "_cpp_getReleaseParticleInfo", NULL);
2225

23-
const char* bulletImage, *bulletType; int divideInfo[4]; float scaleInfo[3];
24-
PyArg_ParseTuple(imageInfo, "ss(iiii)(fff)", &bulletImage, &bulletType, &divideInfo[0], &divideInfo[1], &divideInfo[2], &divideInfo[3], &scaleInfo[0], &scaleInfo[1], &scaleInfo[2]);
26+
const char* bulletImage, *bulletType; int divideInfo[4]; float scaleInfo[3], collideSize[3];
27+
PyArg_ParseTuple(imageInfo, "ss(iiii)(fff)(fff)", &bulletImage, &bulletType, &divideInfo[0], &divideInfo[1], &divideInfo[2], &divideInfo[3],
28+
&scaleInfo[0], &scaleInfo[1], &scaleInfo[2], &collideSize[0], &collideSize[1], &collideSize[2]);
2529

2630

2731
float velocity, acceleration, angle, increaseAngle; int aimPlayer, reboundTime;
@@ -30,9 +34,14 @@ Bullet * BulletHelper::parseBulletObject(PyObject * bulletObject)
3034
float initCoord[3];
3135
PyArg_ParseTuple(bulletCoordInfo, "fff", &initCoord[0], &initCoord[1], &initCoord[2]);
3236

33-
bullet = BulletHelper::getNewBulletObject(bulletImage, bulletType, glm::vec4(divideInfo[0], divideInfo[1], divideInfo[2], divideInfo[3])
34-
, glm::vec3(scaleInfo[0], scaleInfo[1], scaleInfo[2]), glm::vec3(initCoord[0], initCoord[1], initCoord[2])
35-
, velocity, acceleration, angle, increaseAngle, reboundTime, aimPlayer);
37+
int particleDensity; float lifeTime, particleVelocity, particleSize; float particleColor[4];
38+
PyArg_ParseTuple(bulletReleaseInfo, "ifff(ffff)", &particleDensity, &lifeTime, &particleVelocity, &particleSize,
39+
&particleColor[0], &particleColor[1], &particleColor[2], &particleColor[3]);
40+
41+
bullet = BulletHelper::getNewBulletObject(bulletImage, bulletType, glm::vec4(divideInfo[0], divideInfo[1], divideInfo[2], divideInfo[3]),
42+
glm::vec3(scaleInfo[0], scaleInfo[1], scaleInfo[2]),glm::vec3(collideSize[0], collideSize[1], collideSize[2]),
43+
glm::vec3(initCoord[0], initCoord[1], initCoord[2]), velocity, acceleration, angle, increaseAngle, reboundTime, aimPlayer,
44+
particleDensity, lifeTime, particleVelocity,particleSize, glm::vec4(particleColor[0], particleColor[1], particleColor[2], particleColor[3]));
3645
if (bullet != nullptr) {
3746
bullet->BulletInit();
3847
}

Python2D/XCCore/Bullet/BulletHelper.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
#include <Python.h>
66
class BulletHelper {
77
private:
8-
static Bullet* getNewBulletObject(std::string bulletImage,std::string bulletType, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 initCoord
9-
, float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer);
8+
static Bullet* getNewBulletObject(std::string bulletImage,std::string bulletType, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 collideSize,
9+
glm::vec3 initCoord, float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer,
10+
int particleDensity, float particleFinishTime, float particleVelocity, float particleSize, glm::vec4 particleColor);
1011
public:
1112
static Bullet* parseBulletObject(PyObject* taskUnitItem);
1213
};

Python2D/XCCore/Bullet/CircleTypeBullet.cpp

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,39 @@
22
#include "../../XCFrameInfo.h"
33
#include <GL3/gl3w.h>
44
#include <iostream>
5-
CircleTypeBullet::CircleTypeBullet(std::string bulletImagePath, glm::vec4 dInfo, glm::vec3 sInfo, glm::vec3 initCoord, float v, float a, float agl, float incA, int rbTime,bool ap)
5+
CircleTypeBullet::CircleTypeBullet(std::string bulletImagePath, glm::vec4 dInfo, glm::vec3 sInfo, glm::vec3 cSize,glm::vec3 initCoord,
6+
float v, float a, float agl, float incA, int rbTime,bool ap,
7+
int pDensity, float pFinishTime, float pVelocity, float pSize, glm::vec4 pColor)
68
{
9+
//init part
710
imagePath = bulletImagePath;
8-
911
divideInfo = dInfo;
1012
scaleInfo = sInfo;
13+
collideSize = cSize;
1114
NowPosition[0] = initCoord[0];
1215
NowPosition[1] = initCoord[1];
1316
NowPosition[2] = initCoord[2];
17+
//work part
1418
velocity = v;
1519
acceleration = a;
1620
angle = agl;
1721
increaseAngle = incA;
1822
reBoundTime = rbTime;
1923
aimToPlayer = ap;
20-
24+
//release part
25+
particleDensity = pDensity;
26+
particleFinishTime = pFinishTime;
27+
particleVelocity = pVelocity;
28+
particleSize = pSize;
29+
particleColor = pColor;
2130
}
2231

2332
void CircleTypeBullet::BulletInit()
2433
{
2534
if (!isInit) {
2635
image = new XCImageHelper(imagePath, true);
36+
explodeSpecialEffect = new ExplodeParticleSpecialEffect(particleDensity, particleSize, particleFinishTime, particleVelocity, particleColor);
37+
explodeSpecialEffect->SpecialEffectGLInit();
2738
isInit = true;
2839
}
2940
}
@@ -32,27 +43,50 @@ void CircleTypeBullet::BulletRender()
3243
{
3344
if (isInit) {
3445
timer.Tick();
35-
NowPosition[0] += velocity * cos(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
36-
NowPosition[1] += velocity * sin(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
37-
angle += increaseAngle * timer.getDeltaFrame();
38-
velocity += acceleration * timer.getDeltaFrame();
46+
if (!isFinishTime) {
47+
NowPosition[0] += velocity * cos(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
48+
NowPosition[1] += velocity * sin(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
49+
angle += increaseAngle * timer.getDeltaFrame();
50+
velocity += acceleration * timer.getDeltaFrame();
51+
52+
glEnable(GL_BLEND);
53+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
3954

40-
glEnable(GL_BLEND);
41-
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
55+
image->Render(glm::vec3(NowPosition[0], NowPosition[1], NowPosition[2]), glm::vec4(1.0f), glm::radians(angle), glm::vec3(0, 0, 1),
56+
scaleInfo * glm::vec3(XCFrameInfo::FrameRight, XCFrameInfo::FrameTop, 1.0f),
57+
IRenderHelper::GetSpecificTexture(divideInfo[0], divideInfo[1], divideInfo[2], divideInfo[3]));
58+
glDisable(GL_BLEND);
59+
if (Bullet::checkReboundOrOverflow(&reBoundTime, &angle, collideSize[0], collideSize[1])) {//超出边界不渲染结束特效
60+
isWorkFinish = true;
61+
}
62+
}
63+
else {
64+
if (timer.getNowFrame() - nowFinishTime < particleFinishTime) {
65+
explodeSpecialEffect->SpecialEffectCoordInit(glm::vec3(NowPosition[0], NowPosition[1], NowPosition[2]));
66+
explodeSpecialEffect->SpecialEffectRender();
67+
}
68+
else {
69+
isWorkFinish = true;
70+
}
71+
}
4272

43-
image->Render(glm::vec3(NowPosition[0], NowPosition[1], NowPosition[2]), glm::vec4(1.0f), glm::radians(angle), glm::vec3(0, 0, 1),
44-
scaleInfo * glm::vec3(XCFrameInfo::FrameRight,XCFrameInfo::FrameTop,1.0f),
45-
IRenderHelper::GetSpecificTexture(divideInfo[0], divideInfo[1], divideInfo[2], divideInfo[3]));
46-
glDisable(GL_BLEND);
47-
Bullet::checkReboundOrOverflow(&reBoundTime, &angle, scaleInfo[0], scaleInfo[1]);
4873
}
4974
}
75+
76+
void CircleTypeBullet::startFinishEffect()
77+
{
78+
isFinishTime = true;
79+
nowFinishTime = timer.getNowFrame();
80+
}
5081
void CircleTypeBullet::BulletRelease()
5182
{
5283
if (isInit) {
5384
image->Release();
54-
delete image;
85+
explodeSpecialEffect->SpecialEffectRelease();
86+
delete image, explodeSpecialEffect;
5587

88+
image = nullptr;
89+
explodeSpecialEffect = nullptr;
5690
isInit = false;
5791
}
5892
}

Python2D/XCCore/Bullet/CircleTypeBullet.h

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,46 @@
55
#include <glm/glm.hpp>
66
#include "../../util/GameTimer.h"
77
#include "../XCRender/XCImageHelper.h"
8+
#include "../XCRender/SpecialEffect/ExplodeParticleGroupSE.h"
89
class CircleTypeBullet :public Bullet {
910
private:
1011
/*
1112
float velocity = 0.0f, acceleration = 0.0f, angle = 0.0f;
1213
float NowPosition[3] = { 0.0f, 0.0f, 0.0f };
1314
bool isWorkFinish = false;
15+
bool isFinishTime = false;
1416
*/
1517
std::string imagePath;
16-
1718
glm::vec4 divideInfo;
1819
glm::vec3 scaleInfo;
20+
glm::vec3 collideSize;
1921
int reBoundTime = 0;
2022
float velocity = 0.0f, acceleration = 0.0f, angle = 0.0f, increaseAngle = 0.0f;
2123

24+
int particleDensity = 3;
25+
float particleFinishTime = 0.0f, particleVelocity = 0.6f, particleSize = 15.0f;
26+
glm::vec4 particleColor;
27+
28+
float nowFinishTime;
29+
30+
ExplodeParticleSpecialEffect *explodeSpecialEffect;
31+
2232
XCGameTimer timer;
2333
XCImageHelper* image;
2434
bool isInit = false, aimToPlayer = false;
35+
2536
public:
2637
/*#£¡Attention scaleInfo will work both collide and render.
2738
#£¡renderSize: scaleX * widthRate : scaleY * heightRate ,collideSize : scaleX : scaleY*/
28-
CircleTypeBullet(std::string bulletImagePath, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 initCoord
29-
, float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer);
39+
CircleTypeBullet(std::string bulletImagePath, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 collideSize ,glm::vec3 initCoord,
40+
float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer,
41+
int particleDensity, float particleFinishTime, float particleVelocity, float particleSize, glm::vec4 particleColor);
42+
3043
virtual void BulletInit() override;
3144
virtual void BulletRender() override;
3245
virtual void BulletRelease() override;
3346

3447
virtual bool BulletCollideWithPoint(float x, float y) override;
48+
virtual void startFinishEffect() override;
3549
};
3650
#endif

0 commit comments

Comments
 (0)