2021-12-23 00:08:35 +00:00
using System ;
2021-12-23 01:49:16 +00:00
using System.Linq ;
2021-12-23 00:08:35 +00:00
using System.Collections.Generic ;
using UnityEngine ;
using UnityEngine.Events ;
2023-06-10 19:13:29 +00:00
using Jukebox ;
using Jukebox.Legacy ;
2021-12-23 00:08:35 +00:00
2022-03-14 14:21:05 +00:00
namespace HeavenStudio
2021-12-23 00:08:35 +00:00
{
public class EventCaller : MonoBehaviour
{
public Transform GamesHolder ;
2023-06-10 19:13:29 +00:00
public RiqEntity currentEntity = new RiqEntity ( ) ;
2022-01-17 19:23:18 +00:00
public string currentSwitchGame ;
2021-12-23 00:08:35 +00:00
public delegate void EventCallback ( ) ;
2022-01-08 16:42:48 +00:00
public static EventCaller instance { get ; private set ; }
2022-08-21 23:46:45 +00:00
public List < Minigames . Minigame > minigames = new List < Minigames . Minigame > ( ) ;
2021-12-23 00:08:35 +00:00
2022-01-17 19:23:18 +00:00
public Minigames . Minigame GetMinigame ( string gameName )
2022-01-08 16:42:48 +00:00
{
return minigames . Find ( c = > c . name = = gameName ) ;
}
2022-01-17 19:23:18 +00:00
public Minigames . GameAction GetGameAction ( Minigames . Minigame game , string action )
2022-01-08 16:42:48 +00:00
{
return game . actions . Find ( c = > c . actionName = = action ) ;
}
2022-08-22 01:57:32 +00:00
public Minigames . Param GetGameParam ( Minigames . Minigame game , string action , string param )
{
return GetGameAction ( game , action ) . parameters . Find ( c = > c . propertyName = = param ) ;
}
2021-12-23 00:08:35 +00:00
public void Init ( )
{
2022-01-08 16:42:48 +00:00
instance = this ;
2022-01-17 19:23:18 +00:00
2023-06-10 19:13:29 +00:00
currentEntity = new RiqEntity ( ) ;
2022-02-08 01:07:03 +00:00
2022-01-17 19:23:18 +00:00
Minigames . Init ( this ) ;
List < Minigames . Minigame > minigamesInBeatmap = new List < Minigames . Minigame > ( ) ;
2023-06-10 19:13:29 +00:00
for ( int i = 0 ; i < GameManager . instance . Beatmap . Entities . Count ; i + + )
2021-12-31 14:46:11 +00:00
{
2022-02-27 18:49:06 +00:00
//go through every entity in the timeline and add the game that they're from to the minigamesInBeatmap list (ignore entities from FX only categories, i.e. Game Manager and Count-Ins)
2023-06-10 19:13:29 +00:00
Minigames . Minigame game = GetMinigame ( GameManager . instance . Beatmap . Entities [ i ] . datamodel . Split ( '/' ) [ 0 ] ) ;
2022-02-27 18:49:06 +00:00
if ( ! minigamesInBeatmap . Contains ( game ) & & ! FXOnlyGames ( ) . Contains ( game ) )
2021-12-31 14:46:11 +00:00
{
2022-02-27 18:49:06 +00:00
minigamesInBeatmap . Add ( game ) ;
2021-12-31 14:46:11 +00:00
}
}
for ( int i = 0 ; i < minigamesInBeatmap . Count ; i + + )
2021-12-23 00:08:35 +00:00
{
2022-01-23 07:01:59 +00:00
// minigames[minigames.FindIndex(c => c.name == minigamesInBeatmap[i].name)].holder = Resources.Load<GameObject>($"Games/{minigamesInBeatmap[i].name}");
2021-12-23 00:08:35 +00:00
}
}
private void Update ( )
{
2022-02-27 19:01:31 +00:00
2021-12-23 00:08:35 +00:00
}
2023-06-10 19:13:29 +00:00
public void CallEvent ( RiqEntity entity , bool gameActive )
2021-12-23 00:08:35 +00:00
{
2022-02-27 18:49:06 +00:00
string [ ] details = entity . datamodel . Split ( '/' ) ;
2022-01-17 19:23:18 +00:00
Minigames . Minigame game = minigames . Find ( c = > c . name = = details [ 0 ] ) ;
2021-12-23 00:08:35 +00:00
try
{
2022-02-27 18:49:06 +00:00
currentEntity = entity ;
2021-12-23 22:39:03 +00:00
2021-12-24 03:36:16 +00:00
if ( details . Length > 2 ) currentSwitchGame = details [ 2 ] ;
2022-01-17 19:23:18 +00:00
Minigames . GameAction action = game . actions . Find ( c = > c . actionName = = details [ 1 ] ) ;
2022-03-02 21:59:35 +00:00
if ( gameActive )
{
action . function . Invoke ( ) ;
}
else
{
action . inactiveFunction . Invoke ( ) ;
}
2021-12-23 00:08:35 +00:00
}
catch ( Exception ex )
{
2022-03-07 02:37:27 +00:00
Debug . LogWarning ( "Event not found! May be spelled wrong or it is not implemented.\n" + ex ) ;
2021-12-23 00:08:35 +00:00
}
}
2021-12-23 01:49:16 +00:00
2023-06-10 19:13:29 +00:00
public void CallPreEvent ( RiqEntity entity )
2023-01-05 04:04:31 +00:00
{
string [ ] details = entity . datamodel . Split ( '/' ) ;
Minigames . Minigame game = minigames . Find ( c = > c . name = = details [ 0 ] ) ;
try
{
currentEntity = entity ;
Minigames . GameAction action = game . actions . Find ( c = > c . actionName = = details [ 1 ] ) ;
action . preFunction . Invoke ( ) ;
}
catch ( Exception ex )
{
Debug . LogWarning ( "Event not found! May be spelled wrong or it is not implemented.\n" + ex ) ;
}
}
2023-06-10 19:13:29 +00:00
public static List < RiqEntity > GetAllInGameManagerList ( string gameName , string [ ] include )
2021-12-26 05:11:54 +00:00
{
2023-06-10 19:13:29 +00:00
List < RiqEntity > temp1 = GameManager . instance . Beatmap . Entities . FindAll ( c = > c . datamodel . Split ( '/' ) [ 0 ] = = gameName ) ;
List < RiqEntity > temp2 = new List < RiqEntity > ( ) ;
2023-05-07 20:33:15 +00:00
foreach ( string s in include )
2021-12-26 05:11:54 +00:00
{
2023-05-07 20:33:15 +00:00
temp2 . AddRange ( temp1 . FindAll ( c = > c . datamodel . Split ( '/' ) [ 1 ] . Equals ( s ) ) ) ;
2021-12-26 05:11:54 +00:00
}
return temp2 ;
}
2023-06-10 19:13:29 +00:00
public static List < RiqEntity > GetAllInGameManagerListExclude ( string gameName , string [ ] exclude )
2021-12-23 01:49:16 +00:00
{
2023-06-10 19:13:29 +00:00
List < RiqEntity > temp1 = GameManager . instance . Beatmap . Entities . FindAll ( c = > c . datamodel . Split ( '/' ) [ 0 ] = = gameName ) ;
List < RiqEntity > temp2 = new List < RiqEntity > ( ) ;
2023-05-07 20:33:15 +00:00
foreach ( string s in exclude )
2021-12-23 01:49:16 +00:00
{
2023-05-07 20:33:15 +00:00
temp2 . AddRange ( temp1 . FindAll ( c = > ! c . datamodel . Split ( '/' ) [ 1 ] . Equals ( s ) ) ) ;
2021-12-23 01:49:16 +00:00
}
return temp2 ;
}
2021-12-24 03:36:16 +00:00
2022-02-03 03:58:08 +00:00
public static List < Minigames . Minigame > FXOnlyGames ( )
{
return instance . minigames . FindAll ( c = > c . fxOnly = = true ) . ToList ( ) ;
}
2021-12-23 00:08:35 +00:00
}
}