void HandleUsed() { GetComponent <SpriteRenderer>().sprite = usedAltar; GetComponent <Animator>().enabled = false; GetComponentInChildren <ParticleSystem>()?.Stop(); AnimUtils.ShowFloatingText("Upgraded first Rune!", transform.position); }
// Start is called before the first frame update void Start() { this.enemyRunesManager = GameObject.Find("Enemy Runes").GetComponent <EnemyRunesManager>(); transform.localScale = new Vector3(0, 0, 1); Enemy.OnDeath += () => { Destroy(this.gameObject); }; Enemy.OnAttack += (target) => { float intensity = 1; var startPosition = transform.position; var targetPosition = new Vector3(target.Coordinates.x, target.Coordinates.y, startPosition.z); /// attack animation attackAnimation = StartCoroutine(AnimUtils.Animate(0.5f, (t) => { float lerp = Mathf.Pow(Mathf.Cos(Mathf.PI / 2 + Mathf.PI * Mathf.Sqrt(t)), 4) * intensity; transform.position = Vector3.Lerp(startPosition, targetPosition, lerp); if (t == 1) { attackAnimation = null; } })); }; Enemy.OnHeal += (int heal) => { AnimUtils.AddDamageOrHealNumber(heal, transform.position, false); }; Enemy.OnHit += (int damage) => { AnimUtils.AddDamageOrHealNumber(damage, transform.position, true); }; Enemy.OnRuneTriggered += (message) => AnimUtils.ShowFloatingText(message, transform.position); }
void Start() { Player = Grid.instance.Player; Player.OnHit += HandlePlayerHit; Player.OnHeal += HandleHeal; Player.OnRuneTriggered += (message) => AnimUtils.ShowFloatingText(message, transform.position); transform.position = new Vector3(Player.Coordinates.x, Player.Coordinates.y, 0); SoundEffectSource = GameObject.Find("Player").GetComponent <AudioSource>(); attackEffects = new List <AudioClip>(new AudioClip[] { (AudioClip)Resources.Load("Sounds/thwack-01"), (AudioClip)Resources.Load("Sounds/thwack-02"), (AudioClip)Resources.Load("Sounds/thwack-04"), (AudioClip)Resources.Load("Sounds/thwack-06"), (AudioClip)Resources.Load("Sounds/thwack-07"), (AudioClip)Resources.Load("Sounds/thwack-08"), (AudioClip)Resources.Load("Sounds/thwack-09"), }); }
public IEnumerator actionTaken(bool delay, Action then) { _elapsedTurns += 1; EnqueueEvent(new GameEvent(GameEvent.EventType.TURN_ELAPSED)); var turnWaitDuration = delay ? 0.25f : 0; // wait 0.2f seconds yield return(new WaitForSeconds(turnWaitDuration)); ClearEventQueue(); Entities.FindAll(e => e.Dead).ForEach(e => { e.GoDie(); Rune rune = e.RuneList[0]; if (rune != null) { AnimUtils.ShowFloatingText("Rune Shard Recovered!", new Vector3(e.Coordinates.x, e.Coordinates.y, 0)); if (UnityEngine.Random.value > 0.5f) { Player.AddRuneShard(rune.action); } else { Player.AddRuneShard(rune.trigger); } } this.EnqueueEvent(new GameEvent(GameEvent.EventType.ENEMY_DEAD)); }); Entities.RemoveAll(e => e.Dead); bool enemiesMoved = false; foreach (var e in Enemies) { e.TakeTurn(); // if (e.isVisible) { enemiesMoved = true; // yield return new WaitForSeconds(turnWaitDuration); // } } ClearEventQueue(); // We want to prevent movement scumming, so if the player hasn't been hit in 75 turns, spawn some enemies if (++Player.TurnsSinceHitByEnemy >= 200) { var positions = EnumerateCircle(Player.Coordinates, 3) .Where(pos => canOccupy(pos)) .ToList() .Shuffle() .Take(2); foreach (var pos in positions) { Enemy enemy = new Enemy0(pos); AddEntity(enemy); OnEntityAdded(enemy); } Player.TurnsSinceHitByEnemy = 0; } if (enemiesMoved) { yield return(new WaitForSeconds(turnWaitDuration)); } /// Move onto the next floor! if (Tiles[Player.Coordinates.x, Player.Coordinates.y] is Downstairs) { Player.score += 10; OnCleared?.Invoke(); } then(); }