private float UpdateTowers(float inter)
        {
            if (playerPosition == null)
            {
                return(inter);
            }

            float minLength = float.MaxValue;

            Entities.With(groupTower).ForEach((Entity entity,
                                               ref SymbolicTower.Component tower,
                                               ref Position.Component position,
                                               ref SpatialEntityId entityId) =>
            {
                var settings = TowerDictionary.Get(tower.Side);

                GameObject towerObj;
                if (towerObjDic.ContainsKey(tower.Side) == false)
                {
                    towerObj = GameObject.Instantiate(settings.TowerObject);
                    towerObj.transform.SetParent(rootObject.transform, false);
                }
                else
                {
                    towerObj = towerObjDic[tower.Side];
                }

                var t_pos  = position.Coords.ToUnityVector() + this.Origin;
                var diff   = t_pos - playerPosition.Value;
                var length = diff.magnitude;

                if (minLength > length)
                {
                    minLength = length;
                }

                var rate = length / TowerDictionary.DispLength;

                var scaledPos = rate * diff + playerPosition.Value;

                towerObj.transform.localScale = Vector3.one * rate;
                towerObj.transform.position   = scaledPos;
            });

            return(minLength);
        }
        private void TowerQuery(Entity entity,
                                ref SymbolicTower.Component tower,
                                ref Position.Component position)
        {
            var settings = TowerDictionary.Get(tower.Side);

            if (settings == null)
            {
                Debug.LogErrorFormat("There is no Tower Settings. Side:{0}", tower.Side);
            }

            GameObject towerObj;

            if (towerObjDic.ContainsKey(tower.Side) == false)
            {
                towerObj = GameObject.Instantiate(settings.TowerObject);
                towerObj.transform.SetParent(rootObject.transform, false);
                towerObjDic[tower.Side] = towerObj;
            }
            else
            {
                towerObj = towerObjDic[tower.Side];
            }

            var t_pos  = position.Coords.ToUnityVector() + this.Origin;
            var diff   = t_pos - playerPosition.Value;
            var length = Mathf.Max(minLimitLength, diff.magnitude);

            if (minLength > length)
            {
                minLength = length;
            }

            var rate = Mathf.Min(1.0f, TowerDictionary.DispLength / length);

            var scaledPos = rate * diff + playerPosition.Value;

            towerObj.transform.localScale = Vector3.one * rate;
            towerObj.transform.position   = scaledPos;
        }