194 lines
6.1 KiB
C#
194 lines
6.1 KiB
C#
// Felix-Bang:FBUISpawner
|
||
// へ /|
|
||
// /\7 ∠_/
|
||
// / │ / /
|
||
// │ Z _,< / /`ヽ
|
||
// │ ヽ / 〉
|
||
// Y ` / /
|
||
// イ● 、 ● ⊂⊃〈 /
|
||
// () へ | \〈
|
||
// >ー 、_ ィ │ //
|
||
// / へ / ノ<| \\
|
||
// ヽ_ノ (_/ │//
|
||
// 7 |/
|
||
// >―r ̄ ̄`ー―_
|
||
// Describe:怪物孵化器
|
||
// Createtime:2018/10/12
|
||
|
||
using FBFramework;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
namespace FBApplication
|
||
{
|
||
public class FBUISpawner : FBView
|
||
{
|
||
#region 字段
|
||
FBMap f_map;
|
||
FBCarrot f_carrot = null;
|
||
#endregion
|
||
|
||
#region 属性
|
||
public override string Name
|
||
{
|
||
get { return FBConsts.V_Spawner; }
|
||
}
|
||
#endregion
|
||
|
||
#region 事件回调
|
||
public override void RegisterEvents()
|
||
{
|
||
EventLists.Add(FBConsts.E_SceneEnter);
|
||
EventLists.Add(FBConsts.E_SpawnMonster);
|
||
EventLists.Add(FBConsts.E_SpawnTower);
|
||
}
|
||
|
||
public override void HandleEvent(string eventName, object data = null)
|
||
{
|
||
switch (eventName)
|
||
{
|
||
case FBConsts.E_SceneEnter:
|
||
OnSpawnCarrot(data as FBSceneArgs);
|
||
break;
|
||
case FBConsts.E_SpawnMonster:
|
||
OnSpawnMonster(data as FBSpawnMonsterArgs);
|
||
break;
|
||
case FBConsts.E_SpawnTower:
|
||
OnSpawnTower(data as FBSpawnTowerArgs);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
private void OnMapGridClick(object sender, FBGridClickEventArgs e)
|
||
{
|
||
FBGameModel game = GetModel<FBGameModel>();
|
||
|
||
//游戏还未开始,那么不操作菜单
|
||
if (!game.IsPlaying)
|
||
return;
|
||
|
||
//如果有菜单显示,那么隐藏菜单
|
||
if (FBUITowerPopup.Instance.IsPopShow)
|
||
{
|
||
SendEvent(FBConsts.E_TowerHide);
|
||
return;
|
||
}
|
||
|
||
FBGrid grid = e.Grid;
|
||
if (!grid.CanHold)
|
||
{
|
||
SendEvent(FBConsts.E_TowerHide);
|
||
return;
|
||
}
|
||
|
||
if (grid.Data == null)
|
||
{
|
||
FBShowTowerCreatArgs args = new FBShowTowerCreatArgs()
|
||
{
|
||
Position = f_map.GetPosition(grid),
|
||
UpSide = grid.Index_Y < FBMap.RowCount / 2
|
||
};
|
||
SendEvent(FBConsts.E_ShowTowerCreat, args);
|
||
}
|
||
else
|
||
{
|
||
FBShowTowerUpgradeArgs args = new FBShowTowerUpgradeArgs() { Tower = grid.Data as FBTower };
|
||
SendEvent(FBConsts.E_ShowTowerUpgrade, args);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法
|
||
private void OnSpawnCarrot(FBSceneArgs args)
|
||
{
|
||
if (args.Index == 3)
|
||
{
|
||
f_map = GetComponent<FBMap>();
|
||
f_map.OnFBGridClick += OnMapGridClick;
|
||
//获取数据
|
||
FBGameModel gameModel = GetModel<FBGameModel>();
|
||
f_map.LoadLevel(gameModel.PlayLevel);
|
||
|
||
GameObject go = FBGame.Instance.ObjectPool.Spawn("Carrot");
|
||
f_carrot = go.GetComponent<FBCarrot>();
|
||
f_carrot.transform.position = f_map.Path[f_map.Path.Length - 1];
|
||
f_carrot.DeadAction += CarrotDead;
|
||
}
|
||
}
|
||
|
||
private void OnSpawnMonster(FBSpawnMonsterArgs args)
|
||
{
|
||
//创建怪物
|
||
string monsterName = "Monster" + args.MonsterID;
|
||
|
||
GameObject go= FBGame.Instance.ObjectPool.Spawn(monsterName);
|
||
FBMonster monster = go.GetComponent<FBMonster>();
|
||
monster.HPChangedAction += MonsterHPChanged;
|
||
monster.DeadAction += MonsterDead;
|
||
monster.ReachedAction += MonSterReched;
|
||
monster.OnLoad(f_map.Path);
|
||
}
|
||
|
||
private void OnSpawnTower(FBSpawnTowerArgs args)
|
||
{
|
||
//创建Tower
|
||
FBTowerInfo info = FBGame.Instance.StaticData.GetTower(args.TowerID);
|
||
GameObject go = FBGame.Instance.ObjectPool.Spawn(info.PrefabName);
|
||
|
||
FBTower tower = go.GetComponent<FBTower>();
|
||
tower.transform.position = args.Position;
|
||
|
||
//Tile里放入Tower信息
|
||
FBGrid tile = f_map.GetGrid(args.Position);
|
||
|
||
////初始化Tower
|
||
tower.Load(args.TowerID, tile,f_map.MapRect);
|
||
|
||
tile.Data = tower;
|
||
}
|
||
|
||
private void MonsterHPChanged(int arg1, int arg2)
|
||
{
|
||
|
||
}
|
||
|
||
private void MonSterReched(FBMonster monster)
|
||
{
|
||
//萝卜掉血
|
||
f_carrot.Damage(1);
|
||
//怪物死亡
|
||
monster.HP = 0;
|
||
}
|
||
|
||
private void MonsterDead(FBRole monster)
|
||
{
|
||
//回收
|
||
FBGame.Instance.ObjectPool.Unspawn(monster.gameObject);
|
||
|
||
GameObject[] monsters = GameObject.FindGameObjectsWithTag("Monster");
|
||
FBRoundModel roundModel = GetModel<FBRoundModel>();
|
||
|
||
// 萝卜没死 场景上已没有怪物 所有怪物已出完
|
||
if (!f_carrot.IsDead && monsters.Length <= 0 && roundModel.AllRoundComplete)
|
||
{
|
||
FBGameModel gameModel = GetModel<FBGameModel>();
|
||
//游戏胜利
|
||
SendEvent(FBConsts.E_LevelEnd,new FBEndLevelArgs() { ID = gameModel.PlayLevelIndex,IsWin=true });
|
||
}
|
||
}
|
||
|
||
private void CarrotDead(FBRole carrot)
|
||
{
|
||
FBGame.Instance.ObjectPool.Unspawn(carrot.gameObject);
|
||
|
||
FBGameModel gameModel = GetModel<FBGameModel>();
|
||
SendEvent(FBConsts.E_LevelEnd, new FBEndLevelArgs() { ID = gameModel.PlayLevelIndex, IsWin = false });
|
||
}
|
||
#endregion
|
||
}
|
||
}
|