public SizingCommandItem(CommandPosition position, EditorItem owner) : base(position, owner) { this.commandSize = 6; this.widthInPixels = 6; this.heightInPixels = 6; switch (this.CommandPosition) { case CommandPosition.TopLeft: case CommandPosition.BottomRight: this.cursor = Cursors.SizeNWSE; break; case CommandPosition.TopCenter: case CommandPosition.BottomCenter: this.cursor = Cursors.SizeNS; break; case CommandPosition.MiddleLeft: case CommandPosition.MiddleRight: this.cursor = Cursors.SizeWE; break; case CommandPosition.TopRight: case CommandPosition.BottomLeft: this.cursor = Cursors.SizeNESW; break; } }
public override void Generate() { List <OsbSprite> LyricsSprites = new List <OsbSprite>(); foreach (char c in LyricsContent) { string char_path = System.IO.Path.Combine(CharPath, $"{(int)c}.png"); OsbSprite sprite = GetLayer("BeginningContentsEffects").CreateSprite(char_path, OsbOrigin.CentreLeft); LyricsSprites.Add(sprite); } float font_size_len = 128 * FontScale; //显示字幕 for (int i = 0; i < LyricsSprites.Count; i++) { var sprite = LyricsSprites[i]; sprite.Fade(OsbEasing.None, StartTime + i * FadeInTimeInv, StartTime + 500 + i * FadeInTimeInv, 0, 1); sprite.Fade(OsbEasing.None, EndTime - 500, EndTime, 1, 0); var postion = new CommandPosition(Position.X + (font_size_len + UnitOffset) * i, Position.Y); sprite.Move(StartTime, postion.X, postion.Y); sprite.Scale(StartTime, FontScale); } }
public override void Generate() { var layer = GetLayer("TitleLightDotFlyEffect"); for (int i = 0; i < Count; i++) { var sprite = layer.CreateSprite(@"SB\effect\light_dot.png"); float total_time = StartTime + (float)Random(0, 1.0f) * FlyTime; while (total_time < EndTime) { float cast_time = (float)Random(FlyTime * (1 - FlyRandomTimeRate), FlyTime * (1 + FlyRandomTimeRate)); var random_start_posion = new CommandPosition(854, Random(-0, 480)); var end_position = new CommandPosition(854 - Random(854 * (1 - 0.25), 854 * (1 + 0.25)), Random(-0, 480)); var alpha = Random(MinAlpha, MaxAlpha); sprite.Fade(OsbEasing.None, total_time, total_time + FadeInOutTime, 0, alpha); sprite.Fade(OsbEasing.None, total_time + cast_time - FadeInOutTime, total_time + cast_time, alpha, 0); sprite.Additive(total_time, total_time + cast_time); sprite.Move(OsbEasing.None, total_time, total_time + cast_time, random_start_posion, end_position); total_time += cast_time; } } }
public override void Generate() { var layer = GetLayer("BlurBallRaiseEffect"); for (int i = 0; i < Count; i++) { var sprite = layer.CreateSprite(FilePath); float total_time = StartTime + (float)Random(0, 1.0f) * RaiseTime; while (total_time < EndTime) { float cast_time = (float)Random(RaiseTime * (1 - RaiseRandomTimeRate), RaiseTime * (1 + RaiseRandomTimeRate)); var random_start_posion = new CommandPosition(Random(-107, 640), BaseY); var end_position = new CommandPosition(random_start_posion.X, random_start_posion.Y - Random(RaiseHeight * (1 - RaiseRandomHeightRate), RaiseHeight * (1 + RaiseRandomHeightRate))); var alpha = Random(MinAlpha, MaxAlpha); sprite.Fade(OsbEasing.None, total_time, total_time + FadeInOutTime, 0, alpha); sprite.Fade(OsbEasing.None, total_time + cast_time - FadeInOutTime, total_time + cast_time, alpha, 0); sprite.Scale(total_time, Random(ScaleMin, ScaleMax)); sprite.Color(total_time, GetRandomColor()); sprite.Move(OsbEasing.None, total_time, total_time + cast_time, random_start_posion, end_position); total_time += cast_time; } } }
public CommandItem(CommandPosition position, EditorItem owner) { this.Owner = owner; this.commandPosition = position; this.widthInPixels = commandSize; this.heightInPixels = commandSize; }
public override void Generate() { var layer = GetLayer("TitleSakuraFlyingEffect"); for (int i = 0; i < Count; i++) { var sprite = layer.CreateSprite($@"SB\effect\sakura\flower{Random(1,5)}.png"); float total_time = StartTime + (float)Random(0, 1.0f) * FlyTime; while (total_time < EndTime) { float cast_time = (float)Random(FlyTime * (1 - FlyRandomTimeRate), FlyTime * (1 + FlyRandomTimeRate)); var random_start_posion = new CommandPosition(854, Random(-0, 480)); var end_position = new CommandPosition(854 - Random(854 * (1 - 0.25), 854 * (1 + 0.25)), Random(-0, 480)); var alpha = Random(MinAlpha, MaxAlpha); var random_radius = Random(0, 2 * Math.PI); var random_rotate_radius = Random(-420, 420) * Math.PI / 180; float random_scale_start_x, random_scale_start_y, random_scale_end_x, random_scale_end_y; float keep_scale = (float)Random(BaseSize * (1 - SizeRange), BaseSize * (1 + SizeRange)); float change_scale_start = (float)(Random(BaseSize * (1 - SizeRange), BaseSize * (1 + SizeRange)) * Random(0, 1.0f)); float change_scale_end = Random(2857) % 5 == 0 ? change_scale_start : (float)(Random(BaseSize * (1 - SizeRange), BaseSize * (1 + SizeRange)) * Random(0, 1.0f)); if (Random(2857) % 2 == 0) { random_scale_start_x = random_scale_end_x = keep_scale; random_scale_start_y = change_scale_start; random_scale_end_y = change_scale_end; } else { random_scale_start_y = random_scale_end_y = keep_scale; random_scale_start_x = change_scale_start; random_scale_end_x = change_scale_end; } sprite.Fade(OsbEasing.None, total_time, total_time + FadeInOutTime, 0, alpha); sprite.Fade(OsbEasing.None, total_time + cast_time - FadeInOutTime, total_time + cast_time, alpha, 0); sprite.Rotate(OsbEasing.None, total_time, total_time + cast_time, random_radius, random_rotate_radius); sprite.ScaleVec(OsbEasing.None, total_time, total_time + cast_time, new CommandScale(random_scale_start_x, random_scale_start_y), new CommandScale(random_scale_end_x, random_scale_end_y)); sprite.Additive(total_time, total_time + cast_time); sprite.Move(OsbEasing.None, total_time, total_time + cast_time, random_start_posion, end_position); total_time += cast_time; } } }
//认怂,todo//显示一半index,后半部分是前半部分的镜像 public void GenerateMirrorSakura(int total_sakura_count, float sakura_size_width) { for (int current_index = 0; current_index < total_sakura_count; current_index++) { var bg_sprite = RequestAvaliableSakuraSprite(current_index); bg_sprite.Fade(OsbEasing.None, StartTime + current_index * FadeInTimeInv, StartTime + 500 + current_index * FadeInTimeInv, 0, SakuraAlpha); bg_sprite.Fade(OsbEasing.None, EndTime - 500, EndTime, SakuraAlpha, 0); var postion = new CommandPosition(Position.X + (sakura_size_width + SakuraUnitOffset) * current_index, Position.Y); bg_sprite.Move(StartTime, postion.X, postion.Y); bg_sprite.Scale(StartTime, FontScale); } }
public override void Generate() { var layer = GetLayer("LyricsLayer"); foreach (char c in LyricsContent) { string char_path = System.IO.Path.Combine(CharPath, $"{(int)c}.png"); OsbSprite sprite = layer.CreateSprite(char_path, OsbOrigin.CentreLeft); LyricsSprites.Add(sprite); } float font_size_len = 128 * FontScale; //显示字幕 for (int i = 0; i < LyricsSprites.Count; i++) { var sprite = LyricsSprites[i]; sprite.Fade(OsbEasing.None, StartTime + i * FadeInTimeInv, StartTime + 500 + i * FadeInTimeInv, 0, 1); sprite.Fade(OsbEasing.None, EndTime - 500, EndTime, 1, 0); var postion = new CommandPosition(Position.X + (font_size_len + UnitOffset) * i, Position.Y); sprite.Move(StartTime, postion.X, postion.Y); sprite.Scale(StartTime, FontScale); } //显示樱花背景 92x480 float total_lyrics_content_width = LyricsSprites.Count * (font_size_len + UnitOffset); float sakura_size_width = 92.0f * FontScale; float sakura_size_height = 480.0f * FontScale; int total_sakura_count = (int)(total_lyrics_content_width / (sakura_size_width + SakuraUnitOffset)) + 1; /* * if (total_sakura_count>15) * { * GenerateFullSakura(total_sakura_count,sakura_size_width); * } * else * { * GenerateMirrorSakura(total_sakura_count, sakura_size_width); * } */ GenerateMirrorSakura(total_sakura_count, sakura_size_width); }
private void ShowINOCHIPart() { string title = @"いのち"; float size = 32 * INOCHIScale; for (int i = 0; i < title.Length; i++) { char c = title[i]; var position = new CommandPosition(INOCHIBaseX, INOCHIStartY + (INOCHIUnitOffset + size) * i); var sprite = GetLayer("TitleShowTitleEffect").CreateSprite($@"SB\font\title\l{(int)c}.png", OsbOrigin.Centre, new CommandPosition(position.X, position.Y)); sprite.Fade(OsbEasing.None, StartTime + INOCHIFadeOutTimeInv * i, StartTime + INOCHIFadeOutTimeInv * i + FadeOutTime, 0, 1); sprite.Fade(OsbEasing.None, EndTime - FadeInTime, EndTime, 1, 0); sprite.Scale(StartTime, INOCHIScale); sprite.Color(StartTime, 0, 0, 0); } }
private void ShowSubTitle() { string title = @"I was born for you"; float size = 32 * SubTitleScale; for (int i = 0; i < title.Length; i++) { char c = title[i]; var position = new CommandPosition(SubTitleStartX + (SubTitleUnitOffset + size) * i, SubTitleBaseY); var sprite = GetLayer("TitleShowTitleEffect").CreateSprite($@"SB\font\title\l{(int)c}.png", OsbOrigin.Centre, new CommandPosition(position.X, SubTitleBaseY)); sprite.Fade(OsbEasing.None, StartTime + FadeOutTimeInv * i, StartTime + FadeOutTimeInv * i + FadeOutTime, 0, 1); sprite.Fade(OsbEasing.None, EndTime - FadeInTime, EndTime, 1, 0); sprite.Scale(StartTime, SubTitleScale); sprite.Color(StartTime, 0, 0, 0); } }
private void ShowContent(string content, int move_distance, int start_time, int end_time, int start_x, float base_y, int fadeout_time, int fadein_time, float scale, float offset, int move_time, OsbEasing move_easing) { float size = 128 * Scale; for (int i = 0; i < content.Length; i++) { char c = content[i]; var position = new CommandPosition(start_x + (offset + size) * i, base_y); var sprite = GetLayer("TitleShowInfoEffect").CreateSprite($@"SB\font\title\{(int)c}.png", OsbOrigin.Centre, new CommandPosition(position.X, base_y)); sprite.Fade(OsbEasing.None, start_time + FadeOutTimeInv * i, start_time + FadeOutTime + FadeOutTimeInv * i, 0, 1); sprite.Fade(OsbEasing.None, end_time - FadeInTime, end_time, 1, 0); sprite.Scale(start_time, scale); sprite.Color(start_time, 0, 0, 0); sprite.MoveX(move_easing, start_time, start_time + move_time, position.X, position.X + move_distance); } }
//显示index 1~15,中间插几张镜像 public void GenerateFullSakura(int total_sakura_count, float sakura_size_width) { for (int current_index = 0; current_index < total_sakura_count; current_index++) { int sprite_index = current_index; bool is_loop = false; if (sprite_index > 8 && sprite_index < (total_sakura_count - 7)) { sprite_index = 8 + sprite_index % 2; is_loop = sprite_index % 2 != 0; } if (sprite_index > (total_sakura_count - 7)) { sprite_index = 8 + total_sakura_count - sprite_index; } var bg_sprite = RequestAvaliableSakuraSprite(sprite_index); bg_sprite.Fade(OsbEasing.None, StartTime + current_index * FadeInTimeInv, StartTime + 500 + current_index * FadeInTimeInv, 0, SakuraAlpha); bg_sprite.Fade(OsbEasing.None, EndTime - 500, EndTime, SakuraAlpha, 0); if (is_loop) { if (Random(2) != 0) { bg_sprite.FlipH(StartTime, EndTime); } if (Random(2) != 0) { //bg_sprite.FlipV(StartTime, EndTime); } } var postion = new CommandPosition(Position.X + (sakura_size_width + SakuraUnitOffset) * current_index, Position.Y); bg_sprite.Move(StartTime, postion.X, postion.Y); bg_sprite.Scale(StartTime, FontScale); } }
private void ShowMainTitle() { string title = @"伏凋のスペア"; float size = 128 * Scale; for (int i = 0; i < title.Length; i++) { char c = title[i]; var position = new CommandPosition(StartX + (Offset + size) * i, BaseY + CharPositionOffset[i] * Scale); var sprite = GetLayer("TitleShowTitleEffect").CreateSprite($@"SB\font\title\{(int)c}.png", OsbOrigin.Centre, new CommandPosition(position.X, BaseY)); sprite.Fade(OsbEasing.None, StartTime, StartTime + FadeOutTime, 0, 1); sprite.Fade(OsbEasing.None, EndTime - FadeInTime, EndTime, 1, 0); sprite.Scale(StartTime, Scale); sprite.Color(StartTime, 0, 0, 0); sprite.MoveY(MoveEasing, StartTime, StartTime + MoveTime, BaseY, position.Y); } }
private void ShowTitleSakuraPart() { //flower4.png float size = 128 * Scale; var position = new CommandPosition(StartX + (Offset + size) * 3 + SakuraOffset.X, BaseY + CharPositionOffset[3] * Scale + SakuraOffset.Y); var sprite = GetLayer("TitleShowTitleEffect").CreateSprite(@"SB\effect\title_flower.png", OsbOrigin.Centre, new CommandPosition(position.X, BaseY)); sprite.Fade(OsbEasing.None, StartTime, StartTime + FadeOutTime, 0, 1); sprite.Fade(OsbEasing.None, EndTime - FadeInTime, EndTime, 1, 0); sprite.Rotate(StartTime, SakuraAngle * Math.PI / 180); sprite.Scale(StartTime, SakuraScale); var color_change_time = StartTime + (EndTime - StartTime) / 2; sprite.Color(StartTime, 0, 0, 0); sprite.Color(OsbEasing.None, color_change_time, color_change_time + 500, new CommandColor(0, 0, 0), new CommandColor(1, 1, 1)); sprite.MoveY(MoveEasing, StartTime, StartTime + MoveTime, BaseY, position.Y); }
public void Move(double time, CommandPosition position) => Move(OsbEasing.None, time, time, position, position);
public void Move(double startTime, double endTime, CommandPosition startPosition, double endX, double endY) => Move(OsbEasing.None, startTime, endTime, startPosition, endX, endY);
public void Move(OsbEasing easing, double startTime, double endTime, CommandPosition startPosition, double endX, double endY) => Move(easing, startTime, endTime, startPosition, new CommandPosition(endX, endY));
public void Move(OsbEasing easing, double startTime, double endTime, CommandPosition startPosition, CommandPosition endPosition) => addCommand(new MoveCommand(easing, startTime, endTime, startPosition, endPosition));
public void AddCommandPosition(string address, CommandPosition commandPosition) { address = Convert.ToInt32(address, 16).ToString(); mLM3Memory.SetCellPositionByAddress(address, commandPosition); }
public IOsbSpriteCommand ParseCommandLine(string line, int lineNumber, CommandPosition initialPosition) { var values = line.Trim().Split(','); if (string.IsNullOrEmpty(values[3])) { values[3] = values[2]; } var commandType = values[0]; var easing = (OsbEasing)int.Parse(values[1]); var startTime = double.Parse(values[2], CultureInfo.InvariantCulture); var endTime = double.Parse(values[3], CultureInfo.InvariantCulture); switch (commandType) { case "F": { var startValue = double.Parse(values[4], CultureInfo.InvariantCulture); var endValue = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue; return(new FadeCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = startValue, EndValue = endValue, Line = lineNumber, }); } case "S": { var startValue = double.Parse(values[4], CultureInfo.InvariantCulture); var endValue = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue; return(new ScaleCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = startValue, EndValue = endValue, Line = lineNumber, }); } case "V": { var startX = double.Parse(values[4], CultureInfo.InvariantCulture); var startY = double.Parse(values[5], CultureInfo.InvariantCulture); var endX = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX; var endY = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY; return(new VectorScaleCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = new CommandScale() { X = startX, Y = startY }, EndValue = new CommandScale() { X = endX, Y = endY }, Line = lineNumber, }); } case "R": { var startValue = double.Parse(values[4], CultureInfo.InvariantCulture); var endValue = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue; return(new RotateCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = startValue, EndValue = endValue, Line = lineNumber, }); } case "M": { var startX = double.Parse(values[4], CultureInfo.InvariantCulture); var startY = double.Parse(values[5], CultureInfo.InvariantCulture); var endX = values.Length > 6 ? double.Parse(values[6], CultureInfo.InvariantCulture) : startX; var endY = values.Length > 7 ? double.Parse(values[7], CultureInfo.InvariantCulture) : startY; var m = new MoveCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = new CommandPosition() { X = startX, Y = startY }, EndValue = new CommandPosition() { X = endX, Y = endY }, Line = lineNumber, }; m.SetDefaultValue(initialPosition); return(m); } case "MX": { var startValue = double.Parse(values[4], CultureInfo.InvariantCulture); var endValue = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue; var mx = new MoveXCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = startValue, EndValue = endValue, Line = lineNumber, }; mx.SetDefaultValue(initialPosition); return(mx); } case "MY": { var startValue = double.Parse(values[4], CultureInfo.InvariantCulture); var endValue = values.Length > 5 ? double.Parse(values[5], CultureInfo.InvariantCulture) : startValue; var my = new MoveYCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = startValue, EndValue = endValue, Line = lineNumber, }; my.SetDefaultValue(initialPosition); return(my); } case "C": { var startR = byte.Parse(values[4], CultureInfo.InvariantCulture); var startG = byte.Parse(values[5], CultureInfo.InvariantCulture); var startB = byte.Parse(values[6], CultureInfo.InvariantCulture); var endR = values.Length > 7 ? byte.Parse(values[7], CultureInfo.InvariantCulture) : startR; var endG = values.Length > 8 ? byte.Parse(values[8], CultureInfo.InvariantCulture) : startG; var endB = values.Length > 9 ? byte.Parse(values[9], CultureInfo.InvariantCulture) : startB; return(new ColorCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = new CommandColor() { R = startR, G = startG, B = startB }, EndValue = new CommandColor() { R = endR, G = endG, B = endB }, Line = lineNumber, }); } case "P": { var type = GetParameterType(values[4]); return(new ParameterCommand() { Easing = easing, StartTime = startTime, EndTime = endTime, StartValue = type, EndValue = type, Line = lineNumber, }); } default: throw new FormatException($"Invalid Commandtype {commandType} detected"); } }
private IOsbCompoundCommand ParseCompoundCommandLine(List <string> lines, int lineStart, CommandPosition initialPosition) { IOsbCompoundCommand osbCompoundCommand = GetOsbCompoundCommand(lines.FirstOrDefault(), lineStart); for (int i = 1; i < lines.Count; i++) { osbCompoundCommand.OsbCommands = osbCompoundCommand.OsbCommands.Append(ParseCommandLine(lines[i], lineStart + i, initialPosition)); } return(osbCompoundCommand); }