public override void Initialize(Section owner) { base.Initialize(owner); Components.Add(new HealthComponent(1, 1, new string[] { })); ((HealthComponent)Components[0]).SpriteKilled += (sender, e) => { RemoveOnNextFrame = true; }; }
/// <summary> /// Creates a test section. /// </summary> /// <param name="owner">The level that will own this section.</param> /// <returns> /// A section consisting of randomly placed and sized rows of concrete /// blocks with a TestPlayer. /// </returns> public static Section GenerateSection(Level owner) { // Create a section of randomly placed stretches of stone tiles. Section result = new Section(owner); result.Bounds = new Physics.BoundingRectangle(0, 0, 3200, 1920); result.AutoscrollSettings = new Physics.SectionAutoscrollSettings(CameraScrollType.FreelyMoving, Vector2.Zero, null); result.Background = GenerateBackground(result); Layer mainLayer = new Layer(result, false); result.Layers.Add(mainLayer); mainLayer.SetMainLayer(); Random random = new Random(); float tilePlacerX = 0f; float tilePlacerY = 200f; // really temporary // AssemblyManager.LoadAssembly(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), // "TestPackage", "SmlSample.dll")); hey it actually was temporary // TODO: have ContentPackageManager ignore multiple attempts to add // the same package Tile testTile3 = AssemblyManager.GetTileByFullName("SmlSample.TestTile3"); testTile3.GraphicsResourceName = "smw_concrete_block"; while (tilePlacerX < 1008f) { int runDistance = random.Next(3, 8); tilePlacerY += (random.Next(1, 3) * 16f) * ((random.Next(0, 2) != 0) ? 1 : -1); tilePlacerY -= (tilePlacerY % 16); tilePlacerY = MathHelper.Clamp(tilePlacerY, 0, 1920); for (int i = 0; i < runDistance; i++) { Tile newTile = testTile3.Clone(); newTile.Position = new Vector2(tilePlacerX, tilePlacerY); result.AddTile(newTile); tilePlacerX += 16f; } } Sprite player = AssemblyManager.GetSpriteByFullName("SmlSample.SimplePlayer"); player.Position = Vector2.Zero; player.IsActive = true; player.State = (SpriteState)0; player.TileCollisionMode = SpriteCollisionMode.OffsetNotify; result.AddSprite(player); Sprite painter = AssemblyManager.GetSpriteByFullName("SmlSample.PainterSprite"); painter.Position = new Vector2(16f, 0f); painter.IsActive = true; painter.State = (SpriteState)0; painter.TileCollisionMode = SpriteCollisionMode.NoCollision; result.AddSprite(painter); return result; }
public override void Initialize(Section owner) { questionGraphics = (AnimatedGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBQuestionBlock"); emptyGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBEmptyBlock"); SetGraphicsObjects(questionGraphics, emptyGraphics); base.Initialize(owner); }
public override void Initialize(Section owner) { brickGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBBrickBlock"); emptyGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBEmptyBlock"); SetGraphicsObjects(brickGraphics, emptyGraphics); base.Initialize(owner); }
public override void Initialize(Section owner) { graphics = (AnimatedGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBCoin"); IsMoving = false; collectSound = new CachedSound(ContentPackageManager.GetAbsoluteFilePath("nsmbwiiCoin")); base.Initialize(owner); }
public override void Initialize(Section owner) { for (int i = 0; i < 3; i++) { tileGraphics.Add((StaticGraphicsObject)ContentPackageManager.GetGraphicsResource(this.graphicsObjectNames[i])); } base.Initialize(owner); }
internal Background DeserializeBackground(JObject obj, Section ownerSection) { Background result = new Background(ownerSection); result.TopColor = obj["topColor"].ToColor(); result.BottomColor = obj["bottomColor"].ToColor(); JArray layersData = (JArray)obj["layers"]; result.Layers = DeserializeBackgroundLayers(layersData, ownerSection.Camera, ownerSection.Bounds); return result; }
/// <summary> /// Initializes a new instance of the <see cref="Particle" /> class. /// </summary> /// <param name="owner">The section this particle appears in.</param> /// <param name="graphicsResourceName"> /// The name of the graphics resource to use for this particle. /// </param> /// <param name="position">The position of this particle onscreen.</param> /// <param name="velocity">The velocity of this particle.</param> /// <param name="affectedByGravity"> /// A value indicating whether this particle will fall. /// </param> /// <param name="lifespan">The lifespan of this particle.</param> public Particle(Section owner, string graphicsResourceName, Vector2 position, Vector2 velocity, bool affectedByGravity = false, float lifespan = -1f) { // TODO: particles should be able to be used in more than just sections if (string.IsNullOrEmpty(graphicsResourceName)) { throw new ArgumentException("The graphics resource name for this particle was invalid."); } this.owner = owner; Graphics = ContentPackageManager.GetGraphicsResource(graphicsResourceName); Position = position; Velocity = velocity; AffectedByGravity = affectedByGravity; Life = lifespan; }
private static Background GenerateBackground(Section owner) { Background result = new Background(owner); result.TopColor = result.BottomColor = new Color(0, 0, 0, 0); BackgroundLayer layer = new BackgroundLayer(GameServices.Camera, owner.Bounds); layer.BackgroundTextureResourceName = "Background"; layer.ScrollDirection = (BackgroundScrollDirection)1; layer.ScrollRate = 0.5f; result.AddLayerToFront(layer); return result; }
public PlayerSensingColumn(Section section, float columnLeftX, float columnRightX) { owner = section; columnLeft = new VerticalLinePlayerListener(); columnRight = new VerticalLinePlayerListener(); columnLeft.Position = new Vector2(columnLeftX, 0f); columnRight.Position = new Vector2(columnRightX, 0f); columnLeft.Initialize(section); columnRight.Initialize(section); columnLeft.ListenerTriggeredEvent += Column_ListenerTriggeredEvent; columnRight.ListenerTriggeredEvent += Column_ListenerTriggeredEvent; section.AddSprite(columnLeft); section.AddSprite(columnRight); }
/// <summary> /// Initializes this tile. /// </summary> /// <param name="owner">The Section that owns this tile.</param> public virtual void Initialize(Section owner) { Owner = owner; IsActive = true; Name = ""; }
public override void Initialize(Section owner) { base.Initialize(owner); graphics = (ComplexGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBSpiny"); graphics.CurrentObjectName = (SpinyState == SpinyState.Spiny) ? "walking" : "egg"; HealthComponent health = new HealthComponent(1, 1, new string[] { SpriteDamageTypes.PlayerStomp }); health.SpriteKilled += Health_SpriteKilled; Components.Add(new WalkerComponent(this, ResolveDirection(this, Direction, Owner), WalkingSpeed.Value)); Components.Add(health); Components.Add(new DamageComponent()); }
/// <summary> /// Initializes a new instance of the <see cref="SectionExit" /> class. /// </summary> /// <param name="owner">The section this exit is in.</param> public SectionExit(Section owner) { Owner = owner; warpSound = new CachedSound(ContentPackageManager.GetAbsoluteFilePath("nsmbwiiWarpPipe")); }
public override void Initialize(Section owner) { base.Initialize(owner); graphics = (ComplexGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBKoopaTroopa"); graphics.CurrentObjectName = AppendTypeSuffix("walking"); HealthComponent healthComponent = new HealthComponent(1, 1, new string[] { SpriteDamageTypes.PlayerStomp }); healthComponent.SpriteKilled += HealthComponent_SpriteKilled; SpriteDirection initialDirection = ResolveDirection(this, Direction, Owner); facingDirection = (initialDirection == SpriteDirection.Left) ? SMLimitless.Direction.Left : SMLimitless.Direction.Right; Components.Add(healthComponent); Components.Add(new WalkerComponent(this, initialDirection, WalkingSpeed.Value)); Components.Add(new DamageComponent()); ChasePlayerComponent chasePlayer = new ChasePlayerComponent(this, 60); chasePlayer.NearestPlayerDirectionUpdated += ChasePlayer_NearestPlayerDirectionUpdated; Components.Add(chasePlayer); ShelledEnemyComponent shelledEnemy = new ShelledEnemyComponent(this, WalkingSpeed.Value, ShellSpinningSpeed.Value, FramesUntilBeginEmerge.Value, FramesUntilEmerge.Value); shelledEnemy.StateChanged += ShelledEnemy_StateChanged; Components.Add(shelledEnemy); SetBehavior(); }
private void ChangeActiveSectionForExit(Section section, Vector2 irisOutPosition, SectionExit source, SectionExit destination) { float halfScreenWidth = GameServices.ScreenSize.X / 2f; float halfScreenHeight = GameServices.ScreenSize.Y / 2f; Vector2 newCameraPosition = new Vector2(destination.Hitbox.Center.X - halfScreenWidth, destination.Hitbox.Center.Y - halfScreenHeight); ActiveSection = section; ActiveSection.SetIrisState(closed: true); ActiveSection.CameraSystem.IsFrozen = true; ActiveSection.CameraSystem.MoveIfFrozen(newCameraPosition); ActiveSection.IrisOut(90, irisOutPosition, (sender, e) => { ActiveSection.IsActive = true; destination.Emerge(source.PlayersInExit); source.PlayersInExit.Clear(); ActiveSection.CameraSystem.IsFrozen = false; }); }
internal List<Layer> DeserializeLayers(JArray layerObjects, Section ownerSection) { List<Layer> result = new List<Layer>(); foreach (var entry in layerObjects) { Layer layer = new Layer(ownerSection, (bool)entry["isMainLayer"]); layer.Index = (int)entry["index"]; layer.Name = (string)entry["name"]; layer.IsMainLayer = (bool)entry["isMainLayer"]; JArray tileDataArray = (JArray)entry["uniqueTiles"]; JArray positionsArray = (JArray)entry["tilePositions"]; Vector2 gridSize = new Vector2((int)entry["gridWidth"], (int)entry["gridHeight"]); Vector2 position = entry["position"].ToVector2(); layer.Tiles = new SizedGrid<Tile>(position, (int)GameServices.GameObjectSize.X, (int)GameServices.GameObjectSize.Y, (int)gridSize.X, (int)gridSize.Y); layer.Position = position; var uniqueTiles = DeserializeTileSaveData(tileDataArray); var tilePositions = DeserializeTilePositionClouds(positionsArray); LayerTileSaveData layerTileData = LayerTileSaveData.Merge(uniqueTiles, tilePositions); layerTileData.LoadIntoLayer(layer); result.Add(layer); } return result; }
/// <summary> /// Initializes a new instance of the <see cref="Background" /> class. /// </summary> /// <param name="owner"> /// A reference to the section that owns this background. /// </param> public Background(Section owner) { Layers = new List<BackgroundLayer>(); this.owner = owner; }
internal object GetPathObjects(Section section) { var result = new List<object>(section.Paths.Count); foreach (var path in section.Paths) { result.Add(new { points = path.Points.SerializeCompact() }); } return result; }
internal object GetAutoscrollSettingsObject(Section section) { return new { scrollType = (int)section.AutoscrollSettings.ScrollType, speed = (section.AutoscrollSettings.ScrollType == CameraScrollType.AutoScroll) ? section.AutoscrollSettings.Speed.Serialize() : new Vector2(float.NaN).Serialize(), pathName = (section.AutoscrollSettings.ScrollType == CameraScrollType.AutoScrollAlongPath) ? section.AutoscrollSettings.PathName : "" }; }
internal List<Section> DeserializeSections(JArray sectionObjects, Level ownerLevel) { List<Section> result = new List<Section>(); foreach (var entry in sectionObjects) { Section section = new Section(ownerLevel); section.Index = (int)entry["index"]; section.Name = (string)entry["name"]; section.Bounds = BoundingRectangle.FromSimpleString((string)entry["bounds"]); section.AutoscrollSettings = DeserializeAutoscrollSettings((JObject)entry["scrollSettings"]); section.Background = DeserializeBackground((JObject)entry["background"], section); JArray layersData = (JArray)entry["layers"]; JArray spritesData = (JArray)entry["sprites"]; JArray pathsData = (JArray)entry["paths"]; List<Sprite> sectionSprites; SparseCellGrid<Sprite> sectionSpriteGrid = DeserializeSprites(spritesData, out sectionSprites); section.Layers = DeserializeLayers(layersData, section); section.SpritesGrid = sectionSpriteGrid; section.Sprites = sectionSprites; section.Players.AddRange(section.Sprites.Where(s => s.IsPlayer)); section.Paths = DeserializePaths(pathsData); section.IsLoaded = true; result.Add(section); } return result; }
internal object GetBackgroundObject(Section section) { return new { topColor = section.Background.TopColor.Serialize(), bottomColor = section.Background.BottomColor.Serialize(), layers = GetBackgroundLayerObjects(section.Background) }; }
public override void Initialize(Section owner) { base.Initialize(owner); }
internal object GetLayerObjects(Section section) { var result = new List<object>(section.Layers.Count); foreach (var layer in section.Layers) { LayerTileSaveData layerData = new LayerTileSaveData(layer); result.Add(new { index = layer.Index, name = layer.Name, isMainLayer = layer.IsMainLayer, position = layer.Tiles.Position.Serialize(), gridWidth = layer.Tiles.Width, gridHeight = layer.Tiles.Height, uniqueTiles = GetUniqueTileObjects(layerData), tilePositions = GetTilePositionCloudObjects(layerData) }); } return result; }
public override void Initialize(Section owner) { ActiveState = SpriteActiveState.AlwaysActive; base.Initialize(owner); }
internal void TransferEditorControlToSection(Section oldSection, Section newSection) { if (!EditorActive) { return; } oldSection.RemoveSpriteOnNextFrame(trackingObject); oldSection.RemoveSpriteOnNextFrame(selectedObject); trackingObject.Owner = newSection; selectedObject.Owner = newSection; oldSection.DeactivateEditor(); newSection.ActivateEditor(trackingObject, selectedObject); EditorForm.SwitchToSection(newSection); ActiveSection = newSection; }
public override void Initialize(Section owner) { column = new PlayerSensingColumn(owner, SpawnBandStart, SpawnBandEnd); graphics = (ComplexGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBLakitu"); ActiveState = SpriteActiveState.AlwaysActive; TileCollisionMode = SpriteCollisionMode.NoCollision; var health = new HealthComponent(1, 1, new string[] { }); health.SpriteKilled += Health_SpriteKilled; Components.Add(health); Components.Add(new DamageComponent()); base.Initialize(owner); }
internal object GetSpriteObjects(Section section) { var result = new List<object>(); foreach (var sprite in section.SpritesGrid) { result.Add(new { typeName = sprite.GetType().FullName, position = sprite.InitialPosition.Serialize(), isActive = sprite.IsActive, state = (int)sprite.InitialState, collision = (int)sprite.TileCollisionMode, name = sprite.Name, message = sprite.Message, isHostile = sprite.IsHostile, isMoving = sprite.IsMoving, direction = (int)sprite.Direction, customObjects = sprite.GetCustomSerializableObjects() }); } return result; }
public override void Initialize(Section owner) { base.Initialize(owner); graphics = (ComplexGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBBuzzyBeetle"); HealthComponent health = new HealthComponent(1, 1, new string[] { SpriteDamageTypes.PlayerFireball, SpriteDamageTypes.PlayerStomp }); health.SpriteKilled += Health_SpriteKilled; SpriteDirection initialDirection = ResolveDirection(this, Direction, Owner); facingDirection = (initialDirection == SpriteDirection.Left) ? SMLimitless.Direction.Left : SMLimitless.Direction.Right; Components.Add(health); Components.Add(new WalkerComponent(this, initialDirection, WalkingSpeed.Value)); Components.Add(new DamageComponent()); Components.Add(new ChasePlayerComponent(this, 60)); ShelledEnemyComponent shelledEnemy = new ShelledEnemyComponent(this, WalkingSpeed.Value, ShellSpinningSpeed.Value, FramesUntilBeginEmerge.Value, FramesUntilEmerge.Value); shelledEnemy.StateChanged += ShelledEnemy_StateChanged; Components.Add(shelledEnemy); }
public override void Initialize(Section owner) { base.Initialize(owner); graphics = (ComplexGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBGoomba"); graphics.CurrentObjectName = AppendPaletteNameSuffix("walking"); HealthComponent healthComponent = new HealthComponent(1, 1, new string[] { }); healthComponent.SpriteKilled += HealthComponent_SpriteKilled; Components.Add(new WalkerComponent(this, ResolveDirection(this, Direction, owner), 32f)); Components.Add(healthComponent); Components.Add(new DamageComponent()); }