public override void Process(ImportContext ctx, Layer layer) { var eventFrames = new HashSet <int>(); var file = ctx.file; for (int i = 0; i < file.frames.Count; ++i) { bool isEvent = file.frames[i].cels.ContainsKey(layer.layerIndex); if (isEvent) { eventFrames.Add(i); } } LayerParamType paramType = layer.GetParamType(1); foreach (var frametag in file.frameTags) { var clip = ctx.generatedClips[frametag]; var events = new List <AnimationEvent>(clip.events); var time = 0.0f; for (int f = frametag.from; f <= frametag.to; ++f) { if (eventFrames.Contains(f)) { var evt = new AnimationEvent { time = time, functionName = layer.GetParamString(0), messageOptions = SendMessageOptions.DontRequireReceiver }; // Debug.Log(paramType + ", " + layer.metaInfo.ParamCount); if (paramType == LayerParamType.String) { evt.stringParameter = layer.GetParamString(1); } else if (paramType == LayerParamType.Number) { var fval = layer.GetParamFloat(1); evt.floatParameter = fval; if (fval == Math.Floor(fval)) { evt.intParameter = (int)fval; } } events.Add(evt); } time += file.frames[f].duration * 1e-3f; } events.Sort((lhs, rhs) => lhs.time.CompareTo(rhs.time)); AnimationUtility.SetAnimationEvents(clip, events.ToArray()); EditorUtility.SetDirty(clip); } }
LayerParam CheckParamType(int index, LayerParamType type) { if (parameters.Count <= index) { throw new Exception("No parameter #" + index); } var par = parameters[index]; if (par.type != type) { throw new Exception(string.Format("Type mismatch at parameter #{0}, expected {1}, got {2}", index, type, par.type)); } return(par); }
LayerParam CheckParamType(int index, LayerParamType type) { if (parameters.Count <= index) { throw new Exception("No parameter #" + index); } var par = parameters[index]; if (par.Type != type) { throw new Exception($"Type mismatch at parameter #{index}, expected {type}, got {par.Type}"); } return(par); }
public bool TryGetParam(int index, LayerParamType type, out LayerParam param) { if (parameters.Count <= index) { param = null; return(false); } var par = parameters[index]; if (par.Type != type) { throw new Exception($"Type mismatch at parameter #{index}, expected {type}, got {par.Type}"); } param = par; return(true); }
public LayerParam(bool boolValue) { this.Type = LayerParamType.Bool; this.BoolValue = boolValue; }
public LayerParam(string stringValue) { this.Type = LayerParamType.String; this.StringValue = stringValue; }
public LayerParam(double numberValue) { this.Type = LayerParamType.Number; this.NumberValue = numberValue; }