public SimpleShip(int fireCooldown, float shipRadius, double mass, double hp, double mainEnginePower, double secondaryEnginePower, float shieldRadius, int shieldActiveTime, int shieldCooldown ) : base() { radius = shipRadius; FireCooldown = fireCooldown; IsFiring = false; Mass = mass; Hp = hp; MaximumMainEnginePower = mainEnginePower; MainEnginePower = 0; MainEngineDirection = EngineDirection.up; MaximumSecondaryEnginePower = secondaryEnginePower; SecondaryEnginePower = 0; SecondaryEngineDirection = EngineDirection.left; IsSecondaryEngineOn = false; IsMainEngineOn = false; Shield = new SimpleShield(shieldRadius, shieldActiveTime, shieldCooldown); ShipHitBox = new SimpleHitBox(this, shipRadius); var shieldHitBox = Shield.MainHitBox as SimpleHitBox; shieldHitBox.GetLinkedHitBox().Add(ShipHitBox); MainHitBox = shieldHitBox; AddSlaveObject(Shield); Shield.SetMasterObject(this); }
public Engine(String name, EngineDirection direction = EngineDirection.Rear) : base(name, null) { Features = EngineFeatures.None; ThrustDirection = direction; Power = WorldConversions.BaseEnginePower; int i = (int)direction; }
private static EngineTile FindTarget(EngineParserState state, EngineDirection direction, int depth) { if (depth >= 16) { return(null); } var foundTile = StateParserUtils.Raycast(state, state.Position, direction); if (foundTile == null) { return(null); } return(foundTile.Type.IsCameleon() ? FindTarget(state, foundTile.Type.GetDirection(), depth + 1) : foundTile); }
public void StartEngine (EngineType engine, EngineDirection direction,double enginePower,DateTime now) { if (enginePower < 0) throw new Exception("Engine power is negative"); switch(engine) { case EngineType.main : { if (enginePower <= MaximumMainEnginePower) MainEnginePower = enginePower; else throw new Exception("Engine power is above maximum level"); StartMainEngineTime = now; IsMainEngineOn = true; MainEngineDirection = direction; break; } case EngineType.secondary: { if (enginePower <= MaximumSecondaryEnginePower) SecondaryEnginePower = enginePower; else throw new Exception ("Engine power is above maximum level"); StartSecondaryEngineTime = now; IsSecondaryEngineOn = true; SecondaryEngineDirection = direction; break; } default: { throw new Exception("Not implemnted engine type"); } } }
public void AddPowerToEngine(EngineType engine,EngineDirection direction, double powerPercent,DateTime now) { switch (engine) { case EngineType.main: { if(IsMainEngineOn) { var powerDirection = 1; if (direction != MainEngineDirection) powerDirection = -1; var power = MainEnginePower + powerDirection* MaximumMainEnginePower * powerPercent/100; if (power > MaximumMainEnginePower) MainEnginePower = MaximumMainEnginePower; else if (power <= 0) { StopEngine(engine); } else MainEnginePower = power; } else { StartEnginePercent(engine, direction, powerPercent/100, now); } break; } case EngineType.secondary: { if (IsSecondaryEngineOn) { var powerDirection = 1; if (direction != SecondaryEngineDirection) powerDirection = -1; var power = SecondaryEnginePower + powerDirection * MaximumSecondaryEnginePower * powerPercent / 100; if (power > MaximumSecondaryEnginePower) SecondaryEnginePower = MaximumSecondaryEnginePower; else if (power <= 0) { StopEngine(engine); } else SecondaryEnginePower = power; } else { StartEnginePercent(engine,direction ,powerPercent/100, now); } break; } default: { throw new Exception("Not implemnted engine type"); } } }
public void StartEnginePercent(EngineType engine, EngineDirection direction, double engiePowerPercent ,DateTime now) { switch (engine) { case EngineType.main: { StartEngine(engine, direction, MaximumMainEnginePower * engiePowerPercent,now); break; } case EngineType.secondary: { StartEngine(engine, direction, MaximumSecondaryEnginePower * engiePowerPercent,now); break; } default: { throw new Exception("Not implemnted engine type"); } } }
public static EngineTile Raycast(EngineParserState state, ParserPosition startPosition, EngineDirection direction) { var currentPosition = startPosition.Position; currentPosition = new Point(currentPosition.X + direction.X, currentPosition.Y + direction.Y); while (state.IsValidPosition(currentPosition)) { var tile = state[currentPosition]; if (tile.Type != EngineGlyphType.Nothing) { return(tile); } currentPosition = new Point(currentPosition.X + direction.X, currentPosition.Y + direction.Y); } return(null); }