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; }