private void ApplyMove(Common.Effect.EffectPlayer player) { var searcher = _chara.FindTileDataMap(_mapManager).Seacher; var effectEntity = _skill.Effect; switch (effectEntity.Range) { // 足元 case RangeType.Foot: { // エフェクトには特に何もしない } break; case RangeType.Line: case RangeType.LinePnt: // 貫通 { // 壁まで var tiles = searcher.SearchLines(_chara.CellPos, _chara.Model.Dir.Value, Const.TileFlag.Wall); var startPos = _chara.CellToWorld(_mapManager); var endTile = tiles.SecondLast(); if (endTile == null) { // null } var endPos = _chara.CellToWorld(endTile.Pos, _mapManager); if (startPos == endPos) { // 開始地点と終了地点が同じ場所は何もできない break; } // 間にあったターゲットを保持する foreach (var tile in tiles) { var target = _charaManager.FindCharaInPos(_chara.Level, tile.Pos); if (target == null) { continue; } ApplyTarget(target, effectEntity.IsInvolve); } Common.Effect.IEffectMoveCore move = new Common.Effect.EffectMoveCoreConstantLiner(); move.SetStartPos(startPos); move.SetEndPos(endPos); move.SetSpeed(effectEntity.Speed); player.Mover.RegisterCore(move); player.Mover.SetEase(effectEntity.Ease); } break; } }
private void ApplySortingLayer(Common.Effect.EffectPlayer player) { if (player == null) { return; } var changer = player.gameObject.GetOrAddComponent <Utility.Renderer.SortingLayerChanger>(); var groundTilemap = _mapManager.FindGroundTilemap(_chara.Level); changer.LayerName = groundTilemap.LayerName; }