mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-10 11:45:09 +00:00
Mahou Tsukai Rework (#502)
* fixed not being able to whiff in tap trial * bored meeting fixes * more board meeting fix * ww now uses z axis instead of scale * Inputs are now reworked in mahou tsukai * Fixed the particle effect
This commit is contained in:
parent
44b29dee5d
commit
b4a289470e
13 changed files with 5129 additions and 578 deletions
|
@ -1598,7 +1598,7 @@ MonoBehaviour:
|
||||||
m_PrefabInstance: {fileID: 0}
|
m_PrefabInstance: {fileID: 0}
|
||||||
m_PrefabAsset: {fileID: 0}
|
m_PrefabAsset: {fileID: 0}
|
||||||
m_GameObject: {fileID: 175559278565927848}
|
m_GameObject: {fileID: 175559278565927848}
|
||||||
m_Enabled: 0
|
m_Enabled: 1
|
||||||
m_EditorHideFlags: 0
|
m_EditorHideFlags: 0
|
||||||
m_Script: {fileID: 11500000, guid: 6892e03a2f2994b48a4b076fdfae805d, type: 3}
|
m_Script: {fileID: 11500000, guid: 6892e03a2f2994b48a4b076fdfae805d, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,132 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!74 &7400000
|
|
||||||
AnimationClip:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: Magic
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Legacy: 0
|
|
||||||
m_Compressed: 0
|
|
||||||
m_UseHighQualityCurve: 1
|
|
||||||
m_RotationCurves: []
|
|
||||||
m_CompressedRotationCurves: []
|
|
||||||
m_EulerCurves: []
|
|
||||||
m_PositionCurves: []
|
|
||||||
m_ScaleCurves: []
|
|
||||||
m_FloatCurves:
|
|
||||||
- curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0.016666668
|
|
||||||
value: 0
|
|
||||||
inSlope: Infinity
|
|
||||||
outSlope: Infinity
|
|
||||||
tangentMode: 103
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_IsActive
|
|
||||||
path: Shimmer
|
|
||||||
classID: 1
|
|
||||||
script: {fileID: 0}
|
|
||||||
m_PPtrCurves:
|
|
||||||
- curve:
|
|
||||||
- time: 0
|
|
||||||
value: {fileID: -4394865311163506109, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- time: 0.016666668
|
|
||||||
value: {fileID: -6165325623540167759, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- time: 0.033333335
|
|
||||||
value: {fileID: 3955841814209212924, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- time: 0.05
|
|
||||||
value: {fileID: -6165325623540167759, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- time: 0.06666667
|
|
||||||
value: {fileID: 3955841814209212924, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
attribute: m_Sprite
|
|
||||||
path:
|
|
||||||
classID: 212
|
|
||||||
script: {fileID: 0}
|
|
||||||
m_SampleRate: 60
|
|
||||||
m_WrapMode: 0
|
|
||||||
m_Bounds:
|
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
|
||||||
m_Extent: {x: 0, y: 0, z: 0}
|
|
||||||
m_ClipBindingConstant:
|
|
||||||
genericBindings:
|
|
||||||
- serializedVersion: 2
|
|
||||||
path: 3491122176
|
|
||||||
attribute: 2086281974
|
|
||||||
script: {fileID: 0}
|
|
||||||
typeID: 1
|
|
||||||
customType: 0
|
|
||||||
isPPtrCurve: 0
|
|
||||||
- serializedVersion: 2
|
|
||||||
path: 0
|
|
||||||
attribute: 0
|
|
||||||
script: {fileID: 0}
|
|
||||||
typeID: 212
|
|
||||||
customType: 23
|
|
||||||
isPPtrCurve: 1
|
|
||||||
pptrCurveMapping:
|
|
||||||
- {fileID: -4394865311163506109, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- {fileID: -6165325623540167759, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- {fileID: 3955841814209212924, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- {fileID: -6165325623540167759, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
- {fileID: 3955841814209212924, guid: a7ebfee08631d124d9385ba110cd71c0, type: 3}
|
|
||||||
m_AnimationClipSettings:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
|
||||||
m_AdditiveReferencePoseTime: 0
|
|
||||||
m_StartTime: 0
|
|
||||||
m_StopTime: 0.083333336
|
|
||||||
m_OrientationOffsetY: 0
|
|
||||||
m_Level: 0
|
|
||||||
m_CycleOffset: 0
|
|
||||||
m_HasAdditiveReferencePose: 0
|
|
||||||
m_LoopTime: 0
|
|
||||||
m_LoopBlend: 0
|
|
||||||
m_LoopBlendOrientation: 0
|
|
||||||
m_LoopBlendPositionY: 0
|
|
||||||
m_LoopBlendPositionXZ: 0
|
|
||||||
m_KeepOriginalOrientation: 0
|
|
||||||
m_KeepOriginalPositionY: 1
|
|
||||||
m_KeepOriginalPositionXZ: 0
|
|
||||||
m_HeightFromFeet: 0
|
|
||||||
m_Mirror: 0
|
|
||||||
m_EditorCurves:
|
|
||||||
- curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0.016666668
|
|
||||||
value: 0
|
|
||||||
inSlope: Infinity
|
|
||||||
outSlope: Infinity
|
|
||||||
tangentMode: 103
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_IsActive
|
|
||||||
path: Shimmer
|
|
||||||
classID: 1
|
|
||||||
script: {fileID: 0}
|
|
||||||
m_EulerEditorCurves: []
|
|
||||||
m_HasGenericRootTransform: 0
|
|
||||||
m_HasMotionFloatCurves: 0
|
|
||||||
m_Events:
|
|
||||||
- time: 0.083333336
|
|
||||||
functionName: Kill
|
|
||||||
data:
|
|
||||||
objectReferenceParameter: {fileID: 0}
|
|
||||||
floatParameter: 0
|
|
||||||
intParameter: 0
|
|
||||||
messageOptions: 0
|
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: a129607f5aae4eb49b0ac18493244372
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 7400000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
|
@ -1,72 +0,0 @@
|
||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1102 &-6929626609083400027
|
|
||||||
AnimatorState:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: Magic
|
|
||||||
m_Speed: 0.25
|
|
||||||
m_CycleOffset: 0
|
|
||||||
m_Transitions: []
|
|
||||||
m_StateMachineBehaviours: []
|
|
||||||
m_Position: {x: 50, y: 50, z: 0}
|
|
||||||
m_IKOnFeet: 0
|
|
||||||
m_WriteDefaultValues: 1
|
|
||||||
m_Mirror: 0
|
|
||||||
m_SpeedParameterActive: 0
|
|
||||||
m_MirrorParameterActive: 0
|
|
||||||
m_CycleOffsetParameterActive: 0
|
|
||||||
m_TimeParameterActive: 0
|
|
||||||
m_Motion: {fileID: 7400000, guid: a129607f5aae4eb49b0ac18493244372, type: 2}
|
|
||||||
m_Tag:
|
|
||||||
m_SpeedParameter:
|
|
||||||
m_MirrorParameter:
|
|
||||||
m_CycleOffsetParameter:
|
|
||||||
m_TimeParameter:
|
|
||||||
--- !u!91 &9100000
|
|
||||||
AnimatorController:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: MagicAnimator
|
|
||||||
serializedVersion: 5
|
|
||||||
m_AnimatorParameters: []
|
|
||||||
m_AnimatorLayers:
|
|
||||||
- serializedVersion: 5
|
|
||||||
m_Name: Base Layer
|
|
||||||
m_StateMachine: {fileID: 8758913436755009276}
|
|
||||||
m_Mask: {fileID: 0}
|
|
||||||
m_Motions: []
|
|
||||||
m_Behaviours: []
|
|
||||||
m_BlendingMode: 0
|
|
||||||
m_SyncedLayerIndex: -1
|
|
||||||
m_DefaultWeight: 0
|
|
||||||
m_IKPass: 0
|
|
||||||
m_SyncedLayerAffectsTiming: 0
|
|
||||||
m_Controller: {fileID: 9100000}
|
|
||||||
--- !u!1107 &8758913436755009276
|
|
||||||
AnimatorStateMachine:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: Base Layer
|
|
||||||
m_ChildStates:
|
|
||||||
- serializedVersion: 1
|
|
||||||
m_State: {fileID: -6929626609083400027}
|
|
||||||
m_Position: {x: 303, y: 44, z: 0}
|
|
||||||
m_ChildStateMachines: []
|
|
||||||
m_AnyStateTransitions: []
|
|
||||||
m_EntryTransitions: []
|
|
||||||
m_StateMachineTransitions: {}
|
|
||||||
m_StateMachineBehaviours: []
|
|
||||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
|
||||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
|
||||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
|
||||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
|
||||||
m_DefaultState: {fileID: -6929626609083400027}
|
|
|
@ -1,8 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: 39f83b785ae333946a675fe36007f143
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 9100000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
|
@ -68,6 +68,7 @@ namespace HeavenStudio.Games.Scripts_BoardMeeting
|
||||||
rollLoop.KillLoop(0);
|
rollLoop.KillLoop(0);
|
||||||
rollLoop = null;
|
rollLoop = null;
|
||||||
}
|
}
|
||||||
|
game.StopChairLoopSoundIfLastToStop();
|
||||||
|
|
||||||
BeatAction.New(game.gameObject, new List<BeatAction.Action>()
|
BeatAction.New(game.gameObject, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,6 +77,7 @@ namespace HeavenStudio.Games.Loaders
|
||||||
namespace HeavenStudio.Games
|
namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
using Scripts_BoardMeeting;
|
using Scripts_BoardMeeting;
|
||||||
|
using System;
|
||||||
|
|
||||||
public class BoardMeeting : Minigame
|
public class BoardMeeting : Minigame
|
||||||
{
|
{
|
||||||
|
@ -94,7 +95,7 @@ namespace HeavenStudio.Games
|
||||||
bool assistantCanBop = true;
|
bool assistantCanBop = true;
|
||||||
bool executivesCanBop = true;
|
bool executivesCanBop = true;
|
||||||
public GameEvent bop = new GameEvent();
|
public GameEvent bop = new GameEvent();
|
||||||
Sound chairLoopSound = null;
|
[NonSerialized] public Sound chairLoopSound = null;
|
||||||
int missCounter = 0;
|
int missCounter = 0;
|
||||||
private Tween shakeTween;
|
private Tween shakeTween;
|
||||||
|
|
||||||
|
@ -106,6 +107,19 @@ namespace HeavenStudio.Games
|
||||||
InitExecutives();
|
InitExecutives();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
foreach(var evt in scheduledInputs)
|
||||||
|
{
|
||||||
|
evt.Disable();
|
||||||
|
}
|
||||||
|
if (chairLoopSound != null)
|
||||||
|
{
|
||||||
|
chairLoopSound.KillLoop(0);
|
||||||
|
chairLoopSound = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
var cond = Conductor.instance;
|
var cond = Conductor.instance;
|
||||||
|
@ -124,6 +138,10 @@ namespace HeavenStudio.Games
|
||||||
SoundByte.PlayOneShotGame("boardMeeting/miss");
|
SoundByte.PlayOneShotGame("boardMeeting/miss");
|
||||||
SoundByte.PlayOneShot("miss");
|
SoundByte.PlayOneShot("miss");
|
||||||
ScoreMiss();
|
ScoreMiss();
|
||||||
|
foreach (var evt in scheduledInputs)
|
||||||
|
{
|
||||||
|
evt.Disable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,6 +330,16 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void StopChairLoopSoundIfLastToStop()
|
||||||
|
{
|
||||||
|
if (executives.FindAll(x => x.spinning).Count > 1) return;
|
||||||
|
if (chairLoopSound != null)
|
||||||
|
{
|
||||||
|
chairLoopSound.KillLoop(0);
|
||||||
|
chairLoopSound = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void InitExecutives()
|
public void InitExecutives()
|
||||||
{
|
{
|
||||||
float startPos = farLeft.position.x;
|
float startPos = farLeft.position.x;
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using UnityEngine;
|
|
||||||
using HeavenStudio.Util;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace HeavenStudio.Games.Scripts_WizardsWaltz
|
|
||||||
{
|
|
||||||
public class MagicFX : MonoBehaviour
|
|
||||||
{
|
|
||||||
public Animator animator;
|
|
||||||
public SpriteRenderer spriteRenderer;
|
|
||||||
public GameObject shimmer;
|
|
||||||
|
|
||||||
public void Awake()
|
|
||||||
{
|
|
||||||
int order = (int)Math.Round((transform.position.z - 2) * 1000);
|
|
||||||
spriteRenderer.sortingOrder = order;
|
|
||||||
shimmer.GetComponent<SpriteRenderer>().sortingOrder = order;
|
|
||||||
animator.Play("Magic", 0, 0);
|
|
||||||
|
|
||||||
Rigidbody2D rb2d = gameObject.AddComponent<Rigidbody2D>();
|
|
||||||
rb2d.gravityScale = 2.5f;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Kill()
|
|
||||||
{
|
|
||||||
Destroy(shimmer);
|
|
||||||
Destroy(gameObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
fileFormatVersion: 2
|
|
||||||
guid: b107d57be99ffe34ea2d14c49c15ff80
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
|
@ -12,20 +12,20 @@ namespace HeavenStudio.Games.Scripts_WizardsWaltz
|
||||||
public double createBeat;
|
public double createBeat;
|
||||||
|
|
||||||
private WizardsWaltz game;
|
private WizardsWaltz game;
|
||||||
private bool hit = false;
|
|
||||||
private bool passed = false;
|
private bool passed = false;
|
||||||
|
|
||||||
public int order = 0;
|
public int order = 0;
|
||||||
|
|
||||||
private void Awake()
|
public void Init(bool spawnedInactive)
|
||||||
{
|
{
|
||||||
game = WizardsWaltz.instance;
|
game = WizardsWaltz.instance;
|
||||||
spriteRenderer.sortingOrder = order;
|
spriteRenderer.sortingOrder = order;
|
||||||
animator.Play("Appear", 0, 0);
|
animator.Play("Appear", 0, spawnedInactive ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Start() {
|
public void StartInput(double beat, float length)
|
||||||
game.ScheduleInput(createBeat, game.beatInterval, InputType.STANDARD_DOWN | InputType.DIRECTION_DOWN, Just, Miss, Out);
|
{
|
||||||
|
game.ScheduleInput(beat, length, InputType.STANDARD_DOWN | InputType.DIRECTION_DOWN, Just, Miss, Out);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
|
@ -65,13 +65,11 @@ namespace HeavenStudio.Games.Scripts_WizardsWaltz
|
||||||
public void Ace()
|
public void Ace()
|
||||||
{
|
{
|
||||||
game.wizard.Magic(this, true);
|
game.wizard.Magic(this, true);
|
||||||
hit = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NearMiss()
|
public void NearMiss()
|
||||||
{
|
{
|
||||||
game.wizard.Magic(this, false);
|
game.wizard.Magic(this, false);
|
||||||
hit = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Just(PlayerActionEvent caller, float state)
|
private void Just(PlayerActionEvent caller, float state)
|
||||||
|
|
|
@ -10,9 +10,6 @@ namespace HeavenStudio.Games.Scripts_WizardsWaltz
|
||||||
public Animator animator;
|
public Animator animator;
|
||||||
public GameObject shadow;
|
public GameObject shadow;
|
||||||
|
|
||||||
private float newBeat = 0;
|
|
||||||
private int beats = 0;
|
|
||||||
|
|
||||||
private WizardsWaltz game;
|
private WizardsWaltz game;
|
||||||
private float songPos;
|
private float songPos;
|
||||||
|
|
||||||
|
@ -25,17 +22,20 @@ namespace HeavenStudio.Games.Scripts_WizardsWaltz
|
||||||
{
|
{
|
||||||
songPos = (float)(Conductor.instance.songPositionInBeatsAsDouble - game.wizardBeatOffset);
|
songPos = (float)(Conductor.instance.songPositionInBeatsAsDouble - game.wizardBeatOffset);
|
||||||
var am = game.beatInterval / 2f;
|
var am = game.beatInterval / 2f;
|
||||||
var x = Mathf.Sin(Mathf.PI * songPos / am) * 6;
|
var x = Mathf.Sin(Mathf.PI * songPos / am) * game.xRange;
|
||||||
var y = Mathf.Cos(Mathf.PI * songPos / am);
|
var y = Mathf.Cos(Mathf.PI * songPos / am) * game.yRange;
|
||||||
var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f;
|
var z = Mathf.Cos(Mathf.PI * songPos / am) * game.zRange;
|
||||||
|
//var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f;
|
||||||
|
|
||||||
transform.position = new Vector3(x, 3f - y * 0.5f, 0);
|
transform.position = new Vector3(x, 3f - y * 0.5f, z);
|
||||||
shadow.transform.position = new Vector3(x, -3f + y * 1.5f, 0);
|
shadow.transform.position = new Vector3(x, game.plantYOffset + y * 1.5f, z);
|
||||||
|
|
||||||
var xscale = scale;
|
/*var xscale = scale;
|
||||||
if (y > 0) xscale *= -1;
|
if (y > 0) xscale *= -1;
|
||||||
transform.localScale = new Vector3(xscale, scale, 1);
|
transform.localScale = new Vector3(xscale, scale, 1);
|
||||||
shadow.transform.localScale = new Vector3(scale, scale, 1);
|
shadow.transform.localScale = new Vector3(scale, scale, 1);*/
|
||||||
|
|
||||||
|
transform.localScale = new Vector3((y > 0) ? -1 : 1, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LateUpdate()
|
private void LateUpdate()
|
||||||
|
|
|
@ -17,16 +17,24 @@ namespace HeavenStudio.Games.Loaders
|
||||||
{
|
{
|
||||||
new GameAction("start interval", "Start Interval")
|
new GameAction("start interval", "Start Interval")
|
||||||
{
|
{
|
||||||
function = delegate { WizardsWaltz.instance.SetIntervalStart(eventCaller.currentEntity.beat, eventCaller.currentEntity.length); },
|
preFunction = delegate { var e = eventCaller.currentEntity; WizardsWaltz.PreInterval(e.beat, e.length, e["auto"]); },
|
||||||
defaultLength = 6f,
|
defaultLength = 6f,
|
||||||
resizable = true,
|
resizable = true,
|
||||||
priority = 1
|
parameters = new List<Param>()
|
||||||
|
{
|
||||||
|
new Param("auto", true, "Auto Pass Turn")
|
||||||
|
},
|
||||||
|
preFunctionLength = 1
|
||||||
},
|
},
|
||||||
new GameAction("plant", "Plant")
|
new GameAction("plant", "Plant")
|
||||||
{
|
{
|
||||||
function = delegate { WizardsWaltz.instance.SpawnFlower(eventCaller.currentEntity.beat); },
|
|
||||||
defaultLength = 0.5f,
|
defaultLength = 0.5f,
|
||||||
},
|
},
|
||||||
|
new GameAction("passTurn", "Pass Turn")
|
||||||
|
{
|
||||||
|
preFunction = delegate { var e = eventCaller.currentEntity; WizardsWaltz.PrePassTurn(e.beat); },
|
||||||
|
preFunctionLength = 1
|
||||||
|
}
|
||||||
},
|
},
|
||||||
new List<string>() {"agb", "repeat"},
|
new List<string>() {"agb", "repeat"},
|
||||||
"agbwizard", "en",
|
"agbwizard", "en",
|
||||||
|
@ -38,6 +46,7 @@ namespace HeavenStudio.Games.Loaders
|
||||||
|
|
||||||
namespace HeavenStudio.Games
|
namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
|
using Jukebox;
|
||||||
using Scripts_WizardsWaltz;
|
using Scripts_WizardsWaltz;
|
||||||
|
|
||||||
public class WizardsWaltz : Minigame
|
public class WizardsWaltz : Minigame
|
||||||
|
@ -47,99 +56,220 @@ namespace HeavenStudio.Games
|
||||||
public Girl girl;
|
public Girl girl;
|
||||||
public GameObject plantHolder;
|
public GameObject plantHolder;
|
||||||
public GameObject plantBase;
|
public GameObject plantBase;
|
||||||
public GameObject fxHolder;
|
|
||||||
public GameObject fxBase;
|
|
||||||
|
|
||||||
private int timer = 0;
|
[Header("Properties")]
|
||||||
public float beatInterval = 6f;
|
[NonSerialized] public float beatInterval = 6f;
|
||||||
double intervalStartBeat;
|
[NonSerialized] public double intervalStartBeat;
|
||||||
bool intervalStarted;
|
|
||||||
public double wizardBeatOffset = 0f;
|
public double wizardBeatOffset = 0f;
|
||||||
|
public float xRange = 5;
|
||||||
[NonSerialized] public int plantsLeft = 0; //this variable is unused
|
public float zRange = 5;
|
||||||
|
public float yRange = 0.5f;
|
||||||
|
public float plantYOffset = -2f;
|
||||||
|
private List<Plant> currentPlants = new();
|
||||||
|
|
||||||
public static WizardsWaltz instance;
|
public static WizardsWaltz instance;
|
||||||
|
|
||||||
|
private static CallAndResponseHandler crHandlerInstance;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
instance = this;
|
instance = this;
|
||||||
wizard.Init();
|
wizard.Init();
|
||||||
|
}
|
||||||
|
|
||||||
var nextStart = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "wizardsWaltz/start interval" && c.beat + c.length >= Conductor.instance.songPositionInBeatsAsDouble);
|
public override void OnPlay(double beat)
|
||||||
|
|
||||||
if (nextStart != null)
|
|
||||||
{
|
{
|
||||||
EventCaller.instance.CallEvent(nextStart, true);
|
SetWizardOffset(beat);
|
||||||
|
crHandlerInstance = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnGameSwitch(double beat)
|
||||||
|
{
|
||||||
|
SetWizardOffset(beat);
|
||||||
|
if (queuedIntervals.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var interval in queuedIntervals)
|
||||||
|
{
|
||||||
|
SetIntervalStart(interval.beat, interval.interval, beat, interval.autoPassTurn);
|
||||||
|
}
|
||||||
|
queuedIntervals.Clear();
|
||||||
|
}
|
||||||
|
if (crHandlerInstance != null && crHandlerInstance.queuedEvents.Count > 0)
|
||||||
|
{
|
||||||
|
if (crHandlerInstance.queuedEvents.Find(x => x.beat >= beat) != null)
|
||||||
|
{
|
||||||
|
crHandlerInstance = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foreach (var crEvent in crHandlerInstance.queuedEvents)
|
||||||
|
{
|
||||||
|
SpawnFlower(crEvent.beat, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetWizardOffset(double beat)
|
||||||
|
{
|
||||||
|
var allIntervals = EventCaller.GetAllInGameManagerList("wizardsWaltz", new string[] { "start interval" });
|
||||||
|
var tempEvents = allIntervals.FindAll(x => x.beat >= beat);
|
||||||
|
if (tempEvents.Count > 0)
|
||||||
|
{
|
||||||
|
wizardBeatOffset = tempEvents[0].beat;
|
||||||
|
beatInterval = tempEvents[0].length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
if (!Conductor.instance.isPlaying && !Conductor.instance.isPaused && intervalStarted)
|
if (Conductor.instance.isPlaying && !Conductor.instance.isPaused)
|
||||||
{
|
{
|
||||||
intervalStarted = false;
|
if (passedTurns.Count > 0)
|
||||||
|
{
|
||||||
|
foreach (var pass in passedTurns)
|
||||||
|
{
|
||||||
|
PassTurnStandalone(pass);
|
||||||
|
}
|
||||||
|
passedTurns.Clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FixedUpdate()
|
private List<RiqEntity> GetAllPlantsBetweenBeat(double beat, double endBeat)
|
||||||
{
|
{
|
||||||
if (timer % 8 == 0 || UnityEngine.Random.Range(0,8) == 0)
|
return EventCaller.GetAllInGameManagerList("wizardsWaltz", new string[] { "plant" }).FindAll(x => x.beat >= beat && x.beat < endBeat);
|
||||||
{
|
|
||||||
var songPos = (float)(Conductor.instance.songPositionInBeatsAsDouble - wizardBeatOffset);
|
|
||||||
var am = beatInterval / 2f;
|
|
||||||
var x = Mathf.Sin(Mathf.PI * songPos / am) * 6 + UnityEngine.Random.Range(-0.5f, 0.5f);
|
|
||||||
var y = Mathf.Cos(Mathf.PI * songPos / am) * 0.5f + UnityEngine.Random.Range(-0.5f, 0.5f);
|
|
||||||
var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f + UnityEngine.Random.Range(-0.2f, 0.2f);
|
|
||||||
|
|
||||||
MagicFX magic = Instantiate(fxBase, fxHolder.transform).GetComponent<MagicFX>();
|
|
||||||
|
|
||||||
magic.transform.position = new Vector3(x, 2f + y, 0);
|
|
||||||
magic.transform.localScale = wizard.gameObject.transform.localScale;
|
|
||||||
magic.gameObject.SetActive(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
timer++;
|
public void SetIntervalStart(double beat, float interval, double gameSwitchBeat, bool autoPassTurn)
|
||||||
}
|
|
||||||
|
|
||||||
public void SetIntervalStart(double beat, float interval = 4f)
|
|
||||||
{
|
{
|
||||||
// Don't do these things if the interval was already started.
|
|
||||||
if (!intervalStarted)
|
|
||||||
{
|
|
||||||
plantsLeft = 0;
|
|
||||||
intervalStarted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
wizardBeatOffset = beat;
|
wizardBeatOffset = beat;
|
||||||
intervalStartBeat = beat;
|
intervalStartBeat = beat;
|
||||||
beatInterval = interval;
|
beatInterval = interval;
|
||||||
|
|
||||||
|
CallAndResponseHandler newHandler = new();
|
||||||
|
crHandlerInstance = newHandler;
|
||||||
|
crHandlerInstance.StartInterval(beat, interval);
|
||||||
|
var relevantPlantEvents = GetAllPlantsBetweenBeat(beat, beat + interval);
|
||||||
|
foreach (var plant in relevantPlantEvents)
|
||||||
|
{
|
||||||
|
crHandlerInstance.AddEvent(plant.beat);
|
||||||
|
SpawnFlower(plant.beat, plant.beat < gameSwitchBeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SpawnFlower(double beat)
|
if (autoPassTurn)
|
||||||
{
|
{
|
||||||
// If interval hasn't started, assume this is the first hair of the interval.
|
PassTurn(beat + interval, newHandler);
|
||||||
if (!intervalStarted)
|
}
|
||||||
SetIntervalStart(beat, beatInterval);
|
}
|
||||||
|
|
||||||
SoundByte.PlayOneShotGame("wizardsWaltz/plant", beat);
|
public static void PreInterval(double beat, float interval, bool autoPassTurn)
|
||||||
Plant plant = Instantiate(plantBase, plantHolder.transform).GetComponent<Plant>();
|
{
|
||||||
|
if (GameManager.instance.currentGame == "wizardsWaltz")
|
||||||
|
{
|
||||||
|
instance.SetIntervalStart(beat, interval, beat, autoPassTurn);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
queuedIntervals.Add(new QueuedInterval()
|
||||||
|
{
|
||||||
|
beat = beat,
|
||||||
|
interval = interval,
|
||||||
|
autoPassTurn = autoPassTurn
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var songPos = (float)(Conductor.instance.songPositionInBeatsAsDouble - wizardBeatOffset);
|
private void PassTurnStandalone(double beat)
|
||||||
|
{
|
||||||
|
if (crHandlerInstance != null) PassTurn(beat, crHandlerInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PrePassTurn(double beat)
|
||||||
|
{
|
||||||
|
if (GameManager.instance.currentGame == "wizardsWaltz")
|
||||||
|
{
|
||||||
|
instance.PassTurnStandalone(beat);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
passedTurns.Add(beat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<double> passedTurns = new();
|
||||||
|
|
||||||
|
private void PassTurn(double beat, CallAndResponseHandler crHandler)
|
||||||
|
{
|
||||||
|
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||||
|
{
|
||||||
|
new BeatAction.Action(beat - 0.25, delegate
|
||||||
|
{
|
||||||
|
beatInterval = crHandler.intervalLength;
|
||||||
|
wizardBeatOffset = beat;
|
||||||
|
intervalStartBeat = beat;
|
||||||
|
foreach (var plant in currentPlants)
|
||||||
|
{
|
||||||
|
var songPos = (float)(plant.createBeat - wizardBeatOffset);
|
||||||
var am = (beatInterval / 2f);
|
var am = (beatInterval / 2f);
|
||||||
var x = Mathf.Sin(Mathf.PI * songPos / am) * 6;
|
var x = Mathf.Sin(Mathf.PI * songPos / am) * xRange;
|
||||||
var y = -3f + Mathf.Cos(Mathf.PI * songPos / am) * 1.5f;
|
var y = plantYOffset + Mathf.Cos(Mathf.PI * songPos / am) * (yRange * 1.5f);
|
||||||
var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f;
|
var z = Mathf.Cos(Mathf.PI * songPos / am) * zRange;
|
||||||
|
/*var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f;
|
||||||
var xscale = scale;
|
var xscale = scale;
|
||||||
if (y > -3.5f) xscale *= -1;
|
if (y > -3.5f) xscale *= -1;*/
|
||||||
|
|
||||||
plant.transform.localPosition = new Vector3(x, y, 0);
|
plant.transform.localPosition = new Vector3(x, y, z);
|
||||||
plant.transform.localScale = new Vector3(xscale, scale, 1);
|
//plant.transform.localScale = new Vector3(xscale, scale, 1);
|
||||||
|
}
|
||||||
|
|
||||||
plant.order = (int)Math.Round((scale - 1) * 1000);
|
foreach (var crEvent in crHandler.queuedEvents)
|
||||||
plant.gameObject.SetActive(true);
|
{
|
||||||
|
Plant plantToInput = currentPlants.Find(x => x.createBeat == crEvent.beat);
|
||||||
|
plantToInput.StartInput(beat - 0.25, (float)crEvent.relativeBeat + 0.25f);
|
||||||
|
}
|
||||||
|
crHandler.queuedEvents.Clear();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<QueuedInterval> queuedIntervals = new();
|
||||||
|
|
||||||
|
private struct QueuedInterval
|
||||||
|
{
|
||||||
|
public double beat;
|
||||||
|
public float interval;
|
||||||
|
public bool autoPassTurn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SpawnFlower(double beat, bool spawnedInactive)
|
||||||
|
{
|
||||||
|
if (!spawnedInactive) SoundByte.PlayOneShotGame("wizardsWaltz/plant", beat);
|
||||||
|
Plant plant = Instantiate(plantBase, plantHolder.transform).GetComponent<Plant>();
|
||||||
|
currentPlants.Add(plant);
|
||||||
|
var songPos = (float)(beat - wizardBeatOffset);
|
||||||
|
var am = (beatInterval / 2f);
|
||||||
|
var x = Mathf.Sin(Mathf.PI * songPos / am) * xRange;
|
||||||
|
var y = plantYOffset + Mathf.Cos(Mathf.PI * songPos / am) * (yRange * 1.5f);
|
||||||
|
var z = Mathf.Cos(Mathf.PI * songPos / am) * zRange;
|
||||||
|
/*var scale = 1 - Mathf.Cos(Mathf.PI * songPos / am) * 0.35f;
|
||||||
|
var xscale = scale;
|
||||||
|
if (y > -3.5f) xscale *= -1;*/
|
||||||
|
|
||||||
|
plant.transform.localPosition = new Vector3(x, y, z);
|
||||||
|
//plant.transform.localScale = new Vector3(xscale, scale, 1);
|
||||||
|
|
||||||
|
//plant.order = (int)Math.Round((scale - 1) * 1000);
|
||||||
|
plant.order = (int)Math.Round(z * -1);
|
||||||
|
|
||||||
plant.createBeat = beat;
|
plant.createBeat = beat;
|
||||||
plantsLeft++;
|
|
||||||
|
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||||
|
{
|
||||||
|
new BeatAction.Action(beat, delegate
|
||||||
|
{
|
||||||
|
plant.gameObject.SetActive(true);
|
||||||
|
plant.Init(spawnedInactive);
|
||||||
|
})
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue