private void GenerateActorsAndItemsOutside() { var bound = new BoundsInt(new Vector3Int(-2, -53, 0), new Vector3Int(19, 18, 1)); for (int i = 0; i < 10; i++) { Vector2Int randomPosition = _rng.NextPosition(bound); if (_gridInfoProvider.IsWalkable(randomPosition)) { var actor = _rng.Choice(new[] { ActorType.Rogue, ActorType.BruisedRat, ActorType.BruisedRat, ActorType.Rat, ActorType.Rat, ActorType.RatChiefBetter, ActorType.RatChief, ActorType.Dog, ActorType.RatVeteran, }); _entitySpawner.SpawnActor(actor, randomPosition); } } ItemDefinition recoverTailDefinition = Resources.Load <ItemDefinition>("PotionOfRecoverTail"); _entitySpawner.SpawnItem(recoverTailDefinition, new Vector2Int(-3, -83)); _entitySpawner.SpawnActor(ActorType.LastMonster, new Vector2Int(-2, -83)); _entitySpawner.SpawnActor(ActorType.Basher, new Vector2Int(11, -64)); _entitySpawner.SpawnActor(ActorType.RatChief, new Vector2Int(3, -87)); }
public void HandleDeath(ActorData actorData) { ItemDefinition weaponToSpawn = actorData.WeaponWeld; _entityRemover.CleanSceneAndGameContextAfterDeath(actorData); //_entitySpawner.SpawnItem(_gameConfig.ItemConfig.Definitions.FirstOrDefault(i => i.ItemType == ItemType.PotionOfFriend), actorData.LogicalPosition); if (actorData.ActorType == ActorType.Basher) { _gameContext.BasherDead = true; } if (actorData.IsBoss && _gameContext.CurrentDungeonIndex == 0) { _entitySpawner.SpawnItem(_gameConfig.ItemConfig.Definitions.First(i => i.ItemType == ItemType.PotionOfBuddy), actorData.LogicalPosition); } else if (actorData.ActorType != ActorType.Buddy && actorData.ActorType != ActorType.Friend && _rng.Check(0.42f)) { ItemDefinition[] itemPool = actorData.XpGiven < 15 ? _gameConfig.ItemConfig.ItemPoolWeak : actorData.XpGiven < 26 ? _gameConfig.ItemConfig.ItemPoolMedium : _gameConfig.ItemConfig.ItemPoolStrong; ItemDefinition item = _rng.Choice(itemPool); _entitySpawner.SpawnItem(item, actorData.LogicalPosition); } if (!weaponToSpawn.WeaponDefinition.IsBodyPart && actorData.ActorType != ActorType.Buddy && actorData.ActorType != ActorType.Friend) { _entitySpawner.SpawnItem(weaponToSpawn, actorData.LogicalPosition); } if (actorData.ControlledByPlayer) { _uiConfig.RestartButton.gameObject.SetActive(true); var postMortem = "You died at level " + actorData.Level + " after surviving " + actorData.RoundsCount + " rounds. \r\nIf you have trouble playing, check out \"Combat help\" to the right. Restart?"; _uiConfig.RestartButton.transform.GetComponentInChildren <Text>().text = postMortem; } }
public override IEnumerable <IActionEffect> Execute() { if (_fromInventory) { _uiConfig.ItemHolder.RemoveItem(_uiConfig.ItemHolder.SelectedItemIndex); } else { ItemData itemAtFeet = _entityDetector.DetectItems(ActorData.LogicalPosition).First(i => i.ItemType == _item.ItemType); _entityRemover.RemoveItem(itemAtFeet); } bool isAllowed = ! (_gameContext.BasherSteps == 1 && new[] { ItemType.PotionOfBuddy, ItemType.PotionOfFriend, ItemType.PotionOfHealing, ItemType.PotionOfLight, ItemType.Food } .Contains(_item.ItemType) ); if (_item.ItemType == ItemType.PotionOfRecoverTail) { _textEffectPresenter.ShowTextEffect(ActorData.LogicalPosition, "Squeak! At last!", Color.yellow); } else { _textEffectPresenter.ShowTextEffect(ActorData.LogicalPosition, isAllowed ? "Ha!" : "Oh, it doesn't work!", Color.yellow); } if (_item.ItemType == ItemType.Weapon) { ItemDefinition previousWeapon = ActorData.WeaponWeld; if (_fromInventory) { _uiConfig.ItemHolder.AddItem(previousWeapon); } else { if (previousWeapon.Name == "Key") { _entitySpawner.SpawnItem(previousWeapon, ActorData.LogicalPosition); } else { _entitySpawner.SpawnWeapon(previousWeapon.WeaponDefinition, ActorData.LogicalPosition, previousWeapon); } } Image currentWeaponSprite = _uiConfig.CurrentWeaponHolder.gameObject.transform.Find("Image") .gameObject.GetComponent <Image>(); _uiConfig.TooltipCurrentWeaponPresenter.GetComponent <CurrentWeaponTooltip>().LabelWearingUpper.gameObject.SetActive(true); _uiConfig.TooltipCurrentWeaponPresenter.Present(_item, true); _uiConfig.TooltipPresenter.gameObject.SetActive(false); currentWeaponSprite.sprite = _item.Sprite; currentWeaponSprite.color = Color.white; ActorData.WeaponWeld = _item; Action effectAction = () => ((ActorBehaviour)ActorData.Entity).WeaponAnimator.Awake(); var effect = new LambdaEffect(effectAction); yield return(effect); } else if (_item.ItemType == ItemType.PotionOfRecoverTail) { Sprite withTailSprite = Resources.Load <Sprite>("Sprites/Characters/player_with_tail"); ActorData.Entity.SpriteRenderer.sprite = withTailSprite; ActorData.HasTail = true; } else if (isAllowed) { if (_item.ItemType == ItemType.Food) { ActorData.Health += (int)(ActorData.MaxHealth * 0.3f); if (ActorData.Health > ActorData.MaxHealth) { ActorData.Health = ActorData.MaxHealth; } } else if (_item.ItemType == ItemType.PotionOfHealing) { ActorData.Health += (int)(ActorData.MaxHealth * 0.7f); if (ActorData.Health > ActorData.MaxHealth) { ActorData.Health = ActorData.MaxHealth; } } else if (_item.ItemType == ItemType.PotionOfBuddy) { _entitySpawner.SpawnActor(ActorType.Buddy, ActorData.LogicalPosition); } else if (_item.ItemType == ItemType.PotionOfFriend) { _entitySpawner.SpawnActor(ActorType.Friend, ActorData.LogicalPosition); } else if (_item.ItemType == ItemType.PotionOfLight) { IEnumerable <ActorData> actorsAround = _entityDetector.DetectActors(ActorData.LogicalPosition, 4).Where(a => a != ActorData); foreach (var actorData in actorsAround) { actorData.Energy -= (2 + _rng.NextFloat() * 2f); actorData.Swords -= 1; if (actorData.Swords < 0) { actorData.Swords = 0; } string text = ""; if (actorData.ActorType != ActorType.Dog) { text = _rng.Choice(new[] { "My eyes!", "I can't see!", "Oh!", "Squeak!" }); } else { text = "Squeak!"; } _textEffectPresenter.ShowTextEffect(actorData.LogicalPosition, text); } } } }
public override IEnumerable <IActionEffect> Execute() { _uiConfig.ItemHolder.RemoveItem(_uiConfig.ItemHolder.SelectedItemIndex); _entitySpawner.SpawnItem(_item, ActorData.LogicalPosition); yield break; }