Slash-The-Hordes/assets/Scripts/Game/Player/Player.ts

51 lines
1.5 KiB
TypeScript
Raw Normal View History

import { BoxCollider2D, Collider2D, Component, Vec2, Vec3, _decorator } from "cc";
2022-11-14 15:35:47 +00:00
import { IInput } from "../Input/IInput";
2022-11-08 18:45:57 +00:00
import { Weapon } from "../Weapon";
import { PlayerUI } from "./PlayerUI/PlayerUI";
2022-11-14 15:35:47 +00:00
import { UnitHealth } from "./UnitHealth";
2022-11-03 15:55:49 +00:00
const { ccclass, property } = _decorator;
@ccclass("Player")
export class Player extends Component {
@property private speed = 0;
@property(BoxCollider2D) private collider: BoxCollider2D;
2022-11-08 18:45:57 +00:00
@property(PlayerUI) private playerUI: PlayerUI;
2022-11-03 15:55:49 +00:00
2022-11-14 15:35:47 +00:00
private input: IInput;
private weapon: Weapon;
2022-11-08 18:45:57 +00:00
private health: UnitHealth;
2022-11-03 15:55:49 +00:00
2022-11-14 15:35:47 +00:00
public init(input: IInput, weapon: Weapon, maxHp: number): void {
this.input = input;
this.weapon = weapon;
2022-11-08 18:45:57 +00:00
this.health = new UnitHealth(maxHp);
this.weapon.node.parent = this.node;
this.weapon.node.setPosition(new Vec3());
2022-11-08 18:45:57 +00:00
this.playerUI.init(this.health);
}
public get Health(): UnitHealth {
return this.health;
}
public get Collider(): Collider2D {
return this.collider;
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);
this.weapon.gameTick(deltaTime, movement);
}
}