mirror of
https://github.com/MartinKral/Slash-The-Hordes
synced 2024-12-25 03:08:55 +00:00
Added health potion
This commit is contained in:
parent
1c009e9fa4
commit
dbb55957a0
@ -145,7 +145,8 @@
|
||||
"speed": 60,
|
||||
"lifetime": -1,
|
||||
"xpReward": 1,
|
||||
"goldReward": 0
|
||||
"goldReward": 0,
|
||||
"healthPotionRewardChance": 0.5
|
||||
},
|
||||
{
|
||||
"id": "StandardEnemy",
|
||||
@ -156,7 +157,8 @@
|
||||
"speed": 65,
|
||||
"lifetime": -1,
|
||||
"xpReward": 1,
|
||||
"goldReward": 0.1
|
||||
"goldReward": 0.1,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "FastEnemy",
|
||||
@ -167,7 +169,8 @@
|
||||
"speed": 75,
|
||||
"lifetime": -1,
|
||||
"xpReward": 1,
|
||||
"goldReward": 0.1
|
||||
"goldReward": 0.1,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "CircleEnemy",
|
||||
@ -178,7 +181,8 @@
|
||||
"speed": 25,
|
||||
"lifetime": 29,
|
||||
"xpReward": 1,
|
||||
"goldReward": 1
|
||||
"goldReward": 1,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "CircleEnemyStandard",
|
||||
@ -189,7 +193,8 @@
|
||||
"speed": 35,
|
||||
"lifetime": 27,
|
||||
"xpReward": 1,
|
||||
"goldReward": 2
|
||||
"goldReward": 2,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "WaveEnemy",
|
||||
@ -200,7 +205,8 @@
|
||||
"speed": 390,
|
||||
"lifetime": 20,
|
||||
"xpReward": 1,
|
||||
"goldReward": 0.2
|
||||
"goldReward": 0.2,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "WaveEnemyArmor",
|
||||
@ -211,7 +217,8 @@
|
||||
"speed": 70,
|
||||
"lifetime": 30,
|
||||
"xpReward": 1,
|
||||
"goldReward": 1
|
||||
"goldReward": 1,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "WaveEnemyArmorFast",
|
||||
@ -222,7 +229,8 @@
|
||||
"speed": 320,
|
||||
"lifetime": 30,
|
||||
"xpReward": 1,
|
||||
"goldReward": 1
|
||||
"goldReward": 1,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "BasicBoss",
|
||||
@ -233,7 +241,8 @@
|
||||
"speed": 65,
|
||||
"lifetime": -1,
|
||||
"xpReward": 1,
|
||||
"goldReward": 3
|
||||
"goldReward": 3,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "StandardBoss",
|
||||
@ -244,7 +253,8 @@
|
||||
"speed": 75,
|
||||
"lifetime": -1,
|
||||
"xpReward": 2,
|
||||
"goldReward": 5
|
||||
"goldReward": 5,
|
||||
"healthPotionRewardChance": 0
|
||||
},
|
||||
{
|
||||
"id": "BasicCheetah",
|
||||
@ -255,7 +265,8 @@
|
||||
"speed": 120,
|
||||
"lifetime": -1,
|
||||
"xpReward": 1,
|
||||
"goldReward": 1
|
||||
"goldReward": 1,
|
||||
"healthPotionRewardChance": 0
|
||||
}
|
||||
],
|
||||
"periodicFollowMovers": [
|
||||
@ -483,5 +494,8 @@
|
||||
"enemiesToSpawn": 14
|
||||
}
|
||||
]
|
||||
},
|
||||
"items": {
|
||||
"healthPerPotion": 10
|
||||
}
|
||||
}
|
@ -85,10 +85,10 @@
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.16666666666666666,
|
||||
0.3333333333333333,
|
||||
0.45,
|
||||
0.55
|
||||
0.1666666716337204,
|
||||
0.3333333432674408,
|
||||
0.44999998807907104,
|
||||
0.550000011920929
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
@ -268,7 +268,7 @@
|
||||
"__type__": "cc.RealCurve",
|
||||
"_times": [
|
||||
0,
|
||||
0.16666666666666666
|
||||
0.1666666716337204
|
||||
],
|
||||
"_values": [
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
[
|
||||
{
|
||||
"__type__": "cc.Prefab",
|
||||
"_name": "Health",
|
||||
"_name": "HealthPotion",
|
||||
"_objFlags": 0,
|
||||
"_native": "",
|
||||
"data": {
|
||||
@ -13,7 +13,7 @@
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Node",
|
||||
"_name": "Health",
|
||||
"_name": "HealthPotion",
|
||||
"_objFlags": 0,
|
||||
"__editorExtras__": {},
|
||||
"_parent": null,
|
||||
@ -314,15 +314,15 @@
|
||||
"__id__": 15
|
||||
},
|
||||
"tag": 0,
|
||||
"_group": 16,
|
||||
"_group": 256,
|
||||
"_density": 1,
|
||||
"_sensor": false,
|
||||
"_friction": 0.2,
|
||||
"_restitution": 0,
|
||||
"_offset": {
|
||||
"__type__": "cc.Vec2",
|
||||
"x": 0,
|
||||
"y": -7.5
|
||||
"x": 0.5,
|
||||
"y": -3.4
|
||||
},
|
||||
"_radius": 8,
|
||||
"_id": ""
|
||||
@ -331,23 +331,6 @@
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "75WVRoLrtKLrJihCVsxa4D"
|
||||
},
|
||||
{
|
||||
"__type__": "7a536G2OudFtpTsoF8yLXiW",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 17
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "72AObOIbxCf6LIYsYqoFZF"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.Animation",
|
||||
"_name": "",
|
||||
@ -357,7 +340,7 @@
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 19
|
||||
"__id__": 17
|
||||
},
|
||||
"playOnLoad": true,
|
||||
"_clips": [
|
||||
@ -376,6 +359,26 @@
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "3ag4rexLNJW6A/sp6OpwZ8"
|
||||
},
|
||||
{
|
||||
"__type__": "18f8d5p42FOc4uYonNdBzCm",
|
||||
"_name": "",
|
||||
"_objFlags": 0,
|
||||
"node": {
|
||||
"__id__": 1
|
||||
},
|
||||
"_enabled": true,
|
||||
"__prefab": {
|
||||
"__id__": 19
|
||||
},
|
||||
"animation": {
|
||||
"__id__": 16
|
||||
},
|
||||
"_id": ""
|
||||
},
|
||||
{
|
||||
"__type__": "cc.CompPrefabInfo",
|
||||
"fileId": "65lXWGNONBy5ucPc5KmOaR"
|
||||
},
|
||||
{
|
||||
"__type__": "cc.PrefabInfo",
|
||||
"root": {
|
@ -8,6 +8,6 @@
|
||||
],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"syncNodeName": "Health"
|
||||
"syncNodeName": "HealthPotion"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,7 @@ import { Signal } from "../../Services/EventSystem/Signal";
|
||||
import { GameTimer } from "../../Services/GameTimer";
|
||||
import { GroupType } from "../GroupType";
|
||||
import { Gold } from "../Items/Gold/Gold";
|
||||
import { HealthPotion } from "../Items/HealthPotion/HealthPotion";
|
||||
import { ItemManager } from "../Items/ItemManager";
|
||||
import { XP } from "../Items/XP/XP";
|
||||
import { Enemy } from "../Unit/Enemy/Enemy";
|
||||
@ -28,6 +29,7 @@ export class PlayerCollisionSystem {
|
||||
this.groupToResolver.set(GroupType.ENEMY, this.resolveEnemyContact.bind(this));
|
||||
this.groupToResolver.set(GroupType.XP, this.resolveXpContact.bind(this));
|
||||
this.groupToResolver.set(GroupType.GOLD, this.resolveGoldContact.bind(this));
|
||||
this.groupToResolver.set(GroupType.HEALTH_POTION, this.resolveHealthPotionContact.bind(this));
|
||||
}
|
||||
|
||||
public gameTick(deltaTime: number): void {
|
||||
@ -81,4 +83,8 @@ export class PlayerCollisionSystem {
|
||||
private resolveGoldContact(goldCollider: Collider2D): void {
|
||||
this.itemManager.pickupGold(goldCollider.node.getComponent(Gold));
|
||||
}
|
||||
|
||||
private resolveHealthPotionContact(healthPotionCollider: Collider2D): void {
|
||||
this.itemManager.pickupHealthPotion(healthPotionCollider.node.getComponent(HealthPotion));
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ export class GameSettings {
|
||||
public upgrades: UpgradeSettings = new UpgradeSettings();
|
||||
public metaUpgrades: MetaUpgradesSettings = new MetaUpgradesSettings();
|
||||
public enemyManager: EnemyManagerSettings = new EnemyManagerSettings();
|
||||
public items: ItemSettings = new ItemSettings();
|
||||
}
|
||||
|
||||
export class PlayerSettings {
|
||||
@ -111,6 +112,12 @@ export class EnemySettings {
|
||||
public damage = 0;
|
||||
public speed = 0;
|
||||
public lifetime = 0;
|
||||
|
||||
public xpReward = 0;
|
||||
public goldReward = 0;
|
||||
public healthPotionRewardChance = 0;
|
||||
}
|
||||
|
||||
export class ItemSettings {
|
||||
public healthPerPotion = 0;
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ export class Game extends Component {
|
||||
|
||||
this.player.init(multiInput, this.createPlayerData(settings.player, metaUpgrades));
|
||||
this.enemyManager.init(this.player.node, settings.enemyManager);
|
||||
this.itemManager.init(this.enemyManager, this.player, gameResult);
|
||||
this.itemManager.init(this.enemyManager, this.player, gameResult, settings.items);
|
||||
|
||||
this.playerCollisionSystem = new PlayerCollisionSystem(this.player, settings.player.collisionDelay, this.itemManager);
|
||||
new WeaponCollisionSystem(this.player.Weapon);
|
||||
|
@ -8,5 +8,6 @@ export enum GroupType {
|
||||
XP = 1 << 4,
|
||||
PLAYER_PROJECTILE = 1 << 5,
|
||||
ENEMY_PROJECTILE = 1 << 6,
|
||||
GOLD = 1 << 7
|
||||
GOLD = 1 << 7,
|
||||
HEALTH_POTION = 1 << 8
|
||||
}
|
||||
|
12
assets/Scripts/Game/Items/HealthPotion.meta
Normal file
12
assets/Scripts/Game/Items/HealthPotion.meta
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"ver": "1.1.0",
|
||||
"importer": "directory",
|
||||
"imported": true,
|
||||
"uuid": "5f34fac0-e23f-42da-9c26-d55b9df6ef32",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {
|
||||
"compressionType": {},
|
||||
"isRemoteBundle": {}
|
||||
}
|
||||
}
|
27
assets/Scripts/Game/Items/HealthPotion/HealthPotion.ts
Normal file
27
assets/Scripts/Game/Items/HealthPotion/HealthPotion.ts
Normal file
@ -0,0 +1,27 @@
|
||||
import { Animation, Component, Vec3, _decorator } from "cc";
|
||||
import { ISignal } from "../../../Services/EventSystem/ISignal";
|
||||
import { Signal } from "../../../Services/EventSystem/Signal";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("HealthPotion")
|
||||
export class HealthPotion extends Component {
|
||||
@property(Animation) private animation: Animation;
|
||||
|
||||
private pickUpEvent: Signal<HealthPotion> = new Signal<HealthPotion>();
|
||||
|
||||
public setup(position: Vec3): void {
|
||||
this.node.setWorldPosition(position);
|
||||
this.node.active = true;
|
||||
this.animation.play("DropStart");
|
||||
}
|
||||
|
||||
public get PickupEvent(): ISignal<HealthPotion> {
|
||||
return this.pickUpEvent;
|
||||
}
|
||||
|
||||
public pickup(): void {
|
||||
this.pickUpEvent.trigger(this);
|
||||
this.node.active = false;
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "18f8de69-e361-4e73-8b98-a2735d0730a6",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import { Component, Prefab, Vec3, _decorator } from "cc";
|
||||
import { ObjectPool } from "../../../Services/ObjectPool";
|
||||
import { HealthPotion } from "./HealthPotion";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("HealthPotionSpawner")
|
||||
export class HealthPotionSpawner extends Component {
|
||||
@property(Prefab) public healthPotionPrefab: Prefab;
|
||||
|
||||
private healthPotionPool: ObjectPool<HealthPotion>;
|
||||
|
||||
public init(): void {
|
||||
this.healthPotionPool = new ObjectPool<HealthPotion>(this.healthPotionPrefab, this.node, 5, "HealthPotion");
|
||||
}
|
||||
|
||||
public spawn(position: Vec3): void {
|
||||
const healthPotion: HealthPotion = this.healthPotionPool.borrow();
|
||||
healthPotion.setup(position);
|
||||
healthPotion.PickupEvent.on(this.return, this);
|
||||
}
|
||||
|
||||
private return(healthPotion: HealthPotion): void {
|
||||
healthPotion.PickupEvent.off(this.return);
|
||||
this.healthPotionPool.return(healthPotion);
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "1e3b0c7f-c831-4778-8688-d8e2c0f6dc00",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
@ -1,10 +1,13 @@
|
||||
import { Component, random, randomRange, Vec3, _decorator } from "cc";
|
||||
import { ItemSettings } from "../Data/GameSettings";
|
||||
import { GameResult } from "../Game";
|
||||
import { Enemy } from "../Unit/Enemy/Enemy";
|
||||
import { EnemyManager } from "../Unit/Enemy/EnemyManager";
|
||||
import { Player } from "../Unit/Player/Player";
|
||||
import { Gold } from "./Gold/Gold";
|
||||
import { GoldSpawner } from "./Gold/GoldSpawner";
|
||||
import { HealthPotion } from "./HealthPotion/HealthPotion";
|
||||
import { HealthPotionSpawner } from "./HealthPotion/HealthPotionSpawner";
|
||||
import { PickupEffectManager } from "./PickupEffect/PickupEffectManager";
|
||||
import { XP } from "./XP/XP";
|
||||
import { XPSpawner } from "./XP/XPSpawner";
|
||||
@ -14,20 +17,24 @@ const { ccclass, property } = _decorator;
|
||||
export class ItemManager extends Component {
|
||||
@property(XPSpawner) private xpSpawner: XPSpawner;
|
||||
@property(GoldSpawner) private goldSpawner: GoldSpawner;
|
||||
@property(HealthPotionSpawner) private healthPotionSpawner: HealthPotionSpawner;
|
||||
@property(PickupEffectManager) private pickupEffectManager: PickupEffectManager;
|
||||
|
||||
private player: Player;
|
||||
private gameResult: GameResult;
|
||||
private healthPerPotion: number;
|
||||
|
||||
public init(enemyManager: EnemyManager, player: Player, gameResult: GameResult): void {
|
||||
public init(enemyManager: EnemyManager, player: Player, gameResult: GameResult, settings: ItemSettings): void {
|
||||
this.player = player;
|
||||
this.gameResult = gameResult;
|
||||
this.healthPerPotion = settings.healthPerPotion;
|
||||
|
||||
enemyManager.EnemyAddedEvent.on(this.addEnemyListeners, this);
|
||||
enemyManager.EnemyRemovedEvent.on(this.removeEnemyListeners, this);
|
||||
|
||||
this.xpSpawner.init();
|
||||
this.goldSpawner.init();
|
||||
this.healthPotionSpawner.init();
|
||||
this.pickupEffectManager.init();
|
||||
}
|
||||
|
||||
@ -45,6 +52,13 @@ export class ItemManager extends Component {
|
||||
this.gameResult.goldCoins++;
|
||||
}
|
||||
|
||||
public pickupHealthPotion(healthPotion: HealthPotion): void {
|
||||
this.pickupEffectManager.showEffect(healthPotion.node.worldPosition);
|
||||
|
||||
healthPotion.pickup();
|
||||
this.player.Health.heal(this.healthPerPotion);
|
||||
}
|
||||
|
||||
private addEnemyListeners(enemy: Enemy): void {
|
||||
enemy.DeathEvent.on(this.trySpawnItems, this);
|
||||
}
|
||||
@ -56,6 +70,7 @@ export class ItemManager extends Component {
|
||||
private trySpawnItems(enemy: Enemy): void {
|
||||
this.trySpawnXP(enemy);
|
||||
this.trySpawnGold(enemy);
|
||||
this.trySpawnHealthPotion(enemy);
|
||||
}
|
||||
|
||||
private trySpawnXP(enemy: Enemy): void {
|
||||
@ -78,6 +93,15 @@ export class ItemManager extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
private trySpawnHealthPotion(enemy: Enemy): void {
|
||||
if (enemy.HealthPotionRewardChance <= 0) return;
|
||||
|
||||
console.log("random: " + random() + " chance " + enemy.HealthPotionRewardChance);
|
||||
if (random() < enemy.HealthPotionRewardChance) {
|
||||
this.healthPotionSpawner.spawn(enemy.node.worldPosition);
|
||||
}
|
||||
}
|
||||
|
||||
private getRandomPosition(enemy: Enemy): Vec3 {
|
||||
const position: Vec3 = enemy.node.worldPosition;
|
||||
position.x += randomRange(-10, 10);
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { BoxCollider2D, Color, Component, Material, randomRange, Sprite, Vec3, _decorator } from "cc";
|
||||
import { BoxCollider2D, Component, Material, randomRange, Sprite, Vec3, _decorator } from "cc";
|
||||
import { ISignal } from "../../../Services/EventSystem/ISignal";
|
||||
import { Signal } from "../../../Services/EventSystem/Signal";
|
||||
import { delay } from "../../../Services/Utils/AsyncUtils";
|
||||
@ -28,6 +28,7 @@ export class Enemy extends Component {
|
||||
|
||||
private xpReward: number;
|
||||
private goldReward: number;
|
||||
private healthPotionRewardChance: number;
|
||||
|
||||
private endOfLifetimeTriggered = false;
|
||||
|
||||
@ -42,6 +43,7 @@ export class Enemy extends Component {
|
||||
|
||||
this.xpReward = settings.xpReward;
|
||||
this.goldReward = settings.goldReward;
|
||||
this.healthPotionRewardChance = settings.healthPotionRewardChance;
|
||||
|
||||
this.node.setWorldPosition(position);
|
||||
this.node.active = true;
|
||||
@ -82,6 +84,10 @@ export class Enemy extends Component {
|
||||
return this.goldReward;
|
||||
}
|
||||
|
||||
public get HealthPotionRewardChance(): number {
|
||||
return this.healthPotionRewardChance;
|
||||
}
|
||||
|
||||
public get LifetimeEndedEvent(): ISignal<Enemy> {
|
||||
return this.lifetimeEndedEvent;
|
||||
}
|
||||
|
@ -28,17 +28,22 @@
|
||||
{
|
||||
"index": 7,
|
||||
"name": "GOLD"
|
||||
},
|
||||
{
|
||||
"index": 8,
|
||||
"name": "HEALTH_POTION"
|
||||
}
|
||||
],
|
||||
"collisionMatrix": {
|
||||
"0": 0,
|
||||
"1": 212,
|
||||
"1": 468,
|
||||
"2": 42,
|
||||
"3": 4,
|
||||
"4": 2,
|
||||
"5": 4,
|
||||
"6": 2,
|
||||
"7": 2
|
||||
"7": 2,
|
||||
"8": 2
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
|
Loading…
Reference in New Issue
Block a user