private void InitPortBuildings()
    {
        MSeaAreaData = Globals.Instance.MGameDataManager.MCurrentSeaAreaData;
        PortData portData = MSeaAreaData.MPortData;

        foreach (BuildingData data in portData.BuildingDataList.Values)
        {
            _mHoldBuildingList.Add(data.LogicID, InstantiateBuilding(data));
        }

        // Play building change effect
        if (portData.BuildingChangeData.IsBuildingChange)
        {
            Building building = null;
            int      logicID  = portData.BuildingChangeData.CreateBuildingLogicID;
            if (-1 != logicID)
            {
                _mHoldBuildingList.TryGetValue(logicID, out building);
                if (null == building)
                {
                    return;
                }

                Vector3 worldPos = building.U3DGameObject.transform.position;
                MainCameraMoveTo(building.U3DGameObject, delegate()
                {
                    Globals.Instance.MEffectManager.CreateBuildingChangeEffect(worldPos, true, null);

                    string wordText = Globals.Instance.MDataTableManager.GetWordText(22000001);
                    wordText        = string.Format(wordText, 08, 22, building.Property.Name, portData.BasicData.PortName);
                    EZ3DItem ezItem = Globals.Instance.M3DItemManager.Create3DSimpleText(building.U3DGameObject, wordText, 0);
                    // destory item delay 2 second
                    Globals.Instance.M3DItemManager.DestroyEZ3DItem(ezItem.gameObject, 2.0f);
                });
            }

            logicID = portData.BuildingChangeData.DestroyBuildingLogicID;
            if (-1 != logicID)
            {
                PortsBuildingConfig cfg = Globals.Instance.MDataTableManager.GetConfig <PortsBuildingConfig>();

                PortBuildingElement element = null;
                bool isExist = cfg.GetPortBuildingElement(portData.PortID, out element);
                if (!isExist)
                {
                    return;
                }

                BuildingElement bldElement = element.GetBuildingElement(logicID);
                if (null == bldElement)
                {
                    return;
                }

                Vector3 worldPos = HelpUtil.GetSplitVector3(bldElement._buildingPostion);
                MainCameraMoveTo(worldPos + AimBuildingDeltaPos, AimBuildingDeltaEular, delegate()
                {
                    Globals.Instance.MEffectManager.CreateBuildingChangeEffect(worldPos, false, null);

                    string buildName = Globals.Instance.MDataTableManager.GetWordText(bldElement._buildingNameID);
                    string wordText  = Globals.Instance.MDataTableManager.GetWordText(22000002);
                    wordText         = string.Format(wordText, 08, 22, buildName, portData.BasicData.PortName);
                    EZ3DItem ezItem  = Globals.Instance.M3DItemManager.Create3DSimpleText(worldPos, wordText, 0);

                    Globals.Instance.M3DItemManager.DestroyEZ3DItem(ezItem.gameObject, 2.0f);
                    // tzz f****d
                    // who create who destory,stuip f**k!
                    //GameObject.Destroy(ezItem.gameObject, 2.0f);
                }
                                 );
            }
        }
        if (Globals.Instance.MNpcManager.mbDatingMapPlay)
        {
            Globals.Instance.MNpcManager.mbDatingMapPlay = false;
            Globals.Instance.MNpcManager.MapMoveAnimation();
        }
    }