示例#1
0
    void GetTdGenPos(out Vector3 pos)
    {
        pos = Vector3.zero;
        TypeTowerDefendsData data = MissionManager.GetTypeTowerDefendsData(TargetId);

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                pos = Pathea.PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                pos = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                pos = Pathea.EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                pos = Pathea.EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out pos))
                {
                    pos = Pathea.PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (!VArtifactUtil.GetTownPos(data.m_Pos.id, out pos))
                {
                    pos = Pathea.PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = pos;
        }
    }
    public static EntityMonsterBeacon CreateMonsterBeaconByTDID(int spDataId, Transform targetTrans,
                                                                TowerInfoUIData uiData, int entityId = -1, TypeTowerDefendsData data = null, int releaseNpcid = -1, bool bOnlyMonster = false)
    {
        // Get type mask
        int        campCol    = -1;
        List <int> spawnTypes = GetSpawnTypeMask(bOnlyMonster, out campCol);

        AISpawnTDWavesData.TDWaveSpData spData = AISpawnTDWavesData.GetWaveSpData(spDataId, UnityEngine.Random.value, spawnTypes);
        if (spData == null)
        {
            return(null);
        }

        GameObject go = new GameObject("MonsterBeacon");
        Vector3    v  = new Vector3();

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                v = PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                v = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                v = EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                v = EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (!VArtifactUtil.GetTownPos(data.m_Pos.id, out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = v;

            go.transform.position = v;
            go.transform.rotation = Quaternion.identity;
        }
        else if (targetTrans != null)
        {
            v = targetTrans.position;
            go.transform.position = targetTrans.position;
            go.transform.rotation = targetTrans.rotation;
        }
        EntityMonsterBeacon bcn = go.AddComponent <EntityMonsterBeacon>();

        EntityMgr.Instance.AddAfterAssignId(bcn, entityId != -1 ? entityId : Pathea.WorldInfoMgr.Instance.FetchNonRecordAutoId());
        bcn._campCol  = campCol;
        bcn._uiData   = uiData;
        bcn._spData   = spData;
        bcn._spDataId = spDataId;
        bcn._position = go.transform.position;
        bcn._forward  = go.transform.forward;
        bcn.PreTime   = (float)(spData._timeToStart + spData._waveDatas[0]._delayTime);

        if (UITowerInfo.Instance != null && uiData != null)
        {
            UITowerInfo.Instance.SetInfo(uiData);
            UITowerInfo.Instance.Show();
            UITowerInfo.Instance.e_BtnReady += () => { bcn.PreTime = 0; };
        }

        bcn.StartCoroutine(bcn.RefreshTowerMission());
        return(bcn);
    }
    public static EntityMonsterBeacon CreateMonsterBeaconBySweepID(List <int> sweepDataId, Transform targetTrans,
                                                                   TowerInfoUIData uiData, int preTime, int entityId = -1, TypeTowerDefendsData data = null, int releaseNpcid = -1)
    {
        GameObject go = new GameObject("MonsterBeacon");

        Vector3 v = new Vector3();

        if (null != data)
        {
            switch (data.m_Pos.type)
            {
            case TypeTowerDefendsData.PosType.getPos:
                v = PeCreature.Instance.mainPlayer.position;
                break;

            case TypeTowerDefendsData.PosType.pos:
                v = data.m_Pos.pos;
                break;

            case TypeTowerDefendsData.PosType.npcPos:
                v = EntityMgr.Instance.Get(data.m_Pos.id).position;
                break;

            case TypeTowerDefendsData.PosType.doodadPos:
                v = EntityMgr.Instance.GetDoodadEntities(data.m_Pos.id)[0].position;
                break;

            case TypeTowerDefendsData.PosType.conoly:
                if (!CSMain.GetAssemblyPos(out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            case TypeTowerDefendsData.PosType.camp:
                if (VArtifactUtil.GetTownPos(data.m_Pos.id, out v))
                {
                    v = PeCreature.Instance.mainPlayer.position;
                }
                break;

            default:
                break;
            }
            data.finallyPos = v;
        }
        go.transform.position = v;

        AISpawnTDWavesData.TDWaveSpData spData = MonsterSweepData.GetWaveSpData(sweepDataId, v);
        if (spData == null)
        {
            return(null);
        }

        EntityMonsterBeacon bcn = go.AddComponent <EntityMonsterBeacon>();

        bcn.isSweep = true;
        EntityMgr.Instance.AddAfterAssignId(bcn, entityId != -1 ? entityId : Pathea.WorldInfoMgr.Instance.FetchNonRecordAutoId());
        bcn._uiData   = uiData;
        bcn._spData   = spData;
        bcn._position = v;
        bcn._forward  = Vector3.forward;
        bcn.PreTime   = (float)(preTime + spData._waveDatas[0]._delayTime);
        if (UITowerInfo.Instance != null && uiData != null)
        {
            UITowerInfo.Instance.SetInfo(uiData);
            UITowerInfo.Instance.Show();
            UITowerInfo.Instance.e_BtnReady += () => { bcn.PreTime = 0; };
        }

        bcn.StartCoroutine(bcn.RefreshTowerMission());
        return(bcn);
    }
    public bool Start()
    {
        MissionCommonData data = MissionManager.GetMissionCommonData(MissionId);

        for (int i = 0; i < data.m_TargetIDList.Count; i++)
        {
            if (data.m_TargetIDList[i] == TargetId)
            {
                _idxTarId = i;
                break;
            }
        }
        if (_idxTarId == -1)
        {
            return(false);
        }
        _data = MissionManager.GetTypeMonsterData(TargetId);
        if (_data == null)
        {
            return(false);
        }
        Vector3 referToPos;

        switch (_data.m_mr.refertoType)
        {
        case ReferToType.None:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;

        case ReferToType.Player:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;

        case ReferToType.Town:
            VArtifactUtil.GetTownPos(_data.m_mr.referToID, out referToPos);
            break;

        case ReferToType.Npc:
            referToPos = EntityMgr.Instance.Get(MissionManager.Instance.m_PlayerMission.adId_entityId[_data.m_mr.referToID]).position;
            break;

        default:
            referToPos = PeCreature.Instance.mainPlayer.position;
            break;
        }
        if (referToPos == Vector3.zero)
        {
            return(false);
        }
        if (PeGameMgr.IsSingle || PeGameMgr.IsTutorial)
        {
            if (_data.type == 2)
            {
                DoodadEntityCreator.commonDeathEvent += OnMonsterDeath;
            }
            else
            {
                MonsterEntityCreator.commonDeathEvent += OnMonsterDeath;
            }
        }

        GenMonsterInMission = !PeGameMgr.IsStory;
        if (GenMonsterInMission)
        {
#if  DbgNearGen
            Vector2 v2 = Vector2.zero;
#else
            Vector2 v2 = UnityEngine.Random.insideUnitCircle.normalized * _data.m_mr.radius1;
#endif
            Vector3 center = referToPos + new Vector3(v2.x, 0.0f, v2.y);
            //for (int i = 0; i < _data.m_MonsterList.Count; i++) {
            //	int num = _data.m_MonsterList[i].type;
            //             int protoId = _data.m_MonsterList[i].npcs[UnityEngine.Random.Range(0, _data.m_MonsterList[i].npcs.Count)];
            //	for (int j = 0; j < num; j++) {
            //		Vector3 pos = AiUtil.GetRandomPosition (center, 0, _data.m_mr.radius2);
            //		pos.y = SceneEntityPosAgent.PosYTBD;	// let posagent to set y
            //		SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId);
            //		agent.spInfo = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask());
            //		_agents.Add (agent);
            //		SceneMan.AddSceneObj (agent);
            //	}
            //}

            for (int i = 0; i < _data.m_CreMonList.Count; i++)
            {
                for (int j = 0; j < _data.m_CreMonList[i].monNum; j++)
                {
                    Vector3 pos = AiUtil.GetRandomPosition(center, 0, _data.m_mr.radius2);
                    pos.y = SceneEntityPosAgent.PosYTBD;    // let posagent to set y
                    int protoId = _data.m_CreMonList[i].monID;
                    if (_data.m_CreMonList[i].type == 1)
                    {
                        protoId |= EntityProto.IdGrpMask;
                    }
                    SceneEntityPosAgent agent = MonsterEntityCreator.CreateAgent(pos, protoId);
                    agent.spInfo  = new MonsterEntityCreator.AgentInfo(EntityMonsterBeacon.GetSpBeacon4MonsterKillTask());
                    agent.canRide = false;
                    _agents.Add(agent);
                    SceneMan.AddSceneObj(agent);
                }
            }
        }
        return(true);
    }