2022-01-31 18:39:13 +03:00

83 lines
2.9 KiB
C#

using System.Collections.Generic;
using CamControl;
using Controller;
using Data;
using DefaultNamespace.AI;
using GameUI;
using HexFiled;
using Runtime.Controller;
using Units;
using UnityEngine;
using Weapons;
namespace Chars
{
public class UnitFactory
{
private readonly HexGrid _hexGrid;
private readonly Weapon _chosenWeapon;
private readonly Data.Data _data;
private readonly Controllers _controllers;
private readonly UIController _uiController;
private readonly PaintedController _paintedController;
public UnitFactory(HexGrid grid, Data.Data data, UIController uiController, PaintedController paintedController,
Controllers controllers)
{
_hexGrid = grid;
_data = data;
_chosenWeapon = data.ChosenWeapon;
_uiController = uiController;
_paintedController = paintedController;
_controllers = controllers;
}
public void SpawnList(List<UnitInfo> units)
{
units.ForEach(Spawn);
}
public void Spawn(UnitInfo unitInfo)
{
if (unitInfo.isPlayer)
{
var player = new Unit(unitInfo, _chosenWeapon, _hexGrid);
PlayerControl playerControl = null;
CameraControl cameraControl =
new CameraControl(Camera.main, _data.CameraData);
_controllers.Add(cameraControl);
player.OnPlayerSpawned += p =>
{
playerControl = new PlayerControl(player, _uiController.PlayerControlView,
_uiController.PlayerInventoryView);
_controllers.Add(playerControl);
};
player.OnPlayerSpawned += unit => _uiController.CheatMenu.SetPlayerNData(unit, _data);
player.OnDeath += unit1 => _controllers.Remove(playerControl);
player.OnDeath += u => playerControl.Dispose();
player.OnPlayerSpawned += unit => cameraControl.InitCameraControl(unit.Instance);
player.OnDeath += unit => _uiController.CheatMenu.OnPlayerDeath();
player.OnDeath += p => _uiController.AdsMob.ShowCanvas(unitInfo, this);
player.OnDeath += _paintedController.PaintOnDeath;
player.Spawn(unitInfo.spawnPos);
}
else
{
var enemy = new Unit(unitInfo,
_data.WeaponsData.WeaponsList[Random.Range(0, _data.WeaponsData.WeaponsList.Count - 1)], _hexGrid);
AIAgent agent = new AIAgent(unitInfo, enemy);
//enemy.OnPlayerSpawned += x => _controllers.Add(agent);
enemy.OnDeath += x => { _controllers.Remove(agent); };
enemy.OnDeath += _paintedController.PaintOnDeath;
enemy.Spawn(unitInfo.spawnPos);
}
}
}
}