// Use this for initialization void Start() { Arg tArg = MySceneManager.getArg("map"); mMap = LocalMapCreater.create(tArg.get <string>("mapName")); //ユーザ MapCharacter tPlayer = MapCharacterCreater.create("player", "player/player", new Direction(tArg.get <string>("direction")), "player"); tPlayer.setPosition(new Vector2(tArg.get <int>("positionX"), tArg.get <int>("positionY"))); mMap.addCharacter(tPlayer); GameObject tCamera = GameObject.Find("MapCamera"); tCamera.transform.parent = tPlayer.transform; tCamera.transform.localPosition = new Vector3(0, 0, -100); //ui MySceneManager.openScene("mapUi", new Arg()); Subject.addObserver(new Observer("mapUi", (message) => { if (message.name == "menuButton") { Debug.Log("open menu"); } }, "map")); }
/// <summary> /// Release a local slot by its symbol. /// Slot is not associated with symbol after this. /// </summary> internal void FreeLocal(ILocalSymbol symbol) { LocalDefinition slot = GetLocal(symbol); LocalMap.Remove(symbol); FreeSlot(slot); }
public void CreateLocalMap(GameObject panel) { InputMapSize(); if(X >= MinMapSize && Y >= MinMapSize && X <= MaxMapSize && Y <= MaxMapSize) { //Очищаем карту перед созданием новой DestroyMap(); LocalMap map = new LocalMap(X, Y); for(ushort i = 0; i < map.Width; ++i) { for(ushort j = 0; j < map.Height; ++j) { //map.HeightMatrix[j, i] = TerrainHeight; } } GameObject.FindWithTag("WorldVisualizer").GetComponent<WorldVisualizer>().RenderWholeMap(map); panel.gameObject.SetActive(false); } if(X < MinMapSize || Y < MinMapSize) { Debug.Log("Меньше " + MinMapSize); } if(X > MaxMapSize || Y > MaxMapSize) { Debug.Log("Больше " + MaxMapSize); } }
public PathFinishCondition(Vector3Int target, ActionTargetTypeEnum targetType) { if (targetType == EXACT || targetType == ANY) { acceptable.Add(target); } if (targetType == NEAR || targetType == ANY) // add near tiles { LocalMap map = GameModel.localMap; PositionUtil.allNeighbour .Select(delta => target + delta) .Where(pos => map.inMap(pos)) .Where(pos => map.passageMap.passage.get(pos) == PASSABLE.VALUE) .Apply(pos => acceptable.Add(pos)); PositionUtil.allNeighbour .Select(delta => target + delta) .Select(pos => pos.add(0, 0, -1)) .Where(pos => map.inMap(pos)) .Where(pos => map.blockType.get(pos) == RAMP.CODE) .Apply(pos => acceptable.Add(pos)); } if (targetType != NEAR && targetType != ANY) { return; } }
/// <summary> /// Release a local slot by its identity. /// Slot is not associated with identity after this. /// </summary> internal void FreeLocal(object identity) { var slot = GetLocal(identity); LocalMap.Remove(identity); FreeSlot(slot); }
public void run(LocalMap aMap, VoidFunction aCallback) { mJackedAi = new Dictionary <string, MapCharacter.MapCharaJackedAi>(); //AI Jack //jackできるか確認 foreach (string tName in mEvent.get <List <String> >("jack")) { if (!aMap.getCharacter(tName).canJackAi())//jack不可(イベント発火中止) { aCallback(); return; } } //jackする foreach (string tName in mEvent.get <List <String> >("jack")) { mJackedAi[tName] = aMap.getCharacter(tName).jackAi(); } //イベント発火 runEventList(() => { //jackしたAIを解放 foreach (KeyValuePair <string, MapCharacter.MapCharaJackedAi> tAi in mJackedAi) { tAi.Value.endJack(); } mJackedAi = new Dictionary <string, MapCharacter.MapCharaJackedAi>(); //会話ウィンドウを閉じる ConversationWindow.close(() => { aCallback(); }); }); }
private Vector3 speed; // keeps sprite speed between ticks public MouseMovementSystem(LocalGameRunner initializer) { text = initializer.text; sprite = initializer.selector; map = GameModel.localMap; bounds = new IntBounds3(0, 0, 0, map.xSize, map.ySize, map.zSize); }
/// <summary> /// Release a local slot by its symbol. /// Slot is not associated with symbol after this. /// </summary> internal void FreeLocal(ILocalSymbolInternal symbol) { var slot = GetLocal(symbol); LocalMap.Remove(symbol); FreeSlot(slot); }
public override void generate() { Debug.Log("placing ramps"); localMap = GenerationState.get().localGenContainer.localMap; fillRamps(); fillFloors(); }
public LocalMapTileUpdater(RectTransform mapHolder) { this.mapHolder = mapHolder; layerPrefab = Resources.Load <GameObject>("prefabs/LocalMapLayer"); map = GameModel.localMap; tileSetHolder.loadAll(); }
internal static void CreateMarker(LocalMap map, PointerEventData eventData) { ModMapMarker marker = NewMarker(map, eventData); LocalMap.Markers.Add(marker); LocalMap_Set(map); // Force a refresh to display the new mark Game.Instance.UI.Common.UISound.Play(UISoundType.ButtonClick); }
// updates camera bounds to make 3 tiles around map visible private void updateCameraBounds() { LocalMap map = GameModel.localMap; cameraBounds.set(0, 0, map.xSize, map.ySize); cameraBounds.extendX((int)(overlookTiles - cameraWidth())); cameraBounds.extendY((int)(overlookTiles - camera.orthographicSize)); cameraBounds.move(0, GameModel.get().selector.position.z / 2f); }
// updates camera bounds to make 3 tiles around map visible private void updateCameraBounds() { LocalMap map = GameModel.localMap; cameraBounds.set(0, 0, map.xSize, map.ySize); cameraBounds.extendX((int)(overlookTiles - cameraWidth())); cameraBounds.extendY((int)(overlookTiles - camera.orthographicSize)); cameraBounds.move(0, -target.z / 4f); }
public PassageMap(LocalMap localMap) { this.localMap = localMap; blockTypeMap = localMap.blockType; cachePosition = new Vector3Int(); area = new UtilByteArrayWithCounter(localMap.xSize, localMap.ySize, localMap.zSize); passage = new UtilByteArray(localMap.xSize, localMap.ySize, localMap.zSize); updater = new PassageUpdater(localMap, this); util = new PassageUtil(localMap, this); }
private void createLayers(LocalMap map) { Transform transform = mapHolder.transform; for (int i = 0; i < map.zSize; i++) { GameObject layer = GameObject.Instantiate(layerPrefab, new Vector3(0, i / 2f, -i * 2) + transform.position, Quaternion.identity, transform); layers.Add(layer.transform.GetComponentInChildren <Tilemap>()); } }
public LocalGenContainer() { LocalGenConfig config = GenerationState.get().localGenConfig; this.world = GenerationState.get().world; heightsMap = new float[config.areaSize, config.areaSize]; config.localElevation = (int)(world.worldMap.elevation[config.location.x, config.location.y] * config.localElevation); Debug.Log("localGenContainer: area size" + config.areaSize); localMap = new LocalMap(config.areaSize, config.areaSize, config.localElevation + config.airLayersAboveGround); }
public RowRecogDescForge( EventType parentEventType, EventType rowEventType, EventType compositeEventType, EventType multimatchEventType, int[] multimatchStreamNumToVariable, int[] multimatchVariableToStreamNum, ExprNode[] partitionBy, MultiKeyClassRef partitionByMultiKey, LocalMap variableStreams, bool hasInterval, bool iterateOnly, bool unbound, bool orTerminated, bool collectMultimatches, bool defineAsksMultimatches, int numEventsEventsPerStreamDefine, string[] multimatchVariablesArray, RowRecogNFAStateForge[] startStates, RowRecogNFAStateForge[] allStates, bool allMatches, MatchRecognizeSkipEnum skip, ExprNode[] columnEvaluators, string[] columnNames, TimePeriodComputeForge intervalCompute, int[] previousRandomAccessIndexes, AggregationServiceForgeDesc[] aggregationServices) { this._parentEventType = parentEventType; RowEventType = rowEventType; this._compositeEventType = compositeEventType; this._multimatchEventType = multimatchEventType; this._multimatchStreamNumToVariable = multimatchStreamNumToVariable; this._multimatchVariableToStreamNum = multimatchVariableToStreamNum; this._partitionBy = partitionBy; this._partitionByMultiKey = partitionByMultiKey; this._variableStreams = variableStreams; this._hasInterval = hasInterval; this._iterateOnly = iterateOnly; this._unbound = unbound; this._orTerminated = orTerminated; this._collectMultimatches = collectMultimatches; this._defineAsksMultimatches = defineAsksMultimatches; this._numEventsEventsPerStreamDefine = numEventsEventsPerStreamDefine; this._multimatchVariablesArray = multimatchVariablesArray; this._startStates = startStates; this._allStates = allStates; this._allMatches = allMatches; this._skip = skip; this._columnEvaluators = columnEvaluators; this._columnNames = columnNames; this._intervalCompute = intervalCompute; this._previousRandomAccessIndexes = previousRandomAccessIndexes; this._aggregationServices = aggregationServices; }
// private Text text; public EntitySelectorInputSystem(LocalGameRunner initializer, CameraWithEsMovementSystem cameraWithEsMovementSystem) { this.camera = initializer.mainCamera; mapHolder = initializer.mapHolder; localMap = GameModel.localMap; // this.text = initializer.text; screenBounds.extendX((int)(-Screen.width * 0.01f)); screenBounds.extendY((int)(-Screen.height * 0.01f)); // visualSystem = new EntitySelectorVisualMovementSystem(camera, initializer.selector, initializer.mapHolder); initControllers(); }
private static Vector3 GetPositionFromEvent(LocalMap map, PointerEventData eventData) { Vector2 vector2; RectTransformUtility.ScreenPointToLocalPointInRectangle(map.Image.rectTransform, eventData.position, Game.Instance.UI.UICamera, out vector2); vector2 += Vector2.Scale(map.Image.rectTransform.sizeDelta, map.Image.rectTransform.pivot); LocalMapRenderer.DrawResult drawResult = Helpers.GetField <LocalMapRenderer.DrawResult>(map, "m_DrawResult"); Vector2 vector21 = new Vector2(vector2.x / (float)drawResult.ColorRT.width, vector2.y / (float)drawResult.ColorRT.height); Vector3 worldPoint = LocalMapRenderer.Instance.ViewportToWorldPoint(vector21); return(worldPoint); }
/// <summary> /// Initializes the map. /// </summary> public static bool InitializeMap() { _map = new LocalMap(); for (int i = 0; i < Resource.Data.mapNum.Count; ++i) { string tileName = Resource.Data.groundName[Resource.Data.mapNum[i]]; var obj = CreateTile(tileName); _map.AddGround(obj.AddComponent <Ground>()); } return(_map.GetSize() > 0); }
public EcsEntity?findFreeReachableItemBySelector(ItemSelector selector, Vector3Int position) { LocalMap map = GameModel.localMap; // get items and positions // TODO add items in containers return(GameModel.get().itemContainer.onMapItems.all .Where(selector.checkItem) .Where(item => map.passageMap.inSameArea(position, item.pos())) // filter reachability .Aggregate((current, item) => current == null || (distanceToItem(item, position) < distanceToItem(current, position)) ? item : current)); // select nearest }
private static bool Prefix(LocalMap __instance, PointerEventData eventData) { if (eventData.button == PointerEventData.InputButton.Left) { if (IsShiftPressed) { CustomMapMarkers.CreateMarker(__instance, eventData); } } // Don't pass the click through to the map if control or shift are pressed return(!(IsControlPressed || IsShiftPressed)); }
protected new bool validate() { LocalMap map = GameModel.localMap; if (item.hasPos()) { Vector3Int itemPosition = item.pos(); return(base.validate() && container.itemMap.ContainsKey(itemPosition) && container.itemMap[itemPosition].Contains(item) && map.passageMap.inSameArea(itemPosition, performer().pos())); } return(false); }
//get full world state from GenerationState or savefile public void setWorld(World world, EcsWorld ecsWorld) { this.world = world; _localMap = world.localMap; _ecsWorld = ecsWorld; // add units to container // TODO add generated wild animals EcsFilter filter = ecsWorld.GetFilter(typeof(EcsFilter <UnitJobsComponent>)); foreach (var i in filter) { unitContainer.addNewPlayerUnit(filter.GetEntity(i)); } }
private static ModMapMarker NewMarker(LocalMap map, PointerEventData eventData) { string areaName = Game.Instance.CurrentlyLoadedArea.AreaDisplayName; List <ModMapMarker> markersForArea; if (!AreaMarkers.TryGetValue(areaName, out markersForArea)) { AreaMarkers[areaName] = new List <ModMapMarker>(); } Vector3 position = GetPositionFromEvent(map, eventData); ModMapMarker marker = new ModMapMarker(position); AreaMarkers[areaName].Add(marker); return(marker); }
public MapRenderer() { Console.Title = "Wilderness"; Console.CursorVisible = false; currentMap = new LocalMap(10, 10, "#### ####" + "# #### #" + "# #" + "## ##" + " # # " + " # # " + "## ##" + "# #" + "# #### #" + "#### ####"); }
public void placeSelectorAtMapCenter() { LocalMap localMap = GameModel.localMap; selector.position.x = localMap.xSize / 2; selector.position.y = localMap.ySize / 2; Debug.Log("placing selector at " + selector.position.x + " " + selector.position.y); for (int z = localMap.zSize - 1; z >= 0; z--) { if (localMap.blockType.get(selector.position.x, selector.position.y, z) != BlockTypeEnum.SPACE.CODE) { selector.position.z = z; break; } } }
private void createTestLocalMap() { LocalMap localmap = GameModel.localMap; if (localmap != null) { return; } GenerationState state = GenerationState.get(); state.worldGenConfig.size = 10; state.generateWorld(); createTestSettler(); createTestItem(); state.localGenConfig.location = new IntVector2(5, 5); state.generateLocalMap(); }
internal LocalDefinition DeclareLocal( ITypeReference type, object identity, string name, bool isCompilerGenerated, LocalSlotConstraints constraints, bool isDynamic, ImmutableArray <TypedConstant> dynamicTransformFlags) { LocalDefinition local; if ((name != null) || !FreeSlots.TryPop(new LocalSignature(type, constraints), out local)) { local = this.DeclareLocalInternal(type, identity, name, isCompilerGenerated, constraints, isDynamic, dynamicTransformFlags); } LocalMap.Add(identity, local); return(local); }
public CILEmulator(MethodDef method, DynamicContext dynamicContext = null, IEnumerable <Value> parameterValues = null) { Method = method; if (!Method.HasBody) { throw new EmulationException($"Cannot create Emulator instance for method without body."); } if (!Method.IsIL) { throw new NotSupportedException(); } _context = new Context(this); DynamicContext = dynamicContext; ParameterMap = new ParameterMap(method.Parameters, parameterValues); LocalMap = new LocalMap(method.Body.Variables); }
internal LocalDefinition DeclareLocal( Cci.ITypeReference type, ILocalSymbol symbol, string name, CommonSynthesizedLocalKind synthesizedKind, uint pdbAttributes, LocalSlotConstraints constraints, bool isDynamic, ImmutableArray <TypedConstant> dynamicTransformFlags) { LocalDefinition local; if ((name != null) || !FreeSlots.TryPop(new LocalSignature(type, constraints), out local)) { local = this.DeclareLocalImpl(type, symbol, name, synthesizedKind, pdbAttributes, constraints, isDynamic, dynamicTransformFlags); } LocalMap.Add(symbol, local); return(local); }
/// <summary> /// Пытается загрузить локальные карты чанка из файла. /// </summary> /// <returns><c>true</c>, если карты загружены, иначе <c>false</c>.</returns> /// <param name="chunkY">Координата по y.</param> /// <param name="chunkX">Координата по pos.X.</param> bool TryLoadFiledChunkLocalMaps(int chunkY, int chunkX) { string filePath = Path.Combine(ChunksDirectoryPath, chunkY + "_" + chunkX + "lm"); if (File.Exists(filePath)) { using (SymBinaryReader reader = new SymBinaryReader(File.Open(filePath, FileMode.Open))) { for (ushort y = 0; y < ChunkSize; ++y) for (ushort x = 0; x < ChunkSize; ++x) if (reader.ReadString() == "null") LocalMaps[y, x] = null; else { LocalMaps[y, x] = new LocalMap(LocalMapSize.X, LocalMapSize.Y); LocalMaps[y, x].Read(reader); } } return true; } return false; }
void Awake() { Map = GameObject.FindWithTag("World/World").GetComponent<World>().CurrentMap as LocalMap; Animator = GetComponent<Animator>(); }
public void RenderBluesHexes(LocalPos pos, byte distance, LocalMap map) { Debug.Assert(distance != 0); RenderedBlues.ForEach(hex => hex.InSign = false); for (byte i = 0; i < 6; ++i) { GlobalPos buf = HexNavigHelper.GetNeighborMapCoords(pos, (TurnedHexDirection)i); if (buf.X >= 0 && buf.Y >= 0 && buf.X < map.Width && buf.Y < map.Height && !map.IsBlocked((LocalPos)buf)) BluesSignQueue.Enqueue(new QueueType { Pos = buf, Distance = (byte)(distance - 1) }); } while (BluesSignQueue.Count != 0) { QueueType buf = BluesSignQueue.Dequeue(); SpreadBlues((LocalPos)buf.Pos, buf.Distance, map); } for (ushort i = 0; i < RenderedBlues.Count; ++i) if (!RenderedBlues[i].InSign) { Destroy(RenderedBlues[i].Hex); RenderedBlues.RemoveAt(i); if (i != 0) i--; } }
/// <summary> /// Выводит хексы карты на сцену. /// </summary> /// <param name="map">Карта.</param> public void RenderWholeMap(LocalMap map) { RenderedHexes.Capacity = map.Height * map.Width; for (ushort y = 0; y < map.Height; ++y) for (ushort x = 0; x < map.Width; ++x) { // TODO Возможно стоит заменить ListType на Hex? ListType hex = new ListType { Hex = new GameObject("hex"), InSign = true }; hex.Hex.transform.position = GetTransformPosFromMapPos(new LocalPos(x, y)); hex.Hex.transform.parent = transform; hex.Pos = new GlobalPos(x, y); hex.Hex.AddComponent<SpriteRenderer>(); hex.Hex.AddComponent<Fader>(); MakeHexGraphics(hex, new LocalPos(x, y), map); RenderedHexes.Add(hex); } }
public static void CreateVegetation(ref LocalMap map, LocalTerrainSettings terrainParam, float vegetationValue) { float?[,] forestMatrix = new float?[map.Height, map.Width]; HeighmapNeighboring hmNb; hmNb.Left = new float[map.Height]; hmNb.Top = new float[map.Width]; hmNb.Right = new float[map.Height]; hmNb.Bottom = new float[map.Width]; for (ushort i = 0; i < map.Height; ++i) hmNb.Right[i] = hmNb.Left[i] = vegetationValue; for (ushort i = 0; i < map.Width; ++i) hmNb.Bottom[i] = hmNb.Top[i] = vegetationValue; CreateHeightmap(ref forestMatrix, 1, hmNb);//TODO for (ushort y = 0; y < map.Height; ++y) for (ushort x = 0; x < map.Width; ++x) { LocalTerrainSettings.Terrain terrain = terrainParam.GetTerrain(map.TerrainMatrix[y, x]); if (terrain.PlantProbability > 0 && forestMatrix[y, x] > 0 && Random.value < terrain.PlantProbability * forestMatrix[y, x]) { Entity plant = GameObject.Instantiate(terrain.Trees[Random.Range(0, terrain.Trees.Length)]); plant.Pos = new U16Vec2(x, y); map.AddObject(plant); /*if (map.ForestMatrix[pos.Y, pos.X] < LocalMapParam.BushesForestValue) plant.GetComponent<SpriteRenderer>().sprite = LocalMapParam.BushSprites[Random.Range(0, LocalMapParam.BushSprites.Length)]; else plant.GetComponent<SpriteRenderer>().sprite = LocalMapParam.TreeSprites[Random.Range(0, LocalMapParam.TreeSprites.Length)];*/ } } }
//TODO Временно public static void CreateLocalMap(ref LocalMap map, LocalTerrainSettings settings, HeighmapNeighboring hmNb, float landscapeRoughness, float forest) { float?[,] buf = new float?[map.Height, map.Width]; WorldGenerator.CreateHeightmap(ref buf, landscapeRoughness, hmNb); float[,] buf2 = new float[map.Height, map.Width]; for (ushort y = 0; y < map.Height; ++y) for (ushort x = 0; x < map.Width; ++x) { buf2[y, x] = buf[y, x].Value; buf[y, x] = null; } WorldGenerator.CreateTerrainmap(ref map.TerrainMatrix, buf2, settings); WorldGenerator.CreateVegetation(ref map, settings, forest); }
public void RenderWholeMapForEditor(LocalMap map) { RenderedHexes.Capacity = map.Height * map.Width; for (ushort y = 0; y < map.Height; ++y) for (ushort x = 0; x < map.Width; ++x) { // TODO Возможно стоит заменить ListType на Hex? ListType hex = new ListType { Hex = Instantiate(EditorHex.gameObject), InSign = true }; hex.Hex.transform.position = GetTransformPosFromMapPos(new LocalPos(x, y)); hex.Hex.transform.parent = transform; hex.Pos = hex.Hex.GetComponent<EditorHex>().Pos = new LocalPos(x, y); MakeHexGraphics(hex, new LocalPos(x, y), map); RenderedHexes.Add(hex); } }
/// <summary> /// Создаёт локальную карту. /// </summary> /// <param name="coords">Координаты новой карты на глобальной.</param> LocalMap CreateLocalMap(float height, float forest, bool river) { //if (river) //{ //LocalPos[] riverPath = new LocalPos[] { new LocalPos(0, (ushort)(LocalMapSize.Y >> 1)), new LocalPos((ushort)(LocalMapSize.X - 1), (ushort)(LocalMapSize.Y >> 1)) }; //UNDONE //WorldGenerator.MakeEqualHeightLine(map.HeightMatrix, riverPath, Visualiser.LocalMapParam.Terrains[0].StartingHeight - 0.0001f); TODO // } WorldGenerator.HeighmapNeighboring hmNb; hmNb.Left = new float[LocalMapSize.Y]; hmNb.Top = new float[LocalMapSize.X]; hmNb.Right = new float[LocalMapSize.Y]; hmNb.Bottom = new float[LocalMapSize.X]; for (ushort i = 0; i < LocalMapSize.Y; ++i) hmNb.Right[i] = hmNb.Left[i] = height; for (ushort i = 0; i < LocalMapSize.X; ++i) hmNb.Bottom[i] = hmNb.Top[i] = height; LocalMap map = new LocalMap(LocalMapSize.X, LocalMapSize.Y); WorldGenerator.CreateLocalMap(ref map, LocalMapTerrainParam, hmNb, LandscapeRoughness, forest); return map; }
//UNDONE Sprite ChooseHexSprite(LocalPos pos, LocalMap map) { byte id = 0; for (byte i = 0; i < LocalMapParam.Terrains.Length; ++i) if ((map.TerrainMatrix[pos.Y, pos.X] & LocalMapParam.Terrains[i].TerrainType) != TerrainType.NONE) { for (byte j = 0; j < i; ++j, id += (byte)LocalMapParam.Terrains[j].Sprites.Length) ; id += (byte)Random.Range(0, LocalMapParam.Terrains[i].Sprites.Length); } map.HexSpriteID_Matrix[pos.Y, pos.X] = id; return AllLocalHexSprites[id]; }
void SpreadBlues(LocalPos pos, byte distance, LocalMap map) { short index = (short)RenderedBlues.FindIndex(x => x.Hex.GetComponent<HexInteraction>().Pos == pos); if (index == -1) HighlightHex(pos); else { if (RenderedBlues[index].InSign) return; else RenderedBlues[index].InSign = true; } if (distance != 0) { for (byte i = 0; i < 6; ++i) { GlobalPos buf = HexNavigHelper.GetNeighborMapCoords(pos, (TurnedHexDirection)i); if (buf.X >= 0 && buf.Y >= 0 && buf.X < map.Width && buf.Y < map.Height && !map.IsBlocked((LocalPos)buf)) BluesSignQueue.Enqueue(new QueueType { Pos = buf, Distance = (byte)(distance - 1) }); } } }
void MakeHexGraphics(ListType hex, LocalPos pos, LocalMap map) { if (map.HexSpriteID_Matrix[pos.Y, pos.X].HasValue /*?*/&& map.HexSpriteID_Matrix[pos.Y, pos.X] < AllLocalHexSprites.Count) hex.Hex.GetComponent<SpriteRenderer>().sprite = AllLocalHexSprites[map.HexSpriteID_Matrix[pos.Y, pos.X].Value]; else hex.Hex.GetComponent<SpriteRenderer>().sprite = ChooseHexSprite(pos, map); hex.Hex.GetComponent<SpriteRenderer>().sortingLayerName = "Landscape";// if ((map.TerrainMatrix[pos.Y, pos.X] & TerrainType.WATER) != TerrainType.NONE) //float offsetbuf=(LocalHexSpriteSize.pos.X-LocalHexSpriteSize.y)/2; for (byte i = 0; i < 6; ++i) //TODO К оптимизации. if (map.Contains(HexNavigHelper.GetNeighborMapCoords(pos, (TurnedHexDirection)i)) && (map.TerrainMatrix[HexNavigHelper.GetNeighborMapCoords(pos, (TurnedHexDirection)i).Y, HexNavigHelper.GetNeighborMapCoords(pos, (TurnedHexDirection)i).X] & TerrainType.WATER) == TerrainType.NONE) { GameObject bank = new GameObject("bankSprite"); bank.transform.position = hex.Hex.transform.position; bank.transform.parent = hex.Hex.transform; bank.AddComponent<SpriteRenderer>().sortingLayerName = "LandscapeObjects"; if ((TurnedHexDirection)i == TurnedHexDirection.LEFT || (TurnedHexDirection)i == TurnedHexDirection.RIGHT) { bank.GetComponent<SpriteRenderer>().sprite = LocalMapParam.BankSprites[Random.Range(0, LocalMapParam.BankSprites.Length)]; if ((TurnedHexDirection)i == TurnedHexDirection.RIGHT) bank.transform.Rotate(0, 0, 180); } else { bank.GetComponent<SpriteRenderer>().sprite = LocalMapParam.DiagBankSprites[Random.Range(0, LocalMapParam.DiagBankSprites.Length)]; switch ((TurnedHexDirection)i) { case TurnedHexDirection.RIGHT_TOP: bank.transform.Rotate(0, 180, 0); break; case TurnedHexDirection.RIGHT_BOTTOM: bank.transform.Rotate(180, 180, 0); break; case TurnedHexDirection.LEFT_BOTTOM: bank.transform.Rotate(180, 0, 0); break; } } //float offset=((TurnedHexDirection)i==TurnedHexDirection.LEFT_TOP||(TurnedHexDirection)i==TurnedHexDirection.LEFT_BOTTOM)? -offsetbuf:offsetbuf; //bank.transform.position = new Vector3(hex.Hex.transform.position.pos.X+offset,hex.Hex.transform.position.y,hex.Hex.transform.position.z); //bank.transform.Rotate(0, 0, (short)(Mathf.Sign(mapCoords.y - HexNavigHelper.GetNeighborMapCoords(mapCoords, (TurnedHexDirection)i).y) * Vector2.Angle(Vector2.left,new Vector2(GetTransformPosFromMapPos(HexNavigHelper.GetNeighborMapCoords(mapCoords, (TurnedHexDirection)i), true).pos.X-offset,GetTransformPosFromMapPos(HexNavigHelper.GetNeighborMapCoords(mapCoords, (TurnedHexDirection)i), true).y) - (Vector2)bank.transform.position))); bank.GetComponent<SpriteRenderer>().material = DiffuseMaterial; bank.AddComponent<Fader>(); } hex.Hex.GetComponent<Fader>().FadeIn(FadeInTime); for (ushort j = 0; j < hex.Hex.transform.childCount; ++j) hex.Hex.transform.GetChild(j).gameObject.GetComponent<Fader>().FadeIn(FadeInTime); }