Skip to content

Commit 6d6ce3d

Browse files
authored
Merge pull request #29 from lr8soft/dev-y
v0.32_update1
2 parents b917944 + e351301 commit 6d6ce3d

18 files changed

Lines changed: 162 additions & 38 deletions

.idea/workspace.xml

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

PythonSTG/XCCore/Attack/NormalStrike.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ void NormalStrike::checkCollisionWithBoss(BossObject * pBoss)
9595
float cornerDistance_sq = pow((distX - width / 2), 2) + pow(distY - height / 2, 2);
9696
if (distX <= (width / 2) || distY <= (height / 2) || cornerDistance_sq <= pow(collisionRadius, 2)) {
9797
ParticleHelper* particleGroup = new ParticleHelper;
98-
particleGroup->addNewParticle(6, 15.0f, 0.6f, 0.4f, glm::vec4(1.0f), glm::vec3(NowPosition[0], NowPosition[1],0.0f));
98+
particleGroup->addNewParticle(6, 12.0f, 0.6f, 0.4f, glm::vec4(1.0f), glm::vec3(NowPosition[0], NowPosition[1],0.0f));
9999
RenderManager::getInstance()->AddRenderObject(ParticleGroupUuid, particleGroup);
100100

101101
pBoss->hurtBossObject(0.2f);
@@ -116,7 +116,7 @@ void NormalStrike::checkCollisionWithEnemy(EnemyObject * pEnemy)
116116
if (enemyPosition[0] <= NowPosition[0] + halfWidth && enemyPosition[0] >= NowPosition[0] - halfWidth){
117117
if (enemyPosition[1] <= NowPosition[1] + halfHeight && enemyPosition[1] >= lastY - halfHeight) {
118118
ParticleHelper* particleGroup = new ParticleHelper;
119-
particleGroup->addNewParticle(6, 15.0f, 0.6f, 0.4f, glm::vec4(1.0f), enemyPosition);
119+
particleGroup->addNewParticle(6, 12.0f, 0.6f, 0.4f, glm::vec4(1.0f), enemyPosition);
120120
RenderManager::getInstance()->AddRenderObject(ParticleGroupUuid, particleGroup);
121121

122122
pEnemy->hurtEnemy(0.2f);

PythonSTG/XCCore/Bullet/BulletHelper.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ Bullet * BulletHelper::getNewBulletObject(std::string bulletImage,std::string bu
1717
particleDensity, particleFinishTime, particleVelocity, particleSize, particleColor);
1818
}
1919
else if (bulletType == "rectangleTypeBullet") {
20-
/*bullet = new RectangleTypeBullet(bulletImage, divideInfo, scaleInfo, collideSize, initCoord, velocity, acceleration, angle, increateAngle, reboundTime, aimPlayer,
21-
particleDensity, particleFinishTime, particleVelocity, particleSize, particleColor);*/
20+
bullet = new RectangleTypeBullet(bulletImage, divideInfo, scaleInfo, collideSize, initCoord, velocity, acceleration, angle, increateAngle, reboundTime, aimPlayer,
21+
particleDensity, particleFinishTime, particleVelocity, particleSize, particleColor);
2222
}
2323
return bullet;
2424
}

PythonSTG/XCCore/Bullet/CircleTypeBullet.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void CircleTypeBullet::Release()
8989
bool CircleTypeBullet::BulletCollideWithPoint(float x, float y,bool &haveGraze)
9090
{
9191
bool value = false;
92-
if (isInit && timer.getAccumlateTime() >=0.1f) {
92+
if (isInit && timer.getAccumlateTime() >=0.2f) {
9393
float distance = (x - NowPosition[0])*(x - NowPosition[0]) + (y - NowPosition[1])*(y - NowPosition[1]);
9494
float parameter = collideSize[0] * collideSize[0];
9595

PythonSTG/XCCore/Bullet/OvalTypeBullet.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,13 @@ void OvalTypeBullet::Release()
9292
bool OvalTypeBullet::BulletCollideWithPoint(float x, float y, bool &haveGraze)
9393
{
9494
bool value = false;
95-
if (isInit && timer.getAccumlateTime() >= 0.1f) {
95+
if (isInit && timer.getAccumlateTime() >= 0.2f) {
9696
x -= NowPosition[0];
9797
y -= NowPosition[1];
9898

99-
float NewX = x * cos(angle) + y * sin(angle);
100-
float NewY = -x * sin(angle) + y * cos(angle);
99+
float theta = glm::radians(angle);
100+
float NewX = x * cos(theta) + y * sin(theta);
101+
float NewY = -x * sin(theta) + y * cos(theta);
101102

102103
float distance = pow(NewX, 2) + pow(NewY, 2);
103104
float ovalParameter = pow(NewX, 2) / pow(collideSize.x, 2) + pow(NewY, 2) / pow(collideSize.y, 2);

PythonSTG/XCCore/Bullet/RectangleTypeBullet.cpp

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
#include "RectangleTypeBullet.h"
22
#include "../../XCFrameInfo.h"
3+
#include "../XCCollide/CollideInfo.h"
4+
#include "../XCRender/ParticleHelper.h"
5+
#include "../XCRender/RenderManager.h"
36
#include <GL3/gl3w.h>
47
#include <iostream>
5-
RectangleTypeBullet::RectangleTypeBullet(std::string bulletImagePath, glm::vec4 dInfo, glm::vec3 sInfo,glm::vec3 cSize ,glm::vec3 initCoord, float v, float a, float agl, float incA, int rbTime, bool ap)
8+
RectangleTypeBullet::RectangleTypeBullet(std::string bulletImagePath, glm::vec4 dInfo, glm::vec3 sInfo,glm::vec3 cSize ,glm::vec3 initCoord,
9+
float v, float a, float agl, float incA, int rbTime, bool ap,
10+
int pDensity, float pFinishTime, float pVelocity, float pSize, glm::vec4 pColor)
611
{
712
imagePath = bulletImagePath;
813

@@ -19,6 +24,12 @@ RectangleTypeBullet::RectangleTypeBullet(std::string bulletImagePath, glm::vec4
1924
increaseAngle = incA;
2025
reBoundTime = rbTime;
2126
aimToPlayer = ap;
27+
//release part
28+
particleDensity = pDensity;
29+
particleFinishTime = pFinishTime;
30+
particleVelocity = pVelocity;
31+
particleSize = pSize;
32+
particleColor = pColor;
2233

2334
//define current type
2435
setCurrentType(BulletType);
@@ -36,10 +47,9 @@ void RectangleTypeBullet::Render()
3647
{
3748
if (isInit) {
3849
timer.Tick();
39-
NowPosition[0] += velocity * cos(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
40-
NowPosition[1] += velocity * sin(angle / 180.0f * 3.1415926f) * timer.getDeltaFrame();
41-
angle += increaseAngle * timer.getDeltaFrame();
42-
velocity += acceleration * timer.getDeltaFrame();
50+
auto pPlayerHelper1 = CollideInfo::getCollideHelper();
51+
float* playerPos = (pPlayerHelper1 == nullptr ? nullptr : pPlayerHelper1->getPlayerPosition());
52+
Bullet::solveBulletMovement(aimToPlayer, playerPos, velocity, angle, acceleration, increaseAngle, timer.getDeltaFrame());
4353

4454
glEnable(GL_BLEND);
4555
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
@@ -63,11 +73,41 @@ void RectangleTypeBullet::Release()
6373
}
6474
}
6575

66-
bool RectangleTypeBullet::BulletCollideWithPoint(float x, float y, bool& haveGraze)
76+
bool RectangleTypeBullet::BulletCollideWithPoint(float x, float y, bool &haveGraze)
6777
{
68-
return false;
78+
bool value = false;
79+
if (isInit && timer.getAccumlateTime() >= 0.2f) {
80+
x -= NowPosition[0];
81+
y -= NowPosition[1];
82+
83+
float theta = glm::radians(angle);
84+
float NewX = x * cos(theta) + y * sin(theta);
85+
float NewY = -x * sin(theta) + y * cos(theta);
86+
87+
float distance = pow(NewX, 2) + pow(NewY, 2);
88+
89+
if (!haveCheckGraze && distance <= CollideInfo::getGrazeDistance()) {
90+
haveGraze = true;
91+
haveCheckGraze = true;
92+
}
93+
float parameterX = collideSize.x;
94+
float parameterY = collideSize.y;
95+
if (NewX >= -parameterX && NewX <= parameterX) {
96+
if (NewY >= -parameterY && NewY <= parameterY) {
97+
value = true;
98+
}
99+
}
100+
101+
}
102+
103+
return value;
69104
}
70105

71106
void RectangleTypeBullet::setBulletTerminate()
72107
{
108+
ParticleHelper* particleGroup = new ParticleHelper;
109+
particleGroup->addNewParticle(particleDensity, particleSize, particleVelocity, particleFinishTime, particleColor,
110+
glm::vec3(NowPosition[0], NowPosition[1], NowPosition[2]));
111+
RenderManager::getInstance()->AddRenderObject(ParticleGroupUuid, particleGroup);
112+
isWorkFinish = true;
73113
}

PythonSTG/XCCore/Bullet/RectangleTypeBullet.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,19 @@ class RectangleTypeBullet :public Bullet {
2020
int reBoundTime = 0;
2121
float velocity = 0.0f, acceleration = 0.0f, angle = 0.0f, increaseAngle = 0.0f, angleRadius = 0.0f;
2222

23+
int particleDensity = 3;
24+
float particleFinishTime = 0.0f, particleVelocity = 0.6f, particleSize = 15.0f;
25+
glm::vec4 particleColor;
26+
2327
XCGameTimer timer;
2428
XCImageHelper* image;
25-
bool aimToPlayer = false;
29+
bool aimToPlayer = false, haveCheckGraze = false;
2630
public:
2731
/*#! Attention scaleInfo will work both collide and render.
2832
#! renderSize: scaleX * widthRate : scaleY * heightRate ,collideSize : scaleX : scaleY*/
2933
RectangleTypeBullet(std::string bulletImagePath, glm::vec4 divideInfo, glm::vec3 scaleInfo, glm::vec3 collideSize, glm::vec3 initCoord,
30-
float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer);
34+
float velocity, float acceleration, float angle, float increateAngle, int reboundTime, bool aimPlayer,
35+
int particleDensity, float particleFinishTime, float particleVelocity, float particleSize, glm::vec4 particleColor);
3136
virtual void Init() override;
3237
virtual void Render() override;
3338
virtual void Release() override;

PythonSTG/XCCore/Enemy/EnemyObject.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void EnemyObject::hurtEnemy(float damage)
119119
else {
120120
AudioHelper::playFromBuffer(deadEffect.wavBuffer);
121121
ParticleHelper* particleGroup = new ParticleHelper;
122-
particleGroup->addNewParticle(20, 15.0f, 1.0f, 0.6f, glm::vec4(1.0f), NowPosition);
122+
particleGroup->addNewParticle(20, 12.0f, 1.0f, 0.6f, glm::vec4(1.0f), NowPosition);
123123
RenderManager::getInstance()->AddRenderObject(ParticleGroupUuid, particleGroup);
124124

125125
currentHealth = 0;

PythonSTG/XCCore/XCRender/RenderManager.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ void RenderManager::RenderWork()
7272
}
7373

7474
}
75-
std::unordered_multimap<std::string, RenderObject*>::iterator renderBegin = renderObjectList.begin();
76-
std::unordered_multimap<std::string, RenderObject*>::iterator renderEnd = renderObjectList.end();
75+
std::multimap<std::string, RenderObject*>::iterator renderBegin = renderObjectList.begin();
76+
std::multimap<std::string, RenderObject*>::iterator renderEnd = renderObjectList.end();
7777
for (auto object = renderBegin; object != renderEnd; object++) {
7878
RenderObject *renderObject = object->second;
7979
if (!renderObject->getIsTerminate()) {
@@ -170,8 +170,8 @@ void RenderManager::solveAsyncCommand()
170170
{
171171
case RenderManager::cRenderObject:
172172
{
173-
std::unordered_multimap<std::string, RenderObject*>::iterator targetBegin = renderObjectList.find(uuid);
174-
std::unordered_multimap<std::string, RenderObject*>::iterator targetEnd = renderObjectList.end();
173+
std::map<std::string, RenderObject*>::iterator targetBegin = renderObjectList.find(uuid);
174+
std::map<std::string, RenderObject*>::iterator targetEnd = renderObjectList.end();
175175
for (auto object = targetBegin; object != targetEnd; object = renderObjectList.find(uuid)) {
176176
RenderObject *renderObject = object->second;
177177
renderObject->Release();
@@ -190,8 +190,8 @@ void RenderManager::solveAsyncCommand()
190190
break;
191191
case RenderManager::cAllRenderObject:
192192
{
193-
std::unordered_multimap<std::string, RenderObject*>::iterator renderBegin = renderObjectList.begin();
194-
std::unordered_multimap<std::string, RenderObject*>::iterator renderEnd = renderObjectList.end();
193+
std::map<std::string, RenderObject*>::iterator renderBegin = renderObjectList.begin();
194+
std::map<std::string, RenderObject*>::iterator renderEnd = renderObjectList.end();
195195
for (auto object = renderBegin; object != renderEnd; object++) {
196196
RenderObject *renderObject = object->second;
197197
renderObject->Release();
@@ -203,8 +203,8 @@ void RenderManager::solveAsyncCommand()
203203
break;
204204
case RenderManager::tBullet:
205205
{
206-
std::unordered_multimap<std::string, RenderObject*>::iterator bulletBegin = renderObjectList.begin();
207-
std::unordered_multimap<std::string, RenderObject*>::iterator bulletEnd = renderObjectList.end();
206+
std::map<std::string, RenderObject*>::iterator bulletBegin = renderObjectList.begin();
207+
std::map<std::string, RenderObject*>::iterator bulletEnd = renderObjectList.end();
208208
for (auto object = bulletBegin; object != bulletEnd; object++) {
209209
if (object->first == uuid) {
210210
RenderObject *renderObject = object->second;
@@ -218,8 +218,8 @@ void RenderManager::solveAsyncCommand()
218218
break;
219219
case RenderManager::tAllBullet:
220220
{
221-
std::unordered_multimap<std::string, RenderObject*>::iterator bulletBegin = renderObjectList.begin();
222-
std::unordered_multimap<std::string, RenderObject*>::iterator bulletEnd = renderObjectList.end();
221+
std::map<std::string, RenderObject*>::iterator bulletBegin = renderObjectList.begin();
222+
std::map<std::string, RenderObject*>::iterator bulletEnd = renderObjectList.end();
223223
for (auto object = bulletBegin; object != bulletEnd; object++) {
224224
RenderObject *renderObject = object->second;
225225
if (renderObject->getCurrentType() == RenderObject::BulletType) {

PythonSTG/XCCore/XCRender/RenderManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class RenderManager {
1616
enum insideCommand {
1717
cRenderObject = 0, cAllRenderObject, tBullet, cUserInterface, tAllBullet
1818
};
19-
std::unordered_multimap<std::string, RenderObject*> renderObjectList;
19+
std::multimap<std::string, RenderObject*> renderObjectList;
2020
std::unordered_multimap<insideCommand, std::string> externCommandList;
2121
std::unordered_multimap<std::string, RenderObject*> asyncRenderObjectList;
2222

0 commit comments

Comments
 (0)