Example #1
0
        public EventScenarioData CreateShowSongTitle(long tick, int measure, int beat, int track)
        {
            var ev = new EventScenarioData();

            ev.AbsoluteTime = CalculateAbsoluteTime(tick);
            ev.Tick         = tick;
            ev.Measure      = measure;
            ev.Beat         = beat;
            ev.Track        = track;
            ev.Type         = ScenarioDataType.ShowSongTitle;

            return(ev);
        }
        private static EventScenarioData[] ReadEventScenarioDataList([NotNull] string[] lines, ref int index)
        {
            index += 2;

            var cc     = lines[index++].ConvInt32(12);
            var result = new EventScenarioData[cc];

            for (var i = 0; i < cc; ++i)
            {
                result[i] = ReadEventScenarioData(lines, ref index, true);
            }

            return(result);
        }
        private void ProcessFacialExpression([NotNull] EventScenarioData ev)
        {
            var currentTime = playerControl.relativeTime;

            if (ev.param != _currFacialExprKey)
            {
#if UNITY_EDITOR
                string message;

                if (_expressionMaps.ContainsKey(ev.param))
                {
                    message = $"Setting expr {ev.param.ToString()} for idol {placement.formationNumber.ToString()} @ {ev.absTime.ToString()}";
                }
                else
                {
                    message = $"Unknown expr {ev.param.ToString()} for idol {placement.formationNumber.ToString()} @ {ev.absTime.ToString()}";
                }

                Debug.Log(message);
#endif

                _prevFacialExprKey   = _currFacialExprKey;
                _currFacialExprKey   = ev.param;
                _expressionStartTime = currentTime;

                var currMap = FindExpressionOrDefault(_currFacialExprKey);
                var prevMap = FindExpressionOrDefault(_prevFacialExprKey);

                FacialFrameToBuffer(currMap, _currFacialExpression);
                FacialFrameToBuffer(prevMap, _prevFacialExpression);
            }

            // TODO: eye movement collision prevention (e.g. E_wink_* & E_metoji_*)?
            if (ev.eyeclose != _currEyeClosed)
            {
                if (!IsWinking())
                {
                    _prevEyeClosed     = _currEyeClosed;
                    _currEyeClosed     = ev.eyeclose;
                    _eyeCloseStartTime = currentTime;
                }
            }
        }
 internal ScenarioSignalEventArgs([NotNull] EventScenarioData data, ScenarioVariation variation)
 {
     Data      = data;
     Variation = variation;
 }
        private static EventScenarioData ReadEventScenarioData([NotNull] string[] lines, ref int index, bool isArrayElement)
        {
            index += isArrayElement ? 2 : 1;

            var outerOffset = isArrayElement ? 0 : -2;

            var result = new EventScenarioData();

            result.absTime  = lines[index++].ConvDouble(20 + outerOffset);
            result.selected = lines[index++].ConvBoolean(20 + outerOffset);
            result.tick     = lines[index++].ConvInt64(17 + outerOffset);
            result.measure  = lines[index++].ConvInt32(17 + outerOffset);
            result.beat     = lines[index++].ConvInt32(14 + outerOffset);
            result.track    = lines[index++].ConvInt32(15 + outerOffset);
            result.type     = (ScenarioNoteType)lines[index++].ConvInt32(14 + outerOffset);
            result.param    = lines[index++].ConvInt32(15 + outerOffset);
            result.target   = lines[index++].ConvInt32(16 + outerOffset);
            result.duration = lines[index++].ConvInt64(21 + outerOffset);

            ++index;
            result.str = string.Empty;
            ++index;
            result.info = string.Empty;

            result.on  = lines[index++].ConvInt32(12 + outerOffset);
            result.on2 = lines[index++].ConvInt32(13 + outerOffset);

            result.col  = ReadColorRgba(lines, ref index, isArrayElement, false);
            result.col2 = ReadColorRgba(lines, ref index, isArrayElement, false);

            result.cols = ReadFloatList(lines, ref index, isArrayElement ? 3 : 1);

            index     += 3;
            result.tex = null;

            result.texInx = lines[index++].ConvInt32(16 + outerOffset);
            result.trig   = lines[index++].ConvInt32(14 + outerOffset);
            result.speed  = lines[index++].ConvSingle(17 + outerOffset);
            result.idol   = lines[index++].ConvInt32(14 + outerOffset);

            result.mute = ReadBooleanList(lines, ref index, isArrayElement ? 3 : 1);

            result.addf  = lines[index++].ConvBoolean(16 + outerOffset);
            result.eye_x = lines[index++].ConvSingle(17 + outerOffset);
            result.eye_y = lines[index++].ConvSingle(17 + outerOffset);

            result.formation = ReadVector4List(lines, ref index, isArrayElement ? 3 : 1);

            result.appeal   = lines[index++].ConvBoolean(18 + outerOffset);
            result.cheeklv  = lines[index++].ConvInt32(17 + outerOffset);
            result.eyeclose = lines[index++].ConvBoolean(20 + outerOffset);
            result.talking  = lines[index++].ConvBoolean(19 + outerOffset);
            result.delay    = lines[index++].ConvBoolean(17 + outerOffset);

            result.clratio = ReadInt32List(lines, ref index, isArrayElement ? 3 : 1);
            result.clcols  = ReadInt32List(lines, ref index, isArrayElement ? 3 : 1);

            result.camcut = lines[index++].ConvInt32(16 + outerOffset);

            result.vjparam = ReadVjParam(lines, ref index, isArrayElement);

            return(result);
        }
        private static void WriteScenarioNote([NotNull] this TextWriter writer, int baseIndent, [NotNull] string name, EventScenarioData data)
        {
            WriteLine("EventScenarioData " + name, baseIndent);
            WriteLine("double absTime = " + data.absTime.ToString(CultureInfo.InvariantCulture), baseIndent + 1);
            WriteLine("UInt8 selected = 0", baseIndent + 1);
            WriteLine("SInt64 tick = " + data.tick.ToString(), baseIndent + 1);
            WriteLine("int measure = " + data.measure.ToString(), baseIndent + 1);
            WriteLine("int beat = " + data.beat.ToString(), baseIndent + 1);
            WriteLine("int track = " + data.track.ToString(), baseIndent + 1);
            WriteLine("int type = " + ((int)data.type).ToString(), baseIndent + 1);
            WriteLine("int param = " + data.param.ToString(), baseIndent + 1);
            WriteLine("int target = " + data.target.ToString(), baseIndent + 1);
            WriteLine("SInt64 duration = " + data.duration.ToString(), baseIndent + 1);
            WriteLine("string str = \"" + data.str + "\"", baseIndent + 1);
            WriteLine("string info = \"" + data.info + "\"", baseIndent + 1);
            WriteLine("int on = " + data.on.ToString(), baseIndent + 1);
            WriteLine("int on2 = " + data.on2.ToString(), baseIndent + 1);
            WriteLine("ColorRGBA col", baseIndent + 1);
            WriteLine("float r = " + data.col.r.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float g = " + data.col.g.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float b = " + data.col.b.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float a = " + data.col.a.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("ColorRGBA col2", baseIndent + 1);
            WriteLine("float r = " + data.col2.r.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float g = " + data.col2.g.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float b = " + data.col2.b.ToString(CultureInfo.InvariantCulture), baseIndent + 2);
            WriteLine("float a = " + data.col2.a.ToString(CultureInfo.InvariantCulture), baseIndent + 2);

            const string fixedFormat = @"	vector cols
		Array Array
		int size = 0
	PPtr<$Texture> tex
		int m_FileID = 0
		SInt64 m_PathID = 0
	int texInx = -1
	int trig = 0
	float speed = 1
	int idol = 0
	vector mute
		Array Array
		int size = 0
	UInt8 addf = 0
	float eye_x = 0
	float eye_y = 0
	vector formation
		Array Array
		int size = 0
	UInt8 appeal = 0
	int cheeklv = 0
	UInt8 eyeclose = 0
	UInt8 talking = 0
	UInt8 delay = 0
	vector clratio
		Array Array
		int size = 0
	vector clcols
		Array Array
		int size = 0
	int camCut = -1
	VjParam vjparam
		UInt8 use = 0
		UInt8 renderTex = 0
		int col = 8
		int row = 4
		int begin = 0
		int speed = 16
		ColorRGBA color
			float r = 0
			float g = 0
			float b = 0
			float a = 0"            ;

            var fixedLines = fixedFormat.Split(WinNewLineSeparators, StringSplitOptions.None);

            foreach (var line in fixedLines)
            {
                WriteLine(line, baseIndent);
            }

            void WriteLine(string str, int indent)
            {
                if (indent > 0)
                {
                    writer.Write(new string('\t', indent));
                }

                writer.WriteLine(str);
            }
        }