示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 public LayerParam(bool boolValue)
 {
     this.Type      = LayerParamType.Bool;
     this.BoolValue = boolValue;
 }
示例#6
0
 public LayerParam(string stringValue)
 {
     this.Type        = LayerParamType.String;
     this.StringValue = stringValue;
 }
示例#7
0
 public LayerParam(double numberValue)
 {
     this.Type        = LayerParamType.Number;
     this.NumberValue = numberValue;
 }