コード例 #1
0
ファイル: SimplePlayer.cs プロジェクト: smldev/smlimitless
        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; };
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
ファイル: QuestionBlock.cs プロジェクト: smldev/smlimitless
        public override void Initialize(Section owner)
        {
            questionGraphics = (AnimatedGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBQuestionBlock");
            emptyGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBEmptyBlock");

            SetGraphicsObjects(questionGraphics, emptyGraphics);
            base.Initialize(owner);
        }
コード例 #4
0
ファイル: BrickBlock.cs プロジェクト: smldev/smlimitless
        public override void Initialize(Section owner)
        {
            brickGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBBrickBlock");
            emptyGraphics = (StaticGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBEmptyBlock");

            SetGraphicsObjects(brickGraphics, emptyGraphics);
            base.Initialize(owner);
        }
コード例 #5
0
ファイル: Coin.cs プロジェクト: smldev/smlimitless
        public override void Initialize(Section owner)
        {
            graphics = (AnimatedGraphicsObject)ContentPackageManager.GetGraphicsResource("SMBCoin");
            IsMoving = false;
            collectSound = new CachedSound(ContentPackageManager.GetAbsoluteFilePath("nsmbwiiCoin"));

            base.Initialize(owner);
        }
コード例 #6
0
ファイル: PainterSprite.cs プロジェクト: smldev/smlimitless
        public override void Initialize(Section owner)
        {
            for (int i = 0; i < 3; i++)
            {
                tileGraphics.Add((StaticGraphicsObject)ContentPackageManager.GetGraphicsResource(this.graphicsObjectNames[i]));
            }

            base.Initialize(owner);
        }
コード例 #7
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #8
0
ファイル: Particle.cs プロジェクト: smldev/smlimitless
        /// <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;
        }
コード例 #9
0
        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;
        }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: Tile.cs プロジェクト: smldev/smlimitless
 /// <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 = "";
 }
コード例 #12
0
ファイル: Spiny.cs プロジェクト: smldev/smlimitless
        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());
        }
コード例 #13
0
ファイル: SectionExit.cs プロジェクト: smldev/smlimitless
        /// <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"));
        }
コード例 #14
0
ファイル: KoopaTroopa.cs プロジェクト: smldev/smlimitless
        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();
        }
コード例 #15
0
ファイル: Level.cs プロジェクト: smldev/smlimitless
        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;
            });
        }
コード例 #16
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #17
0
ファイル: Background.cs プロジェクト: smldev/smlimitless
 /// <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;
 }
コード例 #18
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #19
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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 : ""
			};
		}
コード例 #20
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #21
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		internal object GetBackgroundObject(Section section)
		{
			return new
			{
				topColor = section.Background.TopColor.Serialize(),
				bottomColor = section.Background.BottomColor.Serialize(),
				layers = GetBackgroundLayerObjects(section.Background)
			};
		}
コード例 #22
0
ファイル: ItemBlock.cs プロジェクト: smldev/smlimitless
 public override void Initialize(Section owner)
 {
     base.Initialize(owner);
 }
コード例 #23
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #24
0
 public override void Initialize(Section owner)
 {
     ActiveState = SpriteActiveState.AlwaysActive;
     base.Initialize(owner);
 }
コード例 #25
0
ファイル: Level.cs プロジェクト: smldev/smlimitless
        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;
        }
コード例 #26
0
ファイル: Lakitu.cs プロジェクト: smldev/smlimitless
        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);
        }
コード例 #27
0
ファイル: Serializer003.cs プロジェクト: smldev/smlimitless
		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;
		}
コード例 #28
0
ファイル: BuzzyBeetle.cs プロジェクト: smldev/smlimitless
        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);
        }
コード例 #29
0
ファイル: Goomba.cs プロジェクト: smldev/smlimitless
        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());
        }