2022-11-28 11:19:04 +00:00
|
|
|
import { BoxCollider2D, Collider2D, Component, Vec2, Vec3, _decorator } from "cc";
|
2022-11-28 13:34:34 +00:00
|
|
|
import { PlayerSettings } from "../../Data/GameSettings";
|
2022-11-28 11:19:04 +00:00
|
|
|
import { IInput } from "../../Input/IInput";
|
|
|
|
import { UnitHealth } from "../UnitHealth";
|
|
|
|
import { UnitLevel } from "../UnitLevel";
|
2022-11-28 13:34:34 +00:00
|
|
|
import { PlayerRegeneration } from "./PlayerRegeneration";
|
2022-11-08 18:45:57 +00:00
|
|
|
import { PlayerUI } from "./PlayerUI/PlayerUI";
|
2022-11-28 11:19:04 +00:00
|
|
|
import { Weapon } from "./Weapon/Weapon";
|
|
|
|
|
2022-11-03 15:55:49 +00:00
|
|
|
const { ccclass, property } = _decorator;
|
|
|
|
|
|
|
|
@ccclass("Player")
|
|
|
|
export class Player extends Component {
|
|
|
|
@property private speed = 0;
|
2022-11-08 10:42:14 +00:00
|
|
|
@property(BoxCollider2D) private collider: BoxCollider2D;
|
2022-11-08 18:45:57 +00:00
|
|
|
@property(PlayerUI) private playerUI: PlayerUI;
|
2022-11-29 14:55:47 +00:00
|
|
|
@property(Weapon) private weapon: Weapon;
|
2022-11-03 15:55:49 +00:00
|
|
|
|
2022-11-14 15:35:47 +00:00
|
|
|
private input: IInput;
|
2022-11-08 18:45:57 +00:00
|
|
|
private health: UnitHealth;
|
2022-11-16 13:04:23 +00:00
|
|
|
private level: UnitLevel;
|
2022-11-28 13:34:34 +00:00
|
|
|
private regeneration: PlayerRegeneration;
|
2022-11-03 15:55:49 +00:00
|
|
|
|
2022-12-13 10:58:40 +00:00
|
|
|
public init(input: IInput, settings: PlayerData): void {
|
2022-11-14 15:35:47 +00:00
|
|
|
this.input = input;
|
2022-11-28 13:34:34 +00:00
|
|
|
this.health = new UnitHealth(settings.defaultHP);
|
|
|
|
this.level = new UnitLevel(settings.requiredXP);
|
|
|
|
this.regeneration = new PlayerRegeneration(this.health, settings.regenerationDelay);
|
2022-11-08 10:42:14 +00:00
|
|
|
|
2022-11-29 14:55:47 +00:00
|
|
|
this.weapon.init(settings.weapon);
|
2022-11-08 18:45:57 +00:00
|
|
|
|
|
|
|
this.playerUI.init(this.health);
|
2022-12-13 10:58:40 +00:00
|
|
|
|
|
|
|
console.log("Bonus damage " + settings.bonusDamage);
|
2022-11-08 18:45:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public get Health(): UnitHealth {
|
|
|
|
return this.health;
|
2022-11-08 10:42:14 +00:00
|
|
|
}
|
|
|
|
|
2022-11-16 13:04:23 +00:00
|
|
|
public get Level(): UnitLevel {
|
|
|
|
return this.level;
|
2022-11-03 15:55:49 +00:00
|
|
|
}
|
|
|
|
|
2022-11-23 08:01:01 +00:00
|
|
|
public get Weapon(): Weapon {
|
|
|
|
return this.weapon;
|
|
|
|
}
|
|
|
|
|
2022-11-28 13:34:34 +00:00
|
|
|
public get Regeneration(): PlayerRegeneration {
|
|
|
|
return this.regeneration;
|
|
|
|
}
|
|
|
|
|
2022-11-16 13:04:23 +00:00
|
|
|
public get Collider(): Collider2D {
|
|
|
|
return this.collider;
|
2022-11-16 11:26:20 +00:00
|
|
|
}
|
|
|
|
|
2022-11-03 15:55:49 +00:00
|
|
|
public gameTick(deltaTime: number): void {
|
2022-11-14 15:35:47 +00:00
|
|
|
const movement: Vec2 = this.input.getAxis();
|
2022-11-03 15:55:49 +00:00
|
|
|
movement.x *= deltaTime * this.speed;
|
|
|
|
movement.y *= deltaTime * this.speed;
|
|
|
|
|
|
|
|
const newPosition: Vec3 = this.node.worldPosition;
|
|
|
|
newPosition.x += movement.x;
|
|
|
|
newPosition.y += movement.y;
|
|
|
|
|
|
|
|
this.node.setWorldPosition(newPosition);
|
|
|
|
|
2022-11-16 11:26:20 +00:00
|
|
|
this.weapon.gameTick(deltaTime);
|
2022-11-28 13:34:34 +00:00
|
|
|
this.regeneration.gameTick(deltaTime);
|
2022-11-03 15:55:49 +00:00
|
|
|
}
|
|
|
|
}
|
2022-12-13 10:58:40 +00:00
|
|
|
|
|
|
|
export class PlayerData extends PlayerSettings {
|
|
|
|
public bonusDamage = 0;
|
|
|
|
public bonusHp = 0;
|
|
|
|
public bonusSpeed = 0;
|
|
|
|
public bonusXP = 0;
|
|
|
|
public bonusGold = 0;
|
|
|
|
}
|