public override IReelSequence Create(AntagonistSequenceProperty property) { //リール全体が行ったり来たりするシーケンスを生成 var antagonistSq = ReelSequence.Empty() .Append(sqProvider.CreateRollSequence(roleIntervalAngle * .5f, .3f)) //.5 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * -.5f, .3f)) // 0 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * .7f, .3f)) //.7 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * -.5f, .3f)) //.2 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * .6f, .3f)) //.8 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * -.4f, .3f)) //.4 .Append(sqProvider.CreateRollSequence(roleIntervalAngle * .5f, .3f)) //.9 .AppendInterval(1f); //最後に、当たりかハズレかによって、リールを進めるか戻すかのシーケンスを追加する if (property.IsOffenserWin) { antagonistSq.Append(sqProvider.CreateRollSequence(roleIntervalAngle * .1f, .1f)); } else { antagonistSq.Append(sqProvider.CreateRollSequence(roleIntervalAngle * -.9f, .4f)); } return(antagonistSq); }
public override IReelSequence Create(AntagonistSequenceProperty property) => ReelSequence.Empty() //中央までリールを回転させて .Append(sqProvider.CreateRollSequence(roleIntervalAngle * .5f, 1.5f)) //振動させて .Append(sqProvider.Create(t => t.DOShakePosition(3, 0.02f).ToSequence(), property.Offenser, property.Defenser)) //当たりなら進める、ハズレなら戻す .Append(sqProvider.CreateRollSequence(property.IsOffenserWin ? roleIntervalAngle * .5f : roleIntervalAngle * -.5f, .5f));
/// <summary> /// リーチの拮抗演出シーケンスを取得する /// </summary> /// <param name="antagonist"></param> /// <param name="property"></param> /// <returns></returns> public IReelSequence CreateAntagonistSequence(AntagonistType antagonist, AntagonistSequenceProperty property) { return(antagonistProvider.GetAntagonistSequence(antagonist, property)); }
public abstract IReelSequence Create(AntagonistSequenceProperty property);
public IReelSequence GetAntagonistSequence(AntagonistType antagonist, AntagonistSequenceProperty property) { return(antagonistSqCreatorTable[antagonist].Create(property)); }
public override IReelSequence Create(AntagonistSequenceProperty property) { //戦うベースポジション var leftBasePosition = fightCenterPosition.PlusX(-centerToFighterLength); var rightBasePosition = fightCenterPosition.PlusX(centerToFighterLength); //OffenserがDefenserにツンツンと攻撃するようなシーケンスを取得するテーブル Dictionary <RoleValue, Func <RoleTweenProvider, Sequence> > firstAntagonistSelectorTable = new Dictionary <RoleValue, Func <RoleTweenProvider, Sequence> >() { [property.Offenser] = provider => DOTween.Sequence() .Append(provider.RollMultiple(.7f, .2f)) //速くぶつかって .Append(provider.RollMultiple(-.7f, .8f)) //ゆっくり戻って .Append(provider.RollMultiple(.8f, .2f)) //速くぶつかって .Append(provider.RollMultiple(-.8f, .8f)) //ゆっくり戻って .Append(provider.RollMultiple(.9f, .1f)) //速くぶつかって .Append(provider.RollMultiple(-.9f, .8f)) //ゆっくり戻って }; //前に出てきて対決 Dictionary <RoleValue, Func <Transform, Sequence> > fightSelectorTable = new Dictionary <RoleValue, Func <Transform, Sequence> >() { [property.Defenser] = t => DOTween.Sequence() .Append(t.DOMove(rightBasePosition, .5f)) //リールからベースポジションに移動して .AppendInterval(1f) //1秒待機して .Append(FightTweenX(t, -1, .2f).SetEase(Ease.InCubic)) //素早く激突して .Append(t.DOShakePosition(.5f, .2f)) .Append(FightTweenX(t, .5f, .5f)) //半分くらい戻って .Append(FightTweenX(t, -.5f, .15f).SetEase(Ease.InCubic)) //また激突して .AppendInterval(.5f) .Append(FightTweenX(t, -.2f + .05f, .5f).SetEase(Ease.Linear)) //押して .Append(FightTweenX(t, .4f + .05f, 1f).SetEase(Ease.Linear)) //押されて .Append(FightTweenX(t, -.2f, .5f).SetEase(Ease.Linear)), //中央に戻って [property.Offenser] = t => DOTween.Sequence() .Append(t.DOMove(leftBasePosition, .5f)) .AppendInterval(1f) .Append(FightTweenX(t, 1, .2f).SetEase(Ease.InCubic)) .Append(t.DOShakePosition(.5f, .2f)) .Append(FightTweenX(t, -.5f, .5f)) .Append(FightTweenX(t, .5f, .15f).SetEase(Ease.InCubic)) .AppendInterval(.5f) .Append(FightTweenX(t, -.2f - .05f, .5f).SetEase(Ease.Linear)) //押されて .Append(FightTweenX(t, .4f + .05f, 1f).SetEase(Ease.Linear)) //押して .Append(FightTweenX(t, -.2f, .5f).SetEase(Ease.Linear)), //中央に戻って }; return(sqProvider.CreateFromProvider(firstAntagonistSelectorTable) .AppendInterval(0.5f) .Append(sqProvider.Create(fightSelectorTable)) .Append(sqProvider.CreateBackToReelSequence(property.WinRole, .5f))); //戦闘フィールドのX方向の長さに対してmultiple倍だけ動くTweenを取得する Tween FightTweenX(Transform transform, float multiple, float duration) => transform.DOMoveX(centerToFighterLength * multiple, duration).SetRelative(); }