events but cooler

This commit is contained in:
Yoshman29
2022-10-10 13:31:55 +02:00
parent 8091f5463a
commit 50976d770b
11 changed files with 135 additions and 87 deletions
+7
View File
@@ -52,6 +52,13 @@ class Character extends FlxSprite implements IBeatReceiver implements IOffsetCom
midpoint.x + (isPlayer ? -100 : 150) + globalOffset.x + cameraOffset.x,
midpoint.y - 100 + globalOffset.y + cameraOffset.y);
}
public function playSingAnim(direction:Int, suffix:String = "") {
// TODO: Script Events
var anims = ["singLEFT", "singDOWN", "singUP", "singRIGHT"];
playAnim('${anims[direction]}$suffix', true);
}
public function new(x:Float, y:Float, ?character:String = "bf", ?isPlayer:Bool = false)
{
super(x, y);
+2 -2
View File
@@ -60,7 +60,7 @@ class Note extends FlxSprite
this.noteData = noteData;
var daStage:String = PlayState.instance.curStage;
var daStage:String = PlayState.instance == null ? "stage" : PlayState.instance.curStage;
switch (daStage)
{
@@ -154,7 +154,7 @@ class Note extends FlxSprite
x -= width / 2;
if (PlayState.instance.curStage.startsWith('school'))
if (daStage.startsWith('school'))
x += 30;
if (prevNote.isSustainNote)
+29 -63
View File
@@ -209,7 +209,7 @@ class PlayState extends MusicBeatState
// ADD YOUR HARDCODED SCRIPTS HERE!
default:
trace('charts/${SONG.song}/');
var content = Paths.getFolderContent('charts/${SONG.song}/', false, true, false);
var content = Paths.getFolderContent('charts/${SONG.song}/', false, true, !fromMods);
trace(content);
for(file in content) {
@@ -1351,72 +1351,38 @@ class PlayState extends MusicBeatState
{
if (!note.wasGoodHit)
{
camZooming = true;
if (note.mustPress) {
// TODO: See TODO above
var event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID));
if (!event.cancelled) {
if (!note.isSustainNote)
{
combo++;
popUpScore(note.strumTime);
}
if (note.noteData >= 0)
health += 0.023;
else
health += 0.004;
if (!event.animCancelled) {
switch (event.direction)
{
case 0:
boyfriend.playAnim('singLEFT', true);
case 1:
boyfriend.playAnim('singDOWN', true);
case 2:
boyfriend.playAnim('singUP', true);
case 3:
boyfriend.playAnim('singRIGHT', true);
}
}
playerStrums.forEach(function(str:Strum) {
if (str.ID == Math.abs(note.noteData % 4)) {
str.press(note.strumTime);
}
});
}
} else {
// TODO: See TODO above the todo above
var event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID));
if (!event.cancelled) {
if (!event.animCancelled) {
switch (event.direction)
{
case 0:
dad.playAnim('singLEFT', true);
case 1:
dad.playAnim('singDOWN', true);
case 2:
dad.playAnim('singUP', true);
case 3:
dad.playAnim('singRIGHT', true);
}
}
note.wasGoodHit = true;
cpuStrums.forEach(function(str:Strum) {
if (str.ID == Math.abs(note.noteData % 4)) {
str.press(note.strumTime);
}
});
var event:NoteHitEvent;
if (note.mustPress)
event = scripts.event("onPlayerHit", new NoteHitEvent(note, boyfriend, true, note.noteType, note.strumID, note.noteData > 0 ? 0.023 : 0.004));
else
event = scripts.event("onDadHit", new NoteHitEvent(note, dad, false, note.noteType, note.strumID, 0));
if (!event.cancelled) {
if (event.player && !note.isSustainNote)
{
combo++;
popUpScore(note.strumTime);
}
health += event.healthGain;
if (!event.animCancelled) {
event.character.playSingAnim(event.direction);
}
(event.player ? playerStrums : cpuStrums).forEach(function(str:Strum) {
if (str.ID == Math.abs(note.strumID)) {
str.press(note.strumTime);
}
});
}
note.wasGoodHit = true;
vocals.volume = 1;
if (event.unmuteVocals) vocals.volume = 1;
if (event.enableCamZooming) camZooming = true;
if (!note.isSustainNote) deleteNote(note);
if (event.deleteNote && !note.isSustainNote) deleteNote(note);
}
}
@@ -1482,4 +1448,4 @@ class PlayState extends MusicBeatState
}
public var curLight:Int = 0;
}
}
@@ -30,9 +30,16 @@ class CancellableEvent {
*/
public function new() {}
/**
* Returns a string representation of the event, in this format:
* `[CancellableEvent]`
* `[CancellableEvent (Cancelled)]`
* @return String
*/
public function toString():String {
var rep = '[CancellableEvent ${cancelled ? "(Cancelled)" : ""} - ]';
// TODO: List all fields
var fields = Reflect.fields(this);
var claName = Type.getClassName(Type.getClass(this)).split(".");
var rep = '[${claName[claName.length-1]}${cancelled ? " (Cancelled)" : ""}]';
return rep;
}
}
+59 -13
View File
@@ -5,28 +5,47 @@ import funkin.game.Character;
class NoteHitEvent extends CancellableEvent {
@:dox(hide) public var animCancelled:Bool = false;
public var note:Note;
public var character:Character;
public var player:Bool;
public var noteType:String;
public var direction:Int;
@:dox(hide) public var deleteNote:Bool = true;
@:dox(hide) public var unmuteVocals:Bool = true;
@:dox(hide) public var enableCamZooming:Bool = true;
/**
* Creates a new NoteHitEvent with the following values:
* @param note
* @param character
* @param player
* @param noteType
* Note that has been pressed
*/
public function new(note:Note, character:Character, player:Bool, noteType:String, direction:Int) {
public var note:Note;
/**
* Character that pressed the note
*/
public var character:Character;
/**
* Whenever the Character is the player
*/
public var player:Bool;
/**
* Note Type name (null if default note)
*/
public var noteType:String;
/**
* Direction of the press (0 = Left, 1 = Down, 2 = Up, 3 = Right)
*/
public var direction:Int;
/**
* The amount of health that'll be gained from pressing that note.
*/
public var healthGain:Float;
/**
* Creates a new NoteHitEvent.
*/
public function new(note:Note, character:Character, player:Bool, noteType:String, direction:Int, healthGain:Float) {
super();
this.note = note;
this.character = character;
this.player = player;
this.noteType = noteType;
this.direction = direction;
this.direction = cast direction;
this.healthGain = healthGain;
}
/**
@@ -38,4 +57,31 @@ class NoteHitEvent extends CancellableEvent {
@:dox(hide)
public function cancelAnim() {preventAnim();}
/**
* Prevents the note from being deleted.
*/
public function preventDeletion() {
deleteNote = false;
}
@:dox(hide)
public function cancelDeletion() {preventDeletion();}
/**
* Prevents the vocals volume from being set to 1 after pressing the note.
*/
public function preventVocalsUnmute() {
unmuteVocals = false;
}
@:dox(hide)
public function cancelVocalsUnmute() {preventVocalsUnmute();}
/**
* Prevents the camera zoom every 4 beats from enabling.
*/
public function preventCamZooming() {
enableCamZooming = false;
}
@:dox(hide)
public function cancelCamZooming() {preventCamZooming();}
}