public void CreateTower(TowerData towerData, IPlacementArea placementArea, IntVector2 placeGrid, Vector3 position, Quaternion rotation)
        {
            if (towerData == null)
            {
                return;
            }

            TowerLevelData towerLevelData = towerData.GetTowerLevelData(0);

            if (dataPlayer.Energy < towerLevelData.BuildEnergy)
            {
                return;
            }

            dataPlayer.AddEnergy(-towerLevelData.BuildEnergy);

            Tower tower = dataTower.CreateTower(towerData.Id);

            if (tower == null)
            {
                Log.Error("Create tower fail,Tower data id is '{0}'.", towerData.Id);
                return;
            }

            entityLoader.ShowEntity(towerData.EntityId, TypeUtility.GetEntityType(tower.Type),
                                    (entity) =>
            {
                EntityTowerBase entityTowerBase = entity.Logic as EntityTowerBase;
                dicTowerInfo.Add(tower.SerialId, TowerInfo.Create(tower, entityTowerBase, placementArea, placeGrid));
            }
                                    , EntityDataTower.Create(tower, position, rotation));

            HidePreviewTower();
        }
        public static EntityDataTower Create(Tower tower, object userData = null)
        {
            EntityDataTower entityData = ReferencePool.Acquire <EntityDataTower>();

            entityData.Tower = tower;
            return(entityData);
        }
        protected override void OnHide(bool isShutdown, object userData)
        {
            base.OnHide(isShutdown, userData);

            entityDataTower       = null;
            entityTowerLevel      = null;
            entityLogicTowerLevel = null;
        }
        public static EntityDataTower Create(Tower tower, Vector3 position, Quaternion rotation, object userData = null)
        {
            EntityDataTower entityData = ReferencePool.Acquire <EntityDataTower>();

            entityData.Tower    = tower;
            entityData.Position = position;
            entityData.Rotation = rotation;
            return(entityData);
        }
        protected override void OnShow(object userData)
        {
            base.OnShow(userData);

            entityDataTower = userData as EntityDataTower;
            if (entityDataTower == null)
            {
                Log.Error("Entity tower '{0}' tower data invaild.", Id);
                return;
            }

            hp = entityDataTower.Tower.MaxHP;

            ShowTowerLevelEntity(entityDataTower.Tower.Level);

            Subscribe(UpgradeTowerEventArgs.EventId, OnUpgradeTower);
        }