mycj_demo/mycj/Assets/Game/Scripts/Application/02View/Level/FBUISpawner.cs
2024-12-02 09:37:47 +08:00

194 lines
6.1 KiB
C#
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Felix-BangFBUISpawner
//   へ     /|
//  /7    ∠_/
//  / │    
//  Z _,    /`ヽ
// │     ヽ   /  〉
//  Y     `  /  /
// イ● 、 ●  ⊂⊃〈  /
// ()  へ    | \〈
//  >ー 、_  ィ  │
//  / へ   / ノ<|
//  ヽ_ノ  (_  │//
//  7       |
//  ―r ̄ ̄`ー―_
// Describe怪物孵化器
// Createtime2018/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
}
}