fixed bug in fight ship
This commit is contained in:
parent
1d7a4618f5
commit
0fa67e86c0
|
@ -1,8 +1,9 @@
|
||||||
|
在命令行中运行`SpaceWar`即可(确保`assets`文件夹在同一目录下)
|
||||||
|
|
||||||
![welcome](./snapshot/welcome.png)
|
![welcome](./snapshot/welcome.png)
|
||||||
|
|
||||||
开始界面,上方按钮进入游戏,下方按钮退出游戏
|
开始界面,上方按钮进入游戏,下方按钮退出游戏
|
||||||
|
|
||||||
|
|
||||||
![select-ship](./snapshot/select_ship.png)
|
![select-ship](./snapshot/select_ship.png)
|
||||||
|
|
||||||
选择飞船和配置阵营界面。左边选择你的飞船(目前只有两架),右边可以配置阵营:
|
选择飞船和配置阵营界面。左边选择你的飞船(目前只有两架),右边可以配置阵营:
|
||||||
|
@ -17,7 +18,6 @@
|
||||||
|
|
||||||
战斗机和防御机的起始数量是随机的(总数为Plane Number)。
|
战斗机和防御机的起始数量是随机的(总数为Plane Number)。
|
||||||
|
|
||||||
|
|
||||||
![gaming](./snapshot/gaming.png)
|
![gaming](./snapshot/gaming.png)
|
||||||
|
|
||||||
游戏界面。
|
游戏界面。
|
||||||
|
@ -39,4 +39,3 @@
|
||||||
胜利条件:
|
胜利条件:
|
||||||
|
|
||||||
全灭其他所有阵营获得胜利
|
全灭其他所有阵营获得胜利
|
||||||
|
|
||||||
|
|
|
@ -12,5 +12,5 @@ void MoveUp(MotionCmpt& motion);
|
||||||
void MoveDown(MotionCmpt& motion);
|
void MoveDown(MotionCmpt& motion);
|
||||||
void SpeedUp(MotionCmpt& motion, FightShipCmpt& ship);
|
void SpeedUp(MotionCmpt& motion, FightShipCmpt& ship);
|
||||||
void SpeedDown(MotionCmpt& motion, FightShipCmpt& ship);
|
void SpeedDown(MotionCmpt& motion, FightShipCmpt& ship);
|
||||||
void TurnLeft(FightShipCmpt& motion);
|
void TurnLeft(MotionCmpt&, FightShipCmpt&);
|
||||||
void TurnRight(FightShipCmpt& motion);
|
void TurnRight(MotionCmpt&, FightShipCmpt&);
|
||||||
|
|
|
@ -57,10 +57,14 @@ void SpeedDown(MotionCmpt& motion, FightShipCmpt& ship) {
|
||||||
ship.degree);
|
ship.degree);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TurnLeft(FightShipCmpt& ship) {
|
void TurnLeft(MotionCmpt& motion, FightShipCmpt& ship) {
|
||||||
ship.degree -= FightShipRotationDegree;
|
ship.degree -= FightShipRotationDegree;
|
||||||
|
motion.speed = Rotate(Point{0, -1} * Len(motion.speed),
|
||||||
|
ship.degree);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TurnRight(FightShipCmpt& ship) {
|
void TurnRight(MotionCmpt& motion, FightShipCmpt& ship) {
|
||||||
ship.degree += FightShipRotationDegree;
|
ship.degree += FightShipRotationDegree;
|
||||||
|
motion.speed = Rotate(Point{0, -1} * Len(motion.speed),
|
||||||
|
ship.degree);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,9 +62,9 @@ void FightShipAI(Entity* self) {
|
||||||
auto shipDir = Rotate(Point{0, -1}, self->Get<FightShipCmpt>()->degree);
|
auto shipDir = Rotate(Point{0, -1}, self->Get<FightShipCmpt>()->degree);
|
||||||
auto cross = Cross(shipDir, ndir);
|
auto cross = Cross(shipDir, ndir);
|
||||||
if (cross > 0) {
|
if (cross > 0) {
|
||||||
TurnRight(*ship);
|
TurnRight(*self->Use<MotionCmpt>(), *ship);
|
||||||
} else {
|
} else {
|
||||||
TurnLeft(*ship);
|
TurnLeft(*self->Use<MotionCmpt>(), *ship);
|
||||||
}
|
}
|
||||||
if (abs(Cross(Normalize(motion->speed), Normalize(dir))) < std::sin(Radians(10))) {
|
if (abs(Cross(Normalize(motion->speed), Normalize(dir))) < std::sin(Radians(10))) {
|
||||||
if (ship->weapon2->bulletAmount > 0 && Random(1.0f, 100.0f) < 5) {
|
if (ship->weapon2->bulletAmount > 0 && Random(1.0f, 100.0f) < 5) {
|
||||||
|
|
|
@ -13,10 +13,10 @@ void FightShipController::Update(float dt) {
|
||||||
auto motionCmpt = entity_->Use<MotionCmpt>();
|
auto motionCmpt = entity_->Use<MotionCmpt>();
|
||||||
auto ship = entity_->Use<FightShipCmpt>();
|
auto ship = entity_->Use<FightShipCmpt>();
|
||||||
if (IsKeyPressing(GLFW_KEY_A)) {
|
if (IsKeyPressing(GLFW_KEY_A)) {
|
||||||
TurnLeft(*ship);
|
TurnLeft(*motionCmpt, *ship);
|
||||||
}
|
}
|
||||||
if (IsKeyPressing(GLFW_KEY_D)) {
|
if (IsKeyPressing(GLFW_KEY_D)) {
|
||||||
TurnRight(*ship);
|
TurnRight(*motionCmpt, *ship);
|
||||||
}
|
}
|
||||||
if (IsKeyPressing(GLFW_KEY_S)) {
|
if (IsKeyPressing(GLFW_KEY_S)) {
|
||||||
SpeedDown(*motionCmpt, *ship);
|
SpeedDown(*motionCmpt, *ship);
|
||||||
|
@ -25,9 +25,6 @@ void FightShipController::Update(float dt) {
|
||||||
SpeedUp(*motionCmpt, *ship);
|
SpeedUp(*motionCmpt, *ship);
|
||||||
}
|
}
|
||||||
|
|
||||||
motionCmpt->speed = Rotate(Point{0, -1} * Len(motionCmpt->speed),
|
|
||||||
ship->degree);
|
|
||||||
|
|
||||||
auto moveCmpt = entity_->Get<MoveCmpt>();
|
auto moveCmpt = entity_->Get<MoveCmpt>();
|
||||||
|
|
||||||
if (IsLeftPressing()) {
|
if (IsLeftPressing()) {
|
||||||
|
|
Reference in New Issue