NaxeCode

Untitled

Aug 23rd, 2017
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 5.37 KB | None | 0 0
  1. package;
  2.  
  3. import flixel.FlxCamera;
  4. import flixel.FlxG;
  5. import flixel.FlxObject;
  6. import flixel.FlxState;
  7. import flixel.FlxSprite;
  8. import flixel.group.FlxGroup;
  9. import flixel.math.FlxPoint;
  10. import flixel.text.FlxText;
  11. import flixel.util.FlxColor;
  12. import flixel.util.FlxTimer;
  13. import flixel.util.FlxSpriteUtil;
  14. import flixel.addons.effects.FlxTrail;
  15. import flixel.effects.particles.FlxEmitter;
  16. import flixel.effects.particles.FlxParticle;
  17.  
  18. class PlayState extends FlxState
  19. {
  20.     public var level:TiledLevel;
  21.     private var ground:FlxSprite;
  22.  
  23.     public var player:Player;
  24.     private var trail:FlxTrail;
  25.    
  26.     // Handles Particle Generation
  27.     public var _emitter:FlxEmitter;
  28.  
  29.     public var enemyGroup:EnemyGroup;
  30.     private var enemySpawnTimer:FlxTimer;
  31.    
  32.     private var vacume:FlxSprite;
  33.    
  34.     private var scoreTxt:FlxText;
  35.  
  36.     override public function create():Void
  37.     {
  38.         super.create();
  39.  
  40.         Reg.debug();
  41.  
  42.         setProperties();
  43.         initVacume();
  44.         initPlayer();
  45.         initEffectsEmitter();
  46.         initEnemies();
  47.         initGround();
  48.         initText();
  49.         initTiledLevel(AssetPaths.level__tmx, this);
  50.     }
  51.  
  52.     private function setProperties():Void
  53.     {
  54.         #if debug
  55.         FlxG.log.redirectTraces = true;
  56.         #end
  57.         FlxG.camera.fade(Reg.BGColor, 3.3, true);
  58.         FlxG.mouse.visible = false;
  59.         FlxG.cameras.bgColor = Reg.BGColor;
  60.         FlxG.sound.playMusic(AssetPaths.Gloomy_battle_theme__mp3, Reg.musicVolume, true);
  61.     }
  62.  
  63.     private function initPlayer():Void
  64.     {
  65.         player = new Player(this);
  66.         initPlayerTrail();
  67.         add(player);
  68.     }
  69.  
  70.     private function initPlayerTrail():Void
  71.     {
  72.         trail = new FlxTrail(player, null, 10, 0);
  73.         add(trail);
  74.     }
  75.  
  76.     private function initEffectsEmitter():Void
  77.     {
  78.         var particles:Int = 1000;
  79.         var colors:Array<Int> = [Reg.mainColor, Reg.BGColor];
  80.  
  81.         _emitter = new FlxEmitter(200, FlxG.height / 2, particles);
  82.         _emitter.speed.set(750);
  83.         _emitter.acceleration.start.min.y = -50;
  84.         _emitter.acceleration.start.max.y = -100;
  85.         _emitter.acceleration.end.min.y = -700;
  86.         _emitter.acceleration.end.max.y = -900;
  87.  
  88.         var particle:FlxParticle;
  89.         for (i in 0...particles)
  90.         {
  91.             particle = new FlxParticle();
  92.             particle.makeGraphic(3, 3, FlxG.random.getObject(colors));
  93.             particle.exists = false;
  94.             _emitter.add(particle);
  95.         }
  96.  
  97.         add(_emitter);
  98.     }
  99.  
  100.     private function initEnemies():Void
  101.     {
  102.         enemyGroup = new EnemyGroup(35);
  103.         add(enemyGroup);
  104.     }
  105.  
  106.     var ticks:Float = 0;
  107.  
  108.     private function emitEnemies(elapsed:Float):Void
  109.     {
  110.         var rand = FlxG.random.getObject([0.3, 1, 2, 3, 4], [10 + vacume.y, 20, 30, 35, 40]);
  111.         if (ticks >= rand)
  112.         {
  113.             enemyGroup.emit();
  114.             rand = FlxG.random.getObject([0.3, 1, 2, 3, 4], [10 + vacume.y, 20, 30, 35, 40]);
  115.             ticks -= ticks;
  116.         }
  117.         else
  118.         {
  119.             ticks += elapsed;
  120.         }
  121.     }
  122.  
  123.     private function initGround():Void
  124.     {
  125.         ground = new FlxSprite(-40, 416).makeGraphic(FlxG.width + 70, 40, FlxColor.TRANSPARENT);
  126.         ground.immovable = true;
  127.         add(ground);
  128.     }
  129.  
  130.     private function initVacume():Void
  131.     {
  132.         var h = Std.int(FlxG.height / 4);
  133.         vacume = new FlxSprite(0, 0);
  134.         vacume.loadGraphic(AssetPaths.vacume__png);
  135.         vacume.scale.scale(4);
  136.         vacume.offset.y += 64;
  137.         vacume.screenCenter(X);
  138.         add(vacume);
  139.         FlxG.watch.add(vacume, "y");
  140.         FlxG.watch.add(Reg, "vacumeTimer");
  141.         FlxG.watch.add(Reg, "difficulty");
  142.     }
  143.  
  144.     private function initText():Void
  145.     {
  146.         scoreTxt = new FlxText(30);
  147.         scoreTxt.text = "Bunnies Stomped: " + Reg.bunnyCounter;
  148.         scoreTxt.setFormat(Reg.universalFont, 40, FlxColor.WHITE, CENTER, OUTLINE_FAST, FlxColor.BLACK);
  149.         scoreTxt.y += (scoreTxt.height + (scoreTxt.height / 4));
  150.         add(scoreTxt);
  151.     }
  152.  
  153.     private function initTiledLevel(levelPath:String, state:PlayState):Void
  154.     {
  155.         level = new TiledLevel(levelPath, state);
  156.  
  157.         // Add backgrounds
  158.         add(level.backgroundLayer);
  159.        
  160.         // Add static images
  161.         add(level.imagesLayer);
  162.        
  163.         // Load player objects
  164.         add(level.objectsLayer);
  165.        
  166.         // Add foreground tiles after adding level objects, so these tiles render on top of player
  167.         add(level.foregroundTiles);
  168.     }
  169.  
  170.     override public function update(elapsed:Float):Void
  171.     {
  172.         super.update(elapsed);
  173.  
  174.         updatePolish();
  175.         updateVars(elapsed);
  176.         updateTxt();
  177.         updateCollisions();
  178.         emitEnemies(elapsed);
  179.         handleInput();
  180.        
  181.     }
  182.  
  183.     private function updatePolish():Void
  184.     {
  185.         FlxSpriteUtil.screenWrap(player, true, true);
  186.     }
  187.  
  188.     private function updateVars(elapsed:Float):Void
  189.     {
  190.         Reg.difficulty += (elapsed / 4);
  191.         Reg.vacumeTimer += (elapsed * Reg.difficulty);
  192.         vacume.y = Reg.vacumeTimer;
  193.  
  194.         if (vacume.y >= (416 - 32))
  195.             FlxG.switchState(new GameOver());
  196.     }
  197.  
  198.     private function updateTxt():Void
  199.     {
  200.         scoreTxt.text = "Bunnies Stomped: " + Reg.bunnyCounter;
  201.     }
  202.  
  203.     private function updateCollisions():Void
  204.     {
  205.         // Collide with foreground tile layer
  206.         level.collideWithLevel(player);
  207.  
  208.         FlxG.collide(player, ground);
  209.         FlxG.overlap(player, enemyGroup, checkCollision);
  210.     }
  211.  
  212.     private function checkCollision(obj1:Player, obj2:Enemy):Void
  213.     {
  214.         if (obj1.fsm.stateClass == Player.DropKick)
  215.         {
  216.             Reg.vacumeTimer -= 5;
  217.             Reg.bunnyCounter++;
  218.             FlxG.sound.play(AssetPaths.hit__mp3, Reg.sfxVolume);
  219.             FlxG.camera.shake(0.005, 0.10);
  220.             _emitter.setPosition(obj2.x + (obj2.width / 2), obj2.y + obj2.height);
  221.             _emitter.start(true, 0, 150);
  222.             obj2.kill();
  223.         }
  224.     }
  225.  
  226.     private function handleInput():Void
  227.     {
  228.         if (FlxG.keys.justReleased.R)
  229.         {
  230.             FlxG.camera.flash(FlxColor.BLACK, 1, FlxG.resetState);
  231.         }
  232.     }
  233. }
Add Comment
Please, Sign In to add comment