Chest and magnet spawning

This commit is contained in:
Martin 2022-12-23 09:52:26 +01:00
parent 4b2d35a733
commit afc9448826
9 changed files with 119 additions and 125 deletions

View File

@ -155,7 +155,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 1, "xpReward": 1,
"goldReward": 0, "goldReward": 0,
"healthPotionRewardChance": 0.05 "healthPotionRewardChance": 0.05,
"magnetRewardChance": 0.5,
"chestRewardChance": 0.5
}, },
{ {
"id": "StandardEnemy", "id": "StandardEnemy",
@ -167,7 +169,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 1, "xpReward": 1,
"goldReward": 0.1, "goldReward": 0.1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "FastEnemy", "id": "FastEnemy",
@ -179,7 +183,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 1, "xpReward": 1,
"goldReward": 0.1, "goldReward": 0.1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "CircleEnemy", "id": "CircleEnemy",
@ -191,7 +197,9 @@
"lifetime": 29, "lifetime": 29,
"xpReward": 1, "xpReward": 1,
"goldReward": 1, "goldReward": 1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "CircleEnemyStandard", "id": "CircleEnemyStandard",
@ -203,7 +211,9 @@
"lifetime": 27, "lifetime": 27,
"xpReward": 1, "xpReward": 1,
"goldReward": 2, "goldReward": 2,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "WaveEnemy", "id": "WaveEnemy",
@ -215,7 +225,9 @@
"lifetime": 20, "lifetime": 20,
"xpReward": 1, "xpReward": 1,
"goldReward": 0.2, "goldReward": 0.2,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "WaveEnemyArmor", "id": "WaveEnemyArmor",
@ -227,7 +239,9 @@
"lifetime": 30, "lifetime": 30,
"xpReward": 1, "xpReward": 1,
"goldReward": 1, "goldReward": 1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "WaveEnemyArmorFast", "id": "WaveEnemyArmorFast",
@ -239,7 +253,9 @@
"lifetime": 30, "lifetime": 30,
"xpReward": 1, "xpReward": 1,
"goldReward": 1, "goldReward": 1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "BasicBoss", "id": "BasicBoss",
@ -251,7 +267,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 1, "xpReward": 1,
"goldReward": 3, "goldReward": 3,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "StandardBoss", "id": "StandardBoss",
@ -263,7 +281,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 2, "xpReward": 2,
"goldReward": 5, "goldReward": 5,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
}, },
{ {
"id": "BasicCheetah", "id": "BasicCheetah",
@ -275,7 +295,9 @@
"lifetime": -1, "lifetime": -1,
"xpReward": 1, "xpReward": 1,
"goldReward": 1, "goldReward": 1,
"healthPotionRewardChance": 0 "healthPotionRewardChance": 0,
"magnetRewardChance": 0,
"chestRewardChance": 0
} }
], ],
"periodicFollowMovers": [ "periodicFollowMovers": [

Binary file not shown.

View File

@ -0,0 +1,14 @@
{
"ver": "1.0.0",
"importer": "audio-clip",
"imported": true,
"uuid": "a26cfab9-1d95-4f99-83bf-297696072f6c",
"files": [
".json",
".wav"
],
"subMetas": {},
"userData": {
"downloadMode": 0
}
}

View File

@ -98,6 +98,14 @@
"__uuid__": "b1564752-035d-4989-aed0-2c0684d8a0e9", "__uuid__": "b1564752-035d-4989-aed0-2c0684d8a0e9",
"__expectedType__": "cc.AudioClip" "__expectedType__": "cc.AudioClip"
}, },
"magnetPickup": {
"__uuid__": "a26cfab9-1d95-4f99-83bf-297696072f6c",
"__expectedType__": "cc.AudioClip"
},
"chestPickup": {
"__uuid__": "a26cfab9-1d95-4f99-83bf-297696072f6c",
"__expectedType__": "cc.AudioClip"
},
"levelUp": { "levelUp": {
"__uuid__": "4bf29238-2767-4178-a74a-3c2857685265", "__uuid__": "4bf29238-2767-4178-a74a-3c2857685265",
"__expectedType__": "cc.AudioClip" "__expectedType__": "cc.AudioClip"

View File

@ -27,7 +27,7 @@
"_active": true, "_active": true,
"_components": [], "_components": [],
"_prefab": { "_prefab": {
"__id__": 116 "__id__": 114
}, },
"autoReleaseAssets": false, "autoReleaseAssets": false,
"_globals": { "_globals": {
@ -3341,115 +3341,16 @@
"modalWindowManager": { "modalWindowManager": {
"__id__": 96 "__id__": 96
}, },
"gameAudioAdapter": { "gameAudioAdapter": null,
"__id__": 114
},
"_id": "3a9z1bqlFCGL4/WyDwU4L5" "_id": "3a9z1bqlFCGL4/WyDwU4L5"
}, },
{
"__type__": "eb842QdTMFOUJEdwMiA7AJN",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 115
},
"_enabled": true,
"__prefab": null,
"music": {
"__uuid__": "0faecdcf-e5d6-4cc1-b3cf-3b2873f8ee62",
"__expectedType__": "cc.AudioClip"
},
"enemyHit": {
"__uuid__": "efed223f-7b17-47ad-b265-7a951ace6d85",
"__expectedType__": "cc.AudioClip"
},
"playerHit": {
"__uuid__": "99fb12ce-b248-4560-85fd-c1a61689adf2",
"__expectedType__": "cc.AudioClip"
},
"playerDeath": {
"__uuid__": "68ebed5f-544b-4337-a49c-d4ba32e8e6a2",
"__expectedType__": "cc.AudioClip"
},
"weaponSwing": {
"__uuid__": "5ad08e27-4461-464a-ad19-8c933abf5a5d",
"__expectedType__": "cc.AudioClip"
},
"xpPickup": {
"__uuid__": "6af287fc-820f-4e12-8b8f-858a5dd41d2c",
"__expectedType__": "cc.AudioClip"
},
"goldPickup": {
"__uuid__": "580b2ceb-3daa-409b-b6c4-7d81c7182650",
"__expectedType__": "cc.AudioClip"
},
"healthPotionPickup": {
"__uuid__": "b1564752-035d-4989-aed0-2c0684d8a0e9",
"__expectedType__": "cc.AudioClip"
},
"levelUp": {
"__uuid__": "4bf29238-2767-4178-a74a-3c2857685265",
"__expectedType__": "cc.AudioClip"
},
"horizontalProjectileLaunch": {
"__uuid__": "36c577cb-8a85-40a7-9390-455863dfef8f",
"__expectedType__": "cc.AudioClip"
},
"diagonalProjectileLaunch": {
"__uuid__": "adeff7ed-6f7e-471b-8790-d0eb14e048f9",
"__expectedType__": "cc.AudioClip"
},
"haloProjectileLaunch": {
"__uuid__": "a7b634e1-7842-402c-a2a9-4007435c9a4a",
"__expectedType__": "cc.AudioClip"
},
"_id": "8fIp3RG7RDK6FMarL5A96h"
},
{
"__type__": "cc.Node",
"_name": "GameAudioAdapter",
"_objFlags": 0,
"_parent": null,
"_children": [],
"_active": true,
"_components": [
{
"__id__": 114
}
],
"_prefab": null,
"_lpos": {
"__type__": "cc.Vec3",
"x": -319.99999999999994,
"y": -479.99999999999994,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": "62B+OqAzROoon1s4L/Ur4W"
},
{ {
"__type__": "cc.PrefabInfo", "__type__": "cc.PrefabInfo",
"fileId": "cffa5b19-2043-4cef-8221-1a10ab7a2c1f", "fileId": "cffa5b19-2043-4cef-8221-1a10ab7a2c1f",
"targetOverrides": [ "targetOverrides": [
{
"__id__": 115
},
{ {
"__id__": 117 "__id__": 117
} }
@ -3479,7 +3380,7 @@
"__id__": 32 "__id__": 32
}, },
"targetInfo": { "targetInfo": {
"__id__": 118 "__id__": 116
} }
}, },
{ {
@ -3488,6 +3389,28 @@
"73GtzRGABId6PSqMhTW/3T" "73GtzRGABId6PSqMhTW/3T"
] ]
}, },
{
"__type__": "cc.TargetOverrideInfo",
"source": {
"__id__": 113
},
"sourceInfo": null,
"propertyPath": [
"gameAudioAdapter"
],
"target": {
"__id__": 13
},
"targetInfo": {
"__id__": 118
}
},
{
"__type__": "cc.TargetInfo",
"localID": [
"b2ILEwH8JJmYiJlSWbxV6z"
]
},
{ {
"__type__": "cc.SceneGlobals", "__type__": "cc.SceneGlobals",
"ambient": { "ambient": {

View File

@ -20,6 +20,8 @@ export class GameAudioAdapter extends Component {
@property(AudioClip) private xpPickup: AudioClip; @property(AudioClip) private xpPickup: AudioClip;
@property(AudioClip) private goldPickup: AudioClip; @property(AudioClip) private goldPickup: AudioClip;
@property(AudioClip) private healthPotionPickup: AudioClip; @property(AudioClip) private healthPotionPickup: AudioClip;
@property(AudioClip) private magnetPickup: AudioClip;
@property(AudioClip) private chestPickup: AudioClip;
@property(AudioClip) private levelUp: AudioClip; @property(AudioClip) private levelUp: AudioClip;
@property(AudioClip) private horizontalProjectileLaunch: AudioClip; @property(AudioClip) private horizontalProjectileLaunch: AudioClip;
@property(AudioClip) private diagonalProjectileLaunch: AudioClip; @property(AudioClip) private diagonalProjectileLaunch: AudioClip;
@ -89,6 +91,12 @@ export class GameAudioAdapter extends Component {
case ItemType.HealthPotion: case ItemType.HealthPotion:
clipToPlay = this.healthPotionPickup; clipToPlay = this.healthPotionPickup;
break; break;
case ItemType.Magnet:
clipToPlay = this.magnetPickup;
break;
case ItemType.Chest:
clipToPlay = this.chestPickup;
break;
default: default:
break; break;
} }

View File

@ -127,6 +127,8 @@ export class EnemySettings {
public xpReward = 0; public xpReward = 0;
public goldReward = 0; public goldReward = 0;
public healthPotionRewardChance = 0; public healthPotionRewardChance = 0;
public magnetRewardChance = 0;
public chestRewardChance = 0;
} }
export class ItemSettings { export class ItemSettings {

View File

@ -49,6 +49,8 @@ export class ItemManager extends Component {
this.itemTypeToAction.set(ItemType.XP, this.addXP.bind(this)); this.itemTypeToAction.set(ItemType.XP, this.addXP.bind(this));
this.itemTypeToAction.set(ItemType.Gold, this.addGold.bind(this)); this.itemTypeToAction.set(ItemType.Gold, this.addGold.bind(this));
this.itemTypeToAction.set(ItemType.HealthPotion, this.useHealthPotion.bind(this)); this.itemTypeToAction.set(ItemType.HealthPotion, this.useHealthPotion.bind(this));
this.itemTypeToAction.set(ItemType.Magnet, this.activateMagnet.bind(this));
this.itemTypeToAction.set(ItemType.Chest, this.giveRandomSkill.bind(this));
} }
public get PickupEvent(): ISignal<ItemType> { public get PickupEvent(): ISignal<ItemType> {
@ -78,6 +80,10 @@ export class ItemManager extends Component {
this.player.Health.heal(this.healthPerPotion); this.player.Health.heal(this.healthPerPotion);
} }
private activateMagnet(): void {}
private giveRandomSkill(): void {}
private addEnemyListeners(enemy: Enemy): void { private addEnemyListeners(enemy: Enemy): void {
enemy.DeathEvent.on(this.trySpawnItems, this); enemy.DeathEvent.on(this.trySpawnItems, this);
} }
@ -89,7 +95,9 @@ export class ItemManager extends Component {
private trySpawnItems(enemy: Enemy): void { private trySpawnItems(enemy: Enemy): void {
this.trySpawnXP(enemy); this.trySpawnXP(enemy);
this.trySpawnGold(enemy); this.trySpawnGold(enemy);
this.trySpawnHealthPotion(enemy); ItemManager.trySpawnOnce(enemy.HealthPotionRewardChance, this.healthPotionSpawner, this.getRandomPosition(enemy));
ItemManager.trySpawnOnce(enemy.MagnetRewardChance, this.magnetSpawner, this.getRandomPosition(enemy));
ItemManager.trySpawnOnce(enemy.ChestRewardChance, this.chestSpawner, this.getRandomPosition(enemy));
} }
private trySpawnXP(enemy: Enemy): void { private trySpawnXP(enemy: Enemy): void {
@ -112,19 +120,16 @@ export class ItemManager extends Component {
} }
} }
private trySpawnHealthPotion(enemy: Enemy): void { private static trySpawnOnce(chance: number, itemSpawner: ItemSpawner, worldPosition: Vec3): void {
if (enemy.HealthPotionRewardChance <= 0) return; if (random() < chance) {
itemSpawner.spawn(worldPosition);
console.log("random: " + random() + " chance " + enemy.HealthPotionRewardChance);
if (random() < enemy.HealthPotionRewardChance) {
this.healthPotionSpawner.spawn(enemy.node.worldPosition);
} }
} }
private getRandomPosition(enemy: Enemy): Vec3 { private getRandomPosition(enemy: Enemy): Vec3 {
const position: Vec3 = enemy.node.worldPosition; const position: Vec3 = enemy.node.worldPosition;
position.x += randomRange(-10, 10); position.x += randomRange(-15, 15);
position.y += randomRange(-10, 10); position.y += randomRange(-15, 15);
return position; return position;
} }

View File

@ -29,6 +29,8 @@ export class Enemy extends Component {
private xpReward: number; private xpReward: number;
private goldReward: number; private goldReward: number;
private healthPotionRewardChance: number; private healthPotionRewardChance: number;
private magnetRewardChance: number;
private chestRewardChance: number;
private endOfLifetimeTriggered = false; private endOfLifetimeTriggered = false;
@ -44,6 +46,8 @@ export class Enemy extends Component {
this.xpReward = settings.xpReward; this.xpReward = settings.xpReward;
this.goldReward = settings.goldReward; this.goldReward = settings.goldReward;
this.healthPotionRewardChance = settings.healthPotionRewardChance; this.healthPotionRewardChance = settings.healthPotionRewardChance;
this.magnetRewardChance = settings.magnetRewardChance;
this.chestRewardChance = settings.chestRewardChance;
this.node.setWorldPosition(position); this.node.setWorldPosition(position);
this.node.active = true; this.node.active = true;
@ -88,6 +92,14 @@ export class Enemy extends Component {
return this.healthPotionRewardChance; return this.healthPotionRewardChance;
} }
public get MagnetRewardChance(): number {
return this.magnetRewardChance;
}
public get ChestRewardChance(): number {
return this.chestRewardChance;
}
public get LifetimeEndedEvent(): ISignal<Enemy> { public get LifetimeEndedEvent(): ISignal<Enemy> {
return this.lifetimeEndedEvent; return this.lifetimeEndedEvent;
} }