public void fireItem(Entity e, DirectionalComponent dir) { TimedShooterComponent timedShooterComp = ( TimedShooterComponent )e.getComponent(GlobalVars.TIMED_SHOOTER_COMPONENT_NAME); PositionComponent posComp = (PositionComponent)e.getComponent(GlobalVars.POSITION_COMPONENT_NAME); ShooterBullet bullet = new ShooterBullet(level, level.rand.Next(Int32.MinValue, Int32.MaxValue), posComp.x, posComp.y, dir.getDir(), timedShooterComp.state); VelocityComponent bulletVel = ( VelocityComponent )bullet.getComponent(GlobalVars.VELOCITY_COMPONENT_NAME); float bulletSpeed = 160.0f; if (dir.isUp()) { bulletVel.setVelocity(0, -bulletSpeed); } else if (dir.isRight()) { bulletVel.setVelocity(bulletSpeed, 0); } else if (dir.isDown()) { bulletVel.setVelocity(0, bulletSpeed); } else if (dir.isLeft()) { bulletVel.setVelocity(-bulletSpeed, 0); } level.addEntity(bullet); }
public override void Update(float deltaTime) { foreach (Entity e in getApplicableEntities()) { TimerComponent timeComp = ( TimerComponent )e.getComponent(GlobalVars.TIMER_COMPONENT_NAME); TimedShooterComponent shooterComp = ( TimedShooterComponent )e.getComponent(GlobalVars.TIMED_SHOOTER_COMPONENT_NAME); DirectionalComponent dirComp = ( DirectionalComponent )e.getComponent(GlobalVars.DIRECTION_COMPONENT_NAME); //Make a copy so editing the component's list doesn't kill the loop List <string> completedTimers = new List <string>(timeComp.getCompletedTimers()); foreach (string name in completedTimers) { if (name == shooterComp.fireTimerString) { timeComp.removeCompletedTimer(name); beginFire(e, shooterComp, timeComp, dirComp); } else { Console.WriteLine("Unrecognized timer: " + name + " has been completed."); } } } }
//------------------------------------------------------------------------------------------------------------------ //Here's where you add all the components the entity has. //You can just uncomment the ones you want. public void addMyComponents(float x, float y, int dir, int switchId) { /*POSITION COMPONENT - Does it have a position? */ addComponent(new PositionComponent(x, y, defaultWidth, defaultHeight, this), true); /*DRAW COMPONENT - Does it get drawn to the game world? * You'll need to know the address for your image. * It'll probably be something along the lines of "RunningGame.Resources.[ ].png" ONLY png!! * First create the component * Then add the image * Then set the image to the active image */ DrawComponent drawComp = (DrawComponent)addComponent(new DrawComponent(defaultWidth, defaultHeight, level, true), true); //Add image - Use base name for first parameter (everything in file path after Resources. and before the numbers and .png) //Then second parameter is full filepath to a default image drawComp.addSprite("Artwork.Foreground.SmushBlock", "RunningGame.Resources.Artwork.Foreground.SmushBlock.png", "Main"); for (int i = 0; i < dir + 2; i++) { drawComp.rotateFlipAllSprites(System.Drawing.RotateFlipType.Rotate90FlipNone); } drawComp.setSprite("Main"); //Set image to active image /* ANIMATION COMPONENT - Does it need animating? * The float that this reads in is the amount of time (in seconds) between frames. * So, if it was 5, you would be on one frame for 5 seconds, then switch to the next, then 5 seconds later * It'd switch to the next etc, etc... */ //addComponent(new AnimationComponent(0.0005f), true); /*VELOCITY COMPONENT - Does it move? */ addComponent(new VelocityComponent(0, 0)); /*COLLIDER - Does it hit things? * The second field is the collider type. Look in GlobalVars for a string with the right name. */ addComponent(new ColliderComponent(this, GlobalVars.SMUSH_BLOCK_COLLIDER), true); /*DIRECTION - It has a direction */ DirectionalComponent dirComp = (DirectionalComponent)addComponent(new DirectionalComponent(dir)); /*OFF SIDE OF SCREEN - Stop when it hits the side of the screen. */ addComponent(new ScreenEdgeComponent(1, 1, 1, 1)); /*SMUSH - It's a smusher! */ SmushComponent smushComp = ( SmushComponent )addComponent(new SmushComponent(0.0f)); if (dirComp.isUp()) { smushComp.setToUp(); } else if (dirComp.isRight()) { smushComp.setToRight(); } else if (dirComp.isDown()) { smushComp.setToDown(); } else if (dirComp.isLeft()) { smushComp.setToLeft(); } /*TIMER - It does stuff with a timer. */ addComponent(new TimerComponent()); /* SWITCH LISTENER - Can be linked to a switch to prevent it from falling. */ addComponent(new SwitchListenerComponent(switchId, GlobalVars.SMUSH_SWITCH_EVENT)); }
//---------------------------------------------------------------------------------------------- public void beginFire(Entity e, TimedShooterComponent shooterComp, TimerComponent timeComp, DirectionalComponent dir) { fireItem(e, dir); shooterComp.currentBurstNum++; if (shooterComp.currentBurstNum < shooterComp.numShotsPerBurst) { timeComp.addTimer(shooterComp.fireTimerString, shooterComp.timeBetweenShotsInBurst); } else { shooterComp.currentBurstNum = 0; timeComp.addTimer(shooterComp.fireTimerString, shooterComp.timeBetweenBursts); DrawComponent drawComp = ( DrawComponent )e.getComponent(GlobalVars.DRAW_COMPONENT_NAME); drawComp.resetAnimation(); } }