using Cielonos.MainGame.Buffs.Character; using Cielonos.MainGame.Characters.Inventory; using Cielonos.MainGame.UI; using SLSUtilities.FunctionalAnimation; using SLSUtilities.General; using SLSUtilities.WwiseAssistance; using Unity.VisualScripting; using UnityEngine; namespace Cielonos.MainGame.Characters { public partial class HumanoidAndroid : Enemy { protected override void Start() { base.Start(); PlayerCanvas.Instance.enemyInfoUIArea.CreateInfoUnit(this); animationSc.registeredFunctions.Add("DodgeStart", anim => DodgeStart()); animationSc.registeredFunctions.Add("DodgeEnd", anim => DodgeEnd()); animationSc.registeredFunctions.Add("SetBlock", anim => SetBlock()); animationSc.registeredFunctions.Add("StayBlocking", anim => StayBlocking()); animationSc.registeredFunctions.Add("RemoveBlock", anim => RemoveBlock()); } protected override void InitializeSubmodules() { base.InitializeSubmodules(); selfTimeSm.coolDownTimers["Attack"] = new Timer(5f); selfTimeSm.coolDownTimers["Action"] = new Timer(4f); selfTimeSm.coolDownTimers["Dodge"] = new Timer(5f); selfTimeSm.coolDownTimers["Block"] = new Timer(5f); } private void DodgeStart() { movementSc.isDashing = true; DodgeSource defaultDodge = DodgeSource.Default(this); reactionSc.dodgeSm.ApplyDodge(defaultDodge); } private void DodgeEnd() { movementSc.isDashing = false; movementSc.dashMoveMultiplier = 1; reactionSc.dodgeSm.RemoveDodge("DefaultDodge"); } } public partial class HumanoidAndroid { private void FAPF_GeneratePunch(RuntimeFuncAnim rtFuncAnim) { CustomFunction.PC_StringString p = rtFuncAnim.GetParams(); GeneratePunch(p.str0, attackData[p.str1]); } } public partial class HumanoidAndroid { private NormalArea GeneratePunch(string vfxName, AttackUnit attackUnit) { NormalArea punch = vfxData.SpawnVFX(vfxName).GetComponentInChildren(); punch.Initialize(this, Fraction.Enemy) .SetAttackSubmodule(attackUnit) .SetTimeSubmodule(1f) .SetHitSubmodule() .SetForceSubmodule(transform.forward); punch.hitSm.AddHitSound(AK.EVENTS.POLYCHROME_LIGHTATTACKHIT); return punch; } private void SetBlock(BlockData blockData = null) { blockData ??= this.blockData; BlockSource blockSource = blockData.CreateBlockSource(this); if (reactionSc.blockSm.HaveBlockSource(blockSource.blockName)) { return; } movementSc.canDash = false; movementSc.canDodge = false; //behaviorTree.SetVariableValue("DefenseType", "Block"); blockSource.onNormalBlock = (attackArea) => { AudioManager.Post(AK.EVENTS.POLYCHROME_NORMALBLOCK, centerPosition); attackArea.creator.movementSc.additionalForceSm.AddForce(-attackArea.creator.transform.forward * 10f); attackArea.creator.GetHit(BreakthroughType.Disruption, out _); //blockAnimName = blockAnimName == "BlockL" ? "BlockR" : "BlockL"; //animationSc.fullBodyFuncAnimSm.Play(blockAnimName, 1, 0); //player.selfTimeSm.ModifyTimeScale(0.06f, 0.4f); //attackArea.creator.selfTimeSm.ModifyTimeScale(0.06f, 0.4f); }; blockSource.onPerfectBlock = (attackArea) => { AudioManager.Post(AK.EVENTS.POLYCHROME_PERFECTBLOCK, centerPosition); attackArea.creator.movementSc.additionalForceSm.AddForce(-attackArea.creator.transform.forward * 10f); attackArea.creator.GetHit(BreakthroughType.Disruption, out _); //blockAnimName = blockAnimName == "BlockL" ? "BlockR" : "BlockL"; //animationSc.fullBodyFuncAnimSm.Play(blockAnimName, 1, 0); //player.selfTimeSm.ModifyTimeScale(0.12f, EaseType.InQuint, 0.2f); //attackArea.creator.selfTimeSm.ModifyTimeScale(0.12f, EaseType.InQuint, 0.2f); }; reactionSc.blockSm.ApplyBlock(blockSource); } private void StayBlocking() { } private void RemoveBlock(BlockData blockData = null) { blockData ??= this.blockData; movementSc.canDash = true; movementSc.canDodge = true; /*selfTimeSm.AddLocalTimer(5f, ()=>behaviorTree.SetVariableValue("DefenseType", "Dodge"));*/ reactionSc.blockSm.RemoveBlock(blockData.blockName); } } }