Projectiles, angles

This commit is contained in:
Martin
2022-12-15 11:14:35 +01:00
parent d989ead748
commit 9c3299ebfe
15 changed files with 2779 additions and 1870 deletions

View File

@@ -1,4 +1,4 @@
import { CircleCollider2D, Collider2D, Component, Contact2DType, _decorator } from "cc";
import { Collider2D, Component, Contact2DType, Vec3, _decorator } from "cc";
import { ISignal } from "../../Services/EventSystem/ISignal";
import { Signal } from "../../Services/EventSystem/Signal";
import { ProjectileCollision } from "./ProjectileCollision";
@@ -6,7 +6,7 @@ const { ccclass, property } = _decorator;
@ccclass("Projectile")
export class Projectile extends Component {
@property(CircleCollider2D) private collider: CircleCollider2D;
@property(Collider2D) private collider: Collider2D;
private contactBeginEvent = new Signal<ProjectileCollision>();
private piercesDepletedEvent = new Signal<Projectile>();
@@ -15,7 +15,7 @@ export class Projectile extends Component {
private piercesLeft = 0;
private damage = 0;
public init(damage: number, pierces: number): void {
public init(damage: number, pierces: number, angle: number): void {
this.piercesLeft = pierces;
this.damage = damage;
@@ -23,6 +23,8 @@ export class Projectile extends Component {
this.isContactListenerSet = true;
this.collider.on(Contact2DType.BEGIN_CONTACT, this.onColliderContactBegin, this);
}
this.node.setRotationFromEuler(new Vec3(0, 0, angle));
}
public pierce(): void {

View File

@@ -4,6 +4,7 @@ import { Signal } from "../../../../Services/EventSystem/Signal";
import { GameTimer } from "../../../../Services/GameTimer";
import { ObjectPool } from "../../../../Services/ObjectPool";
import { delay } from "../../../../Services/Utils/AsyncUtils";
import { getDegreeAngleFromDirection } from "../../../../Services/Utils/MathUtils";
import { ProjectileLauncherSettings } from "../../../Data/GameSettings";
import { IProjectileCollisionSignaler } from "../../../Projectile/IProjectileCollisionSignaler";
import { Projectile } from "../../../Projectile/Projectile";
@@ -90,7 +91,7 @@ export class ProjectileLauncher extends Component implements IProjectileCollisio
private fireProjectile(direction: Vec2): void {
const projectile: Projectile = this.projectilePool.borrow();
projectile.init(this.projectileData.damage, this.projectileData.pierces);
projectile.init(this.projectileData.damage, this.projectileData.pierces, getDegreeAngleFromDirection(direction.x, direction.y));
projectile.node.setWorldPosition(this.playerNode.worldPosition);
projectile.node.active = true;
projectile.ContactBeginEvent.on(this.onProjectileCollision, this);

View File

@@ -1,4 +1,5 @@
import { _decorator, Component, Node, Button } from "cc";
import { type } from "os";
import { UIButton } from "../Services/UI/Button/UIButton";
import { GameRunner } from "./GameRunner";
@@ -7,8 +8,18 @@ const { ccclass, property } = _decorator;
@ccclass("Menu")
export class Menu extends Component {
@property(UIButton) private playBtn: UIButton;
@property(UIButton) private upgradeBtn: UIButton;
public async start(): Promise<void> {
this.playBtn.InteractedEvent.on(() => GameRunner.Instance.playGame(), this);
this.playBtn.InteractedEvent.on(this.startGame, this);
this.upgradeBtn.InteractedEvent.on(this.openUpgradesWindow, this);
}
private startGame(): void {
GameRunner.Instance.playGame();
}
private openUpgradesWindow(): void {}
}

View File

@@ -5,3 +5,8 @@ export function roundToOneDecimal(num: number): number {
export function randomPositiveOrNegative(): number {
return Math.random() < 0.5 ? 1 : -1;
}
export function getDegreeAngleFromDirection(x: number, y: number): number {
const radianAngle = Math.atan2(y, x);
return (radianAngle / Math.PI) * 180;
}