示例#1
0
    void OnEntitySpawned(SceneEntityPosAgent agent)
    {
        m_MaxCount++;

        if (!EntityMonsterBeacon.IsBcnMonsterProtoId(agent.protoId))            // not encoded, unexpected agent
        {
            return;
        }

        int spType, lvl, spawnType;

        EntityMonsterBeacon.DecodeBcnMonsterProtoId(agent.protoId, out spType, out lvl, out spawnType);

        int areaType = PeGameMgr.IsStory
            ? PeMappingMgr.Instance.GetAiSpawnMapId(new Vector2(agent.Pos.x, agent.Pos.z))
            : AiUtil.GetMapID(agent.Pos);

        AISpawnTDWavesData.TDMonsterSpData data = AISpawnTDWavesData.GetMonsterSpData(false, spType, lvl, spawnType, areaType);

        float rhp = data != null ? data._rhp : 200.0f;
        float dps = data != null ? data._dps : 50.0f;

        SiegeAgent siegeAgent = new SiegeAgent(this, agent, rhp, dps);

        agent.spInfo = new SiegeAgent.AgentInfo(m_Beacon, siegeAgent);
        m_Agents.Add(siegeAgent);
    }
    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);
    }
    static int GetMonsterProtoIDForBeacon(int bcnProtoId, Vector3 pos, ref float fScale)
    {
        if (!EntityMonsterBeacon.IsBcnMonsterProtoId(bcnProtoId))               // not encoded
        {
            return(bcnProtoId);
        }

        int spType, lvl, spawnType;

        EntityMonsterBeacon.DecodeBcnMonsterProtoId(bcnProtoId, out spType, out lvl, out spawnType);

        int terType  = 0;
        int areaType = -1;

        AISpawnTDWavesData.TDMonsterData md = null;
        if (spType < EntityMonsterBeacon.TowerDefenseSpType_Beg)
        {
            PointType pt = AiUtil.GetPointType(pos);
            switch (pt)
            {
            default:
            case PointType.PT_Ground:
                terType = 0;
                break;

            case PointType.PT_Water:
                terType = 1;
                break;

            case PointType.PT_Slope:
                terType = 2;
                break;

            case PointType.PT_Cave:
                terType = 3;
                break;
            }
            areaType = PeGameMgr.IsStory ? PeMappingMgr.Instance.GetAiSpawnMapId(new Vector2(pos.x, pos.z)) : AiUtil.GetMapID(pos);
            if (PeGameMgr.IsAdventure && areaType == 5)
            {
                areaType = 2;
            }
        }
        int opPlayerId = -1;

        if (MainPlayerCmpt.gMainPlayer != null)
        {
            SkAliveEntity skPlayer = MainPlayerCmpt.gMainPlayer.Entity.aliveEntity;
            if (skPlayer != null)
            {
                opPlayerId = (int)skPlayer.GetAttribute(AttribType.DefaultPlayerID);
            }
        }
        md = AISpawnTDWavesData.GetMonsterProtoId(!PeGameMgr.IsStory, spType, lvl, spawnType, areaType, terType, opPlayerId);
        if (null != md)
        {
            // md.ProtoId |= EntityProto.IdAirbornePujaMask;	// test airborne
            if (md.IsAirbornePuja)
            {
                md.ProtoId |= EntityProto.IdAirbornePujaMask;
            }
            if (md.IsAirbornePaja)
            {
                md.ProtoId |= EntityProto.IdAirbornePajaMask;
            }
            if (md.IsGrp)
            {
                md.ProtoId |= EntityProto.IdGrpMask;
            }
            return(md.ProtoId);
        }
        return(-1);
    }