/// <summary> /// こうげきだまパターンデータから設定する /// </summary> /// <param name="data"></param> public void SetAttackPattern(AttackPatternData data) { CharacterName = data.CharacterName; if (image != null) { var texture = AttackPatternSampleGenerator.Generate(data, 80, 80, setting); image.sprite = Sprite.Create(texture, new Rect(0, 0, 80, 80), Vector2.zero); } }
/// <summary> /// テクスチャ生成 /// </summary> /// <param name="data"></param> /// <param name="width"></param> /// <param name="height"></param> /// <param name="setting"></param> /// <returns></returns> public static Texture2D Generate(AttackPatternData data, int width, int height, IRowColInfo setting) { Context context = new Context(width, height, setting.ColumnsCount); Color32[] pixels = new Color32[width * height]; Color32 black = new Color32(0, 0, 0, 255); Color32 white = new Color32(255, 255, 255, 255); context.SetRect(pixels, 0, 0, width, height, white, black); int dropIndex = 0; int liftUpIndex = 0; int leftSampleCount = (data.SampleCount == 0) ? 24 : data.SampleCount; for (int i = 0; (i < data.AttackDirectionPattern.Length) && (leftSampleCount > 0); ++i) { int count = System.Math.Min(leftSampleCount, 6); leftSampleCount -= count; if (data.AttackDirectionPattern[i] == AttackPatternData.AttackDirectionType.Top) { for (int j = 0; j < count; ++j) { bool set = false; do { var a = data.DropAttackTamaPattern[dropIndex++]; if (a.Position.y >= data.SampleSkipRows) { context.PutDrop(a.Position.x, a.Position.y - data.SampleSkipRows, a.Color); set = true; } } while (!set); } } else { for (int j = 0; j < count; ++j) { var a = data.LiftAttackTamaPattern[liftUpIndex++]; if (liftUpIndex == data.LiftAttackTamaPattern.Length) { liftUpIndex = 0; } context.PutLiftUp(a.Position.x, -a.Position.y, a.Color); } } } context.Apply(pixels); Texture2D texture = new Texture2D(width, height, TextureFormat.ARGB32, false); texture.SetPixels32(pixels); texture.Apply(); return(texture); }
/// <summary> /// 選択されたこうげきだまパターンを設定 /// </summary> /// <param name="playerNo"></param> /// <param name="data"></param> public void SetPlayerAttackPattern(int playerNo, AttackPatternData data, Sprite sprite) { if ((playerNo < 0) || (playerNo >= selectedPatterns.Length)) { return; } selectedPatterns[playerNo] = data; selectedPatternSprites[playerNo] = sprite; }
/// <summary> /// 編集するアセットを設定する /// </summary> private void AssetField() { var p = EditorGUILayout.ObjectField("パターンデータ", pattern, typeof(AttackPatternData), false) as AttackPatternData; if (pattern != p) { assetPath = AssetDatabase.GetAssetPath(p); pattern = p; GenerateAttackSampleTexture(); } }
public CharacterPanel Add(AttackPatternData data, UnityAction listener) { var panel = GameObject.Instantiate <CharacterPanel>(characterPanelPrefab); panel.name = data.CharacterName; panel.transform.SetParent(grid.transform); panel.SetAttackPattern(data); var button = panel.GetComponentInChildren <Button>(); button.onClick.AddListener(listener); return(panel); }
/// <summary> /// パターンを新規作成 /// </summary> private void CreateNewPattern() { EditorGUILayout.LabelField("アセットを指定するか新規作成してください"); assetPath = EditorGUILayout.TextField("アセットパス", assetPath); EditorGUI.BeginDisabledGroup(string.IsNullOrEmpty(assetPath) && (pattern == null)); if (GUILayout.Button("作成")) { pattern = AssetDatabase.LoadAssetAtPath(assetPath, typeof(AttackPatternData)) as AttackPatternData; if (pattern == null) { pattern = new AttackPatternData(); AssetDatabase.CreateAsset(pattern, assetPath); EditorUtility.SetDirty(pattern); AssetDatabase.SaveAssets(); } } EditorGUI.EndDisabledGroup(); }