Newer
Older
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class EnemySpawnController : MonoBehaviour
{
[SerializeField] List<Opponent> enemyList;
[SerializeField] List<Image> enemySprites;
[SerializeField] GameObject dragObject;
Dictionary<Opponent, Image> enemies = new Dictionary<Opponent, Image>();
float mana;
Opponent activeSpawn;
GameObject enemyImage;
BaseCameraController cameraController;
private void Awake()
{
mana = -1;
cameraController = Camera.main.GetComponent<BaseCameraController>();
for (int i = 0; i < enemyList.Count; i++)
{
enemies.Add(enemyList[i], enemySprites[i]);
}
}
// Update is called once per frame
void Update()
{
var actualMana = StatsManager.instance.GetMana();
if (mana != actualMana)
mana = actualMana;
foreach (KeyValuePair<Opponent, Image> enemy in enemies)
{
if (enemy.Key.enemyCost > mana)
{
enemy.Value.color = new Color(0.3f, 0.3f, 0.3f, 1f);
enemy.Value.color = new Color(1f, 1f, 1f, 1f);
}
}
}
void SetEnemyToSpawnObject(string enemyName)
{
foreach (Opponent enemy in enemyList)
{
if (enemy.Name == enemyName)
{
activeSpawn = enemy;
}
}
}
public void OnEnemyMouseDown(string enemyName)
{
SetEnemyToSpawnObject(enemyName);
if (StatsManager.instance.ModifyMana(-1 * (int)activeSpawn.enemyCost))
{
dragObject.GetComponent<Image>().sprite = activeSpawn.EnemySprite;
enemyImage = Instantiate(dragObject, GetPreviewWorldPosition(), Quaternion.identity, transform);
public void OnEnemyDrag()
{
if (enemyImage != null)
{
enemyImage.transform.position = GetPreviewWorldPosition();
var zoomRatio = 1 / cameraController.zoomRatio;
enemyImage.transform.localScale = new Vector3(zoomRatio, zoomRatio, zoomRatio);
}
}
public void OnEnemyDrop()
{
if (enemyImage != null)
{
Destroy(enemyImage);
enemyImage = null;
var targetPos = GetPreviewWorldPosition();
var newEnemy = Instantiate(activeSpawn.enemyPrefab, targetPos, Quaternion.identity);
// The spawned Enemy has the pivot at the bottom, not in the middle.
// Move it down by half its height to match the preview position.
targetPos.y -= newEnemy.GetComponent<SpriteRenderer>().bounds.extents.y;
newEnemy.transform.position = targetPos;
Vector3 GetPreviewWorldPosition()
{
Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
pos.z = 0;
return pos;
}