public BlackFog(IServiceProvider services, GraphicsDevice graphics, int hp = 0) { graphicsDevice = graphics; if (content == null) { content = new ContentManager(services) { RootDirectory = "Content" } } ; fsm = new FSM(this); rand = new Random(); BF_RampageState rampage = new BF_RampageState(); BF_SwordAttackState swordAttack = new BF_SwordAttackState(); BF_SlamAttackState slamAttack = new BF_SlamAttackState(); // Adding transitions for states to all other states // if it satisfies the enum condition rampage.AddTransition(new Transition(swordAttack, () => currentMove == MoveSet.SwordAttack)); rampage.AddTransition(new Transition(slamAttack, () => currentMove == MoveSet.SlamAttack)); swordAttack.AddTransition(new Transition(rampage, () => currentMove == MoveSet.Rampage)); swordAttack.AddTransition(new Transition(slamAttack, () => currentMove == MoveSet.SlamAttack)); slamAttack.AddTransition(new Transition(rampage, () => currentMove == MoveSet.Rampage)); slamAttack.AddTransition(new Transition(swordAttack, () => currentMove == MoveSet.SwordAttack)); // Add all the states to the state machine fsm.AddState(rampage); fsm.AddState(swordAttack); fsm.AddState(slamAttack); fsm.Initialise("Rampage"); idleAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/BlackFogIdle"), 0.1f, true, 18); runAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/BlackFogRunning"), 0.06f, true, 12); fallAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/BlackFogFalling"), 0.3f, false, 6); dieAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/BlackFogDying"), 0.08f, false, 15); shockwaveSound = content.Load <SoundEffect>("Audio/shockwave_pound"); movementSpeed = 500.0f; startingPosition = new Vector2(graphics.Viewport.Width / 2, 0.0f); position = startingPosition; dest = Vector2.Zero; direction = 1; maxHealth = 500; // If it's initialised with 0 from the script // then set it to the max health if (hp == 0) { health = maxHealth; } else { health = hp; } // Time to wait to switch // to the next state FSMWaitDelay = 3.0f; FSMWaitTime = FSMWaitDelay; // Modified Rectangle dimensions // of the frame for collisions int width = (int)(idleAnimation.FrameWidth * 0.4); int left = (idleAnimation.FrameWidth - width) / 2; int height = (int)(idleAnimation.FrameWidth * 0.1); int top = idleAnimation.FrameHeight - height; localBounds = new Rectangle(left, top, width, height); sprite = new Animator(OriginLocation.Center); sprite.PlayAnimation(idleAnimation); sword = new BlackFogSword(); left_wave = new BlackFogShockwave(); right_wave = new BlackFogShockwave(); sword.Initialise(content, position); left_wave.Initialise(content); right_wave.Initialise(content); haltMovement = false; castShockWave = false; initialPositionSet = false; currentMoveNum = 0; }
public SwampCry(IServiceProvider services, GraphicsDevice graphics, int hp = 0) { graphicsDevice = graphics; if (content == null) { content = new ContentManager(services) { RootDirectory = "Content" } } ; fsm = new FSM(this); rand = new Random(); SC_RampageState idle = new SC_RampageState(); SC_ClubAttackState clubAttack = new SC_ClubAttackState(); SC_ThrowAttack throwAttack = new SC_ThrowAttack(); idle.AddTransition(new Transition(clubAttack, () => currentMove == MoveSet.ClubAttack)); idle.AddTransition(new Transition(throwAttack, () => currentMove == MoveSet.ThrowAttack)); clubAttack.AddTransition(new Transition(idle, () => currentMove == MoveSet.Rampage)); clubAttack.AddTransition(new Transition(throwAttack, () => currentMove == MoveSet.ThrowAttack)); throwAttack.AddTransition(new Transition(idle, () => currentMove == MoveSet.Rampage)); throwAttack.AddTransition(new Transition(clubAttack, () => currentMove == MoveSet.ClubAttack)); fsm.AddState(idle); fsm.AddState(clubAttack); fsm.AddState(throwAttack); fsm.Initialise("Rampage"); idleAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/SwampCryIdle"), 0.1f, true, 18); runAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/SwampCryRunning"), 0.06f, true, 12); throwAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/SwampCryThrowing"), 0.07f, true, 12); fallAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/SwampCryFalling"), 0.3f, false, 6); dieAnimation = new Animation(content.Load <Texture2D>("Graphics/Boss/SwampCryDying"), 0.08f, false, 15); movementSpeed = 750.0f; startingPosition = new Vector2(graphics.Viewport.Width / 2, 0.0f); position = startingPosition; dest = Vector2.Zero; direction = 1; maxHealth = 500; if (hp == 0) { health = maxHealth; } else { health = hp; } FSMWaitDelay = 3.0f; FSMWaitTime = FSMWaitDelay; int width = (int)(idleAnimation.FrameWidth * 0.4); int left = (idleAnimation.FrameWidth - width) / 2; int height = (int)(idleAnimation.FrameWidth * 0.1); int top = idleAnimation.FrameHeight - height; localBounds = new Rectangle(left, top, width, height); sprite = new Animator(OriginLocation.Center); sprite.PlayAnimation(fallAnimation); club = new SwampCryClub(); spell = new SwampCrySpell(); club.Initialise(content, position); spell.Initialise(content); currentMoveNum = 0; }