Added regeneration

This commit is contained in:
Martin
2022-11-28 14:34:34 +01:00
parent 692bb7c35c
commit a0bd11b61d
7 changed files with 61 additions and 7 deletions

View File

@@ -1,7 +1,9 @@
import { BoxCollider2D, Collider2D, Component, Vec2, Vec3, _decorator } from "cc";
import { PlayerSettings } from "../../Data/GameSettings";
import { IInput } from "../../Input/IInput";
import { UnitHealth } from "../UnitHealth";
import { UnitLevel } from "../UnitLevel";
import { PlayerRegeneration } from "./PlayerRegeneration";
import { PlayerUI } from "./PlayerUI/PlayerUI";
import { Weapon } from "./Weapon/Weapon";
@@ -17,12 +19,14 @@ export class Player extends Component {
private weapon: Weapon;
private health: UnitHealth;
private level: UnitLevel;
private regeneration: PlayerRegeneration;
public init(input: IInput, weapon: Weapon, maxHp: number, requiredLevelXps: number[]): void {
public init(input: IInput, weapon: Weapon, settings: PlayerSettings): void {
this.input = input;
this.weapon = weapon;
this.health = new UnitHealth(maxHp);
this.level = new UnitLevel(requiredLevelXps);
this.health = new UnitHealth(settings.defaultHP);
this.level = new UnitLevel(settings.requiredXP);
this.regeneration = new PlayerRegeneration(this.health, settings.regenerationDelay);
this.weapon.node.parent = this.node;
this.weapon.node.setPosition(new Vec3());
@@ -42,6 +46,10 @@ export class Player extends Component {
return this.weapon;
}
public get Regeneration(): PlayerRegeneration {
return this.regeneration;
}
public get Collider(): Collider2D {
return this.collider;
}
@@ -58,5 +66,6 @@ export class Player extends Component {
this.node.setWorldPosition(newPosition);
this.weapon.gameTick(deltaTime);
this.regeneration.gameTick(deltaTime);
}
}

View File

@@ -0,0 +1,28 @@
import { GameTimer } from "../../../Services/GameTimer";
import { UnitHealth } from "../UnitHealth";
export class PlayerRegeneration {
private currentRegenerationAmount = 0;
private regenerationDelay: number;
private regenerationTimer: GameTimer = new GameTimer(0);
private health: UnitHealth;
public constructor(health: UnitHealth, regenerationDelay: number) {
this.health = health;
this.regenerationDelay = regenerationDelay;
}
public upgrade(): void {
this.currentRegenerationAmount++;
this.regenerationTimer = new GameTimer(this.regenerationDelay / this.currentRegenerationAmount);
}
public gameTick(deltaTime: number): void {
if (this.currentRegenerationAmount <= 0) return;
this.regenerationTimer.gameTick(deltaTime);
if (this.regenerationTimer.tryFinishPeriod()) {
this.health.heal(1);
}
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "d7c2f178-5239-4c80-b3f5-6b6a797bb71f",
"files": [],
"subMetas": {},
"userData": {}
}