Advertisement
Guest User

Untitled

a guest
Feb 13th, 2021
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 21.99 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEditor;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. namespace Notan
  7. {
  8.     public class AnimatorUtils
  9.     {
  10.         const float FRAMERATE = 60f;
  11.  
  12.         static PlayerAnimationsConfig GetAnimationsConfig(HoldType holdType) =>
  13.             holdType == HoldType.OneHand ? oneHandAnimationsConfig :
  14.             holdType == HoldType.TwoHand ? twoHandAnimationsConfig :
  15.             holdType == HoldType.Spear ? spearAnimationsConfig :
  16.             holdType == HoldType.Firearm ? firearmAnimationsConfig :
  17.             holdType == HoldType.Bow ? bowAnimationsConfig :
  18.             oneHandAnimationsConfig;
  19.  
  20.         static ObjectReferenceKeyframe GetKeyframe(KeyFrameData data, SpriteCollection sprites)
  21.         {
  22.             ObjectReferenceKeyframe keyframe = new ObjectReferenceKeyframe();
  23.             keyframe.time = data.time / FRAMERATE;
  24.             keyframe.value = sprites.GetSpriteWithId(data.spriteIndex);
  25.             return keyframe;
  26.         }
  27.  
  28.         static AnimationEvent GetAnimationEvent(AnimationEventData data, int animationId)
  29.         {
  30.             AnimationEvent animationEvent = new AnimationEvent();
  31.             animationEvent.functionName = data.name;
  32.             animationEvent.time = data.time;
  33.             animationEvent.intParameter = animationId;
  34.             return animationEvent;
  35.         }
  36.  
  37.         static EditorCurveBinding GetEditorCurveBinding(string path = "")
  38.         {
  39.             EditorCurveBinding spriteBinding = new EditorCurveBinding();
  40.             spriteBinding.type = typeof(SpriteRenderer);
  41.             spriteBinding.path = path;
  42.             spriteBinding.propertyName = "m_Sprite";
  43.  
  44.             return spriteBinding;
  45.         }
  46.  
  47.         static AnimationClip AddEvents(AnimationClip clip, AnimationEventData[] data, int animationId)
  48.         {
  49.             if (data == null) return clip;
  50.  
  51.             List<AnimationEvent> previousEvents = AnimationUtility.GetAnimationEvents(clip).ToList();
  52.             List<AnimationEvent> newAnimationEvents = data.Select(item => GetAnimationEvent(item, animationId)).ToList();
  53.             AnimationEvent[] finalEvents = previousEvents.Concat(newAnimationEvents).ToArray();
  54.             AnimationUtility.SetAnimationEvents(clip, finalEvents);
  55.  
  56.             return clip;
  57.         }
  58.  
  59.         static AnimationClip AddKeyframes(AnimationClip clip, KeyFrameData[] data, SpriteCollection sprites, string target)
  60.         {
  61.             ObjectReferenceKeyframe[] keyframes = data.Select(data => GetKeyframe(data, sprites)).ToArray();
  62.             EditorCurveBinding curve = GetEditorCurveBinding(target);
  63.             AnimationUtility.SetObjectReferenceCurve(clip, curve, keyframes);
  64.             return clip;
  65.         }
  66.  
  67.         static AnimationClip UpdateSettings(AnimationClip clip, bool loop)
  68.         {
  69.             clip.frameRate = FRAMERATE;
  70.  
  71.             AnimationClipSettings animSettings = AnimationUtility.GetAnimationClipSettings(clip);
  72.             animSettings.loopTime = loop;
  73.             AnimationUtility.SetAnimationClipSettings(clip, animSettings);
  74.  
  75.             return clip;
  76.         }
  77.  
  78.         public static AnimationClip CreateAnimation(AnimationData data1, AnimationData data2, SpritePlayerSet sprites, string name)
  79.         {
  80.             AnimationClip clip = new AnimationClip();
  81.             clip = UpdateSettings(clip, data1.loop);
  82.  
  83.             clip = AddKeyframes(clip, data1.frames, sprites.armor1, "Armor");
  84.             clip = AddKeyframes(clip, data1.frames, sprites.weapon1, "Weapon");
  85.             clip = AddEvents(clip, data1.events, 1);
  86.  
  87.             clip = AddKeyframes(clip, data2.frames, sprites.armor2, "Armor 2");
  88.             clip = AddKeyframes(clip, data2.frames, sprites.weapon2, "Weapon 2");
  89.             clip = AddEvents(clip, data1.events, 2);
  90.  
  91.             clip = AddKeyframes(clip, data1.frames, sprites.shield, "Shield");
  92.  
  93.             clip.name = name;
  94.             return clip;
  95.         }
  96.  
  97.         public static void SetUpPlayer(Armor armor, Weapon weapon1, Weapon weapon2, Shield shield)
  98.         {
  99.             SpritePlayerSet set = new SpritePlayerSet(armor, weapon1, weapon2, shield);
  100.  
  101.             PlayerAnimationsConfig data1 = GetAnimationsConfig(weapon1.holdType);
  102.             PlayerAnimationsConfig data2 = GetAnimationsConfig(weapon2.holdType);
  103.  
  104.             AnimationClip walkClip = CreateAnimation(data1.walk, data2.walk, set, "walk");
  105.             AnimationClip idleClip = CreateAnimation(data1.idle, data2.idle, set, "idle");
  106.             AnimationClip jumpClip = CreateAnimation(data1.jump, data2.jump, set, "jump");
  107.             AnimationClip blockClip = CreateAnimation(data1.block, data2.block, set, "block");
  108.             AnimationClip attackJumpClip = CreateAnimation(data1.jumpAttack, data2.jumpAttack, set, "jumpAttack");
  109.             AnimationClip attackHoldClip = CreateAnimation(data1.attackHold, data2.attackHold, set, "attackHold");
  110.             AnimationClip attackChargeClip = CreateAnimation(data1.attackCharge, data2.attackCharge, set, "attackCharge");
  111.             AnimationClip attackReleaseClip = CreateAnimation(data1.attackRelease, data2.attackRelease, set, "attackRelease");
  112.  
  113.             // Prepare controller
  114.  
  115.             string controllerPath = "Assets/Animators/Player custom.overrideController";
  116.             var controllerObject = AssetDatabase.LoadAssetAtPath(controllerPath, typeof(AnimatorOverrideController));
  117.             AnimatorOverrideController controller = (AnimatorOverrideController)controllerObject;
  118.  
  119.             List<KeyValuePair<AnimationClip, AnimationClip>> overrides =
  120.                 new List<KeyValuePair<AnimationClip, AnimationClip>>(controller.overridesCount);
  121.  
  122.             controller.GetOverrides(overrides);
  123.  
  124.             overrides = overrides.Select<KeyValuePair<AnimationClip, AnimationClip>, KeyValuePair<AnimationClip, AnimationClip>>(
  125.                 kvp =>
  126.                 {
  127.                     AnimationClip clip =
  128.                         kvp.Key.name == "player-walk" ? walkClip :
  129.                         kvp.Key.name == "player-idle" ? idleClip :
  130.                         kvp.Key.name == "player-jump" ? jumpClip :
  131.                         kvp.Key.name == "player-block" ? blockClip :
  132.                         kvp.Key.name == "player-attack-jump" ? attackJumpClip :
  133.                         kvp.Key.name == "player-attack-hold" ? attackHoldClip :
  134.                         kvp.Key.name == "player-attack-charge" ? attackChargeClip :
  135.                         kvp.Key.name == "player-attack-release" ? attackReleaseClip :
  136.                         kvp.Value;
  137.  
  138.                     return new KeyValuePair<AnimationClip, AnimationClip>(kvp.Key, clip);
  139.                 }
  140.             ).ToList();
  141.  
  142.             controller.ApplyOverrides(overrides);
  143.         }
  144.  
  145.         #region Data
  146.  
  147.         static PlayerAnimationsConfig oneHandAnimationsConfig = new PlayerAnimationsConfig()
  148.         {
  149.             walk = new AnimationData(
  150.                 new KeyFrameData[4] {
  151.                     new KeyFrameData( 5, 0 ),
  152.                     new KeyFrameData( 6, 5 ),
  153.                     new KeyFrameData( 7, 10 ),
  154.                     new KeyFrameData( 8, 15 )
  155.                 }, null),
  156.  
  157.             block = new AnimationData(
  158.                 new KeyFrameData[1] {
  159.                     new KeyFrameData( 4, 0 )
  160.                 }, null),
  161.  
  162.             jump = new AnimationData(
  163.                 new KeyFrameData[1] {
  164.                     new KeyFrameData( 9, 0 )
  165.                 }, null),
  166.  
  167.             jumpAttack = new AnimationData(
  168.                 new KeyFrameData[7] {
  169.                     new KeyFrameData( 10, 0 ),
  170.                     new KeyFrameData( 11, 5 ),
  171.                     new KeyFrameData( 12, 10 ),
  172.                     new KeyFrameData( 13, 15 ),
  173.                     new KeyFrameData( 14, 20 ),
  174.                     new KeyFrameData( 15, 25 ),
  175.                     new KeyFrameData( 16, 30 )
  176.                 },
  177.                 new AnimationEventData[2] {
  178.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  179.                     new AnimationEventData(1/3f, "AnimEventEndHitbox"),
  180.                 }),
  181.  
  182.             idle = new AnimationData(
  183.                 new KeyFrameData[4] {
  184.                     new KeyFrameData( 0, 0 ),
  185.                     new KeyFrameData( 1, 10 ),
  186.                     new KeyFrameData( 2, 20 ),
  187.                     new KeyFrameData( 3, 30 )
  188.                 }, null),
  189.  
  190.             attackCharge = new AnimationData(
  191.                 new KeyFrameData[1] {
  192.                     new KeyFrameData( 17, 0 )
  193.                 },
  194.                 null,
  195.                 false),
  196.  
  197.             attackHold = new AnimationData(
  198.                 new KeyFrameData[1] {
  199.                     new KeyFrameData( 17, 0 )
  200.                 },
  201.                 null,
  202.                 false),
  203.  
  204.             attackRelease = new AnimationData(
  205.                 new KeyFrameData[7] {
  206.                     new KeyFrameData( 17, 0 ),
  207.                     new KeyFrameData( 18, 5 ),
  208.                     new KeyFrameData( 19, 10 ),
  209.                     new KeyFrameData( 20, 15 ),
  210.                     new KeyFrameData( 21, 20 ),
  211.                     new KeyFrameData( 22, 25 ),
  212.                     new KeyFrameData( 23, 30 )
  213.                 },
  214.                 new AnimationEventData[3] {
  215.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  216.                     new AnimationEventData(1/4f, "AnimEventEndHitbox"),
  217.                     new AnimationEventData(1/2f, "AnimEventAttackEnd"),
  218.                 },
  219.                 false),
  220.  
  221.         };
  222.  
  223.         static PlayerAnimationsConfig twoHandAnimationsConfig = new PlayerAnimationsConfig()
  224.         {
  225.             // TODO: Definir todas las animaciones
  226.             walk = new AnimationData(
  227.                 new KeyFrameData[4] {
  228.                     new KeyFrameData( 0, 0 ),
  229.                     new KeyFrameData( 1, 5 ),
  230.                     new KeyFrameData( 2, 10 ),
  231.                     new KeyFrameData( 3, 15 )
  232.                 }, null),
  233.  
  234.             block = new AnimationData(
  235.                 new KeyFrameData[1] {
  236.                     new KeyFrameData( 4, 0 )
  237.                 }, null),
  238.  
  239.             jump = new AnimationData(
  240.                 new KeyFrameData[1] {
  241.                     new KeyFrameData( 4, 0 )
  242.                 }, null),
  243.  
  244.             jumpAttack = new AnimationData(
  245.                 new KeyFrameData[5] {
  246.                     new KeyFrameData( 5, 0 ),
  247.                     new KeyFrameData( 6, 10 ),
  248.                     new KeyFrameData( 7, 15 ),
  249.                     new KeyFrameData( 8, 20 ),
  250.                     new KeyFrameData( 9, 30 )
  251.                 },
  252.                 new AnimationEventData[2] {
  253.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  254.                     new AnimationEventData(1/3f, "AnimEventEndHitbox"),
  255.                 }),
  256.  
  257.             idle = new AnimationData(
  258.                 new KeyFrameData[4] {
  259.                     new KeyFrameData( 10, 0 ),
  260.                     new KeyFrameData( 11, 10 ),
  261.                     new KeyFrameData( 12, 20 ),
  262.                     new KeyFrameData( 11, 30 )
  263.                 }, null),
  264.  
  265.             attackRelease = new AnimationData(
  266.                 new KeyFrameData[6] {
  267.                     new KeyFrameData( 13, 0 ),
  268.                     new KeyFrameData( 14, 5 ),
  269.                     new KeyFrameData( 15, 10 ),
  270.                     new KeyFrameData( 16, 15 ),
  271.                     new KeyFrameData( 17, 20 ),
  272.                     new KeyFrameData( 18, 30 )
  273.                 },
  274.                 new AnimationEventData[3] {
  275.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  276.                     new AnimationEventData(1/4f, "AnimEventEndHitbox"),
  277.                     new AnimationEventData(1/2f, "AnimEventAttackEnd"),
  278.                 },
  279.                 false),
  280.         };
  281.  
  282.         static PlayerAnimationsConfig spearAnimationsConfig = new PlayerAnimationsConfig()
  283.         {
  284.             idle = new AnimationData(
  285.                 new KeyFrameData[4] {
  286.                     new KeyFrameData( 0, 0 ),
  287.                     new KeyFrameData( 1, 10 ),
  288.                     new KeyFrameData( 2, 20 ),
  289.                     new KeyFrameData( 3, 30 )
  290.                 }, null),
  291.  
  292.             walk = new AnimationData(
  293.                 new KeyFrameData[4] {
  294.                     new KeyFrameData( 4, 0 ),
  295.                     new KeyFrameData( 5, 5 ),
  296.                     new KeyFrameData( 6, 10 ),
  297.                     new KeyFrameData( 7, 15 )
  298.                 }, null),
  299.  
  300.             jump = new AnimationData(
  301.                 new KeyFrameData[1] {
  302.                     new KeyFrameData( 8, 0 )
  303.                 }, null),
  304.  
  305.             jumpAttack = new AnimationData(
  306.                 new KeyFrameData[5] {
  307.                     new KeyFrameData( 9, 0 ),
  308.                     new KeyFrameData( 10, 10 ),
  309.                     new KeyFrameData( 11, 15 ),
  310.                     new KeyFrameData( 12, 20 ),
  311.                     new KeyFrameData( 13, 30 )
  312.                 },
  313.                 new AnimationEventData[2] {
  314.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  315.                     new AnimationEventData(1/3f, "AnimEventEndHitbox"),
  316.                 }),
  317.  
  318.             block = new AnimationData(
  319.                 new KeyFrameData[0] { }, null),
  320.  
  321.  
  322.             attackCharge = new AnimationData(
  323.                 new KeyFrameData[1] {
  324.                     new KeyFrameData( 14, 10 ),
  325.                 },
  326.                 null,
  327.                 false),
  328.  
  329.             attackHold = new AnimationData(
  330.                 new KeyFrameData[1] {
  331.                     new KeyFrameData( 14, 10 ),
  332.                 },
  333.                 null,
  334.                 false),
  335.  
  336.             attackRelease = new AnimationData(
  337.                 new KeyFrameData[7] {
  338.                     new KeyFrameData( 14, 0 ),
  339.                     new KeyFrameData( 15, 5 ),
  340.                     new KeyFrameData( 16, 10 ),
  341.                     new KeyFrameData( 17, 15 ),
  342.                     new KeyFrameData( 18, 20 ),
  343.                     new KeyFrameData( 19, 25 ),
  344.                     new KeyFrameData( 20, 30 ),
  345.                 },
  346.                 new AnimationEventData[3] {
  347.                     new AnimationEventData(1/6f, "AnimEventStartHitbox"),
  348.                     new AnimationEventData(1/4f, "AnimEventEndHitbox"),
  349.                     new AnimationEventData(1/2f, "AnimEventAttackEnd"),
  350.                 },
  351.                 false),
  352.         };
  353.  
  354.         static PlayerAnimationsConfig shieldAnimationSet = new PlayerAnimationsConfig()
  355.         {
  356.             walk = new AnimationData(
  357.                 new KeyFrameData[4] {
  358.                     new KeyFrameData( 0, 0 ),
  359.                     new KeyFrameData( 1, 5 ),
  360.                     new KeyFrameData( 2, 10 ),
  361.                     new KeyFrameData( 3, 15 )
  362.                 }, null),
  363.  
  364.             block = new AnimationData(
  365.                 new KeyFrameData[1] {
  366.                     new KeyFrameData( 4, 0 )
  367.                 }, null),
  368.  
  369.             jump = new AnimationData(
  370.                 new KeyFrameData[1] {
  371.                     new KeyFrameData( 5, 0 )
  372.                 }, null),
  373.  
  374.             jumpAttack = new AnimationData(
  375.                 new KeyFrameData[4] {
  376.                     new KeyFrameData( 6, 0 ),
  377.                     new KeyFrameData( 7, 10 ),
  378.                     new KeyFrameData( 8, 20 ),
  379.                     new KeyFrameData( 9, 30 )
  380.                 }, null),
  381.  
  382.             idle = new AnimationData(
  383.                 new KeyFrameData[4] {
  384.                     new KeyFrameData( 10, 0 ),
  385.                     new KeyFrameData( 11, 10 ),
  386.                     new KeyFrameData( 12, 20 ),
  387.                     new KeyFrameData( 11, 30 )
  388.                 }, null),
  389.  
  390.             attackCharge = new AnimationData(
  391.                 new KeyFrameData[1] {
  392.                     new KeyFrameData( 11, 10 ),
  393.                 },
  394.                 null,
  395.                 false),
  396.  
  397.             attackHold = new AnimationData(
  398.                 new KeyFrameData[1] {
  399.                     new KeyFrameData( 11, 10 ),
  400.                 },
  401.                 null,
  402.                 false),
  403.  
  404.             attackRelease = new AnimationData(
  405.                 new KeyFrameData[7] {
  406.                     new KeyFrameData( 13, 0 ),
  407.                     new KeyFrameData( 14, 5 ),
  408.                     new KeyFrameData( 15, 10 ),
  409.                     new KeyFrameData( 16, 15 ),
  410.                     new KeyFrameData( 17, 20 ),
  411.                     new KeyFrameData( 18, 25 ),
  412.                     new KeyFrameData( 19, 30 )
  413.                 },
  414.                 new AnimationEventData[1] {
  415.                     new AnimationEventData(1/2f, "AnimEventAttackEnd"),
  416.                 },
  417.                 false),
  418.  
  419.         };
  420.  
  421.         static PlayerAnimationsConfig firearmAnimationsConfig = new PlayerAnimationsConfig()
  422.         {
  423.             walk = new AnimationData(
  424.                 new KeyFrameData[4] {
  425.                     new KeyFrameData( 0, 0 ),
  426.                     new KeyFrameData( 1, 5 ),
  427.                     new KeyFrameData( 2, 10 ),
  428.                     new KeyFrameData( 3, 15 )
  429.                 }, null),
  430.  
  431.             block = new AnimationData(
  432.                 new KeyFrameData[1] {
  433.                     new KeyFrameData( 4, 0 )
  434.                 }, null),
  435.  
  436.             jump = new AnimationData(
  437.                 new KeyFrameData[1] {
  438.                     new KeyFrameData( 4, 0 )
  439.                 }, null),
  440.  
  441.             jumpAttack = new AnimationData(
  442.                 new KeyFrameData[7] {
  443.                     new KeyFrameData( 5, 0 ),
  444.                     new KeyFrameData( 6, 5 ),
  445.                     new KeyFrameData( 7, 10 ),
  446.                     new KeyFrameData( 8, 15 ),
  447.                     new KeyFrameData( 9, 20 ),
  448.                     new KeyFrameData( 10, 25 ),
  449.                     new KeyFrameData( 11, 30 )
  450.                 }, null),
  451.  
  452.             idle = new AnimationData(
  453.                 new KeyFrameData[4] {
  454.                     new KeyFrameData( 12, 0 ),
  455.                     new KeyFrameData( 13, 10 ),
  456.                     new KeyFrameData( 14, 20 ),
  457.                     new KeyFrameData( 13, 30 )
  458.                 }, null),
  459.  
  460.             attackCharge = new AnimationData(
  461.                 new KeyFrameData[1] {
  462.                     new KeyFrameData( 13, 10 ),
  463.                 },
  464.                 null,
  465.                 false),
  466.  
  467.             attackHold = new AnimationData(
  468.                 new KeyFrameData[1] {
  469.                     new KeyFrameData( 13, 10 ),
  470.                 },
  471.                 null,
  472.                 false),
  473.  
  474.             attackRelease = new AnimationData(
  475.                 new KeyFrameData[11] {
  476.                     new KeyFrameData( 15, 0 ),
  477.                     new KeyFrameData( 16, 5 ),
  478.                     new KeyFrameData( 17, 10 ),
  479.                     new KeyFrameData( 18, 15 ),
  480.                     new KeyFrameData( 19, 20 ),
  481.                     new KeyFrameData( 20, 25 ),
  482.                     new KeyFrameData( 21, 30 ),
  483.                     new KeyFrameData( 22, 35 ),
  484.                     new KeyFrameData( 23, 40 ),
  485.                     new KeyFrameData( 24, 45 ),
  486.                     new KeyFrameData( 25, 50 )
  487.                 },
  488.                 new AnimationEventData[2] {
  489.                     new AnimationEventData(0f, "AnimEventStartHitbox"),
  490.                     new AnimationEventData(5/6f, "AnimEventAttackEnd"),
  491.                 },
  492.                 false),
  493.         };
  494.  
  495.         static PlayerAnimationsConfig bowAnimationsConfig = new PlayerAnimationsConfig()
  496.         {
  497.             walk = new AnimationData(
  498.                 new KeyFrameData[4] {
  499.                     new KeyFrameData( 0, 0 ),
  500.                     new KeyFrameData( 1, 5 ),
  501.                     new KeyFrameData( 2, 10 ),
  502.                     new KeyFrameData( 3, 15 )
  503.                 }, null),
  504.  
  505.             block = new AnimationData(
  506.                 new KeyFrameData[1] {
  507.                     new KeyFrameData( 4, 0 )
  508.                 }, null),
  509.  
  510.             jump = new AnimationData(
  511.                 new KeyFrameData[1] {
  512.                     new KeyFrameData( 8, 0 )
  513.                 }, null),
  514.  
  515.             jumpAttack = new AnimationData(
  516.                 new KeyFrameData[5] {
  517.                     new KeyFrameData( 9, 0 ),
  518.                     new KeyFrameData( 10, 10 ),
  519.                     new KeyFrameData( 11, 20 ),
  520.                     new KeyFrameData( 12, 30 ),
  521.                     new KeyFrameData( 13, 30 )
  522.                 }, null),
  523.  
  524.             idle = new AnimationData(
  525.                 new KeyFrameData[4] {
  526.                     new KeyFrameData( 19, 0 ),
  527.                     new KeyFrameData( 20, 10 ),
  528.                     new KeyFrameData( 21, 20 ),
  529.                     new KeyFrameData( 19, 30 )
  530.                 }, null),
  531.  
  532.             attackChargeWalk = new AnimationData(
  533.                 new KeyFrameData[4] {
  534.                     new KeyFrameData( 4, 0 ),
  535.                     new KeyFrameData( 5, 10 ),
  536.                     new KeyFrameData( 6, 20 ),
  537.                     new KeyFrameData( 7, 30 )
  538.                 }, null),
  539.  
  540.             attackCharge = new AnimationData(
  541.                 new KeyFrameData[3] {
  542.                     new KeyFrameData( 14, 0 ),
  543.                     new KeyFrameData( 15, 5 ),
  544.                     new KeyFrameData( 16, 10 ),
  545.                 },
  546.                 null,
  547.                 false),
  548.  
  549.             attackHold = new AnimationData(
  550.                 new KeyFrameData[1] {
  551.                     new KeyFrameData( 16, 0 ),
  552.                 },
  553.                 null,
  554.                 false),
  555.  
  556.             attackRelease = new AnimationData(
  557.                 new KeyFrameData[2] {
  558.                     new KeyFrameData( 17, 0 ),
  559.                     new KeyFrameData( 18, 20 )
  560.                 },
  561.                 new AnimationEventData[2] {
  562.                     new AnimationEventData(0f, "AnimEventStartHitbox"),
  563.                     new AnimationEventData(1/3f, "AnimEventAttackEnd"),
  564.                 },
  565.                 false),
  566.  
  567.         };
  568.  
  569.         #endregion
  570.     }
  571. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement