コード例 #1
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);
        }
コード例 #2
0
        /// <summary>
        ///   Returns a deep copy of this ComplexGraphicsObject. With the
        ///   texture, only its reference is copied.
        /// </summary>
        /// <returns>A deep copy of this object.</returns>
        public IGraphicsObject Clone()
        {
            ComplexGraphicsObject result = new ComplexGraphicsObject();
            Dictionary<string, IGraphicsObject> cloneObjects = new Dictionary<string, IGraphicsObject>();
            foreach (var graphicsObjectPair in graphicsObjects)
            {
                result.graphicsObjects.Add(graphicsObjectPair.Key, graphicsObjectPair.Value.Clone());
            }

            result.CurrentObjectName = CurrentObjectName;
            result.configFilePath = configFilePath;
            result.FilePath = FilePath;
            result.FrameSize = FrameSize;
            result.isContentLoaded = true;
            result.isLoaded = true;
            result.texture = texture;

            return result;
        }
コード例 #3
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());
        }
コード例 #4
0
ファイル: GraphicsManager.cs プロジェクト: smldev/smlimitless
        /// <summary>
        ///   Loads an instance of IGraphicsObject from a given file path. If a
        ///   text file with the same name is in the same folder, that will be
        ///   used to determine what kind of graphics object it is. If no text
        ///   file is present, the object is assumed to be static. Otherwise, the
        ///   type (animated, complex) depends on what the first line of the file is.
        /// </summary>
        /// <param name="filePath">
        ///   The path to the image of the graphics object.
        /// </param>
        /// <returns>A loaded IGraphicsObject instance.</returns>
        public static IGraphicsObject LoadGraphicsObject(string filePath)
        {
            if (!loadedObjects.ContainsKey(filePath))
            {
                // We'll assume we have the right path (considering graphics overrides).
                string fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath);
                string directoryName = new FileInfo(filePath).DirectoryName;
                string configPath = Path.Combine(directoryName, string.Concat(fileNameWithoutExt, ".txt"));

                if (!File.Exists(configPath))
                {
                    // No configuration, so the object is probably static
                    var result = new StaticGraphicsObject();
                    result.Load(filePath);
                    loadedObjects.Add(filePath, result);
                    return result;
                }
                else
                {
                    // A configuration! Let's read it to find out what it is.
                    DataReader config = new DataReader(configPath);
                    if (config[0] == "[Animated]" || config[0] == "[Animated_RunOnce]")
                    {
                        var result = new AnimatedGraphicsObject();
                        result.Load(filePath, config);
                        loadedObjects.Add(filePath, result);
                        return result;
                    }
                    else if (config[0] == "[Complex]")
                    {
                        var result = new ComplexGraphicsObject();
                        result.Load(filePath, config);
                        loadedObjects.Add(filePath, result);
                        return result;
                    }
                }
            }
            else
            {
                return loadedObjects[filePath].Clone();
            }

            return null;
        }
コード例 #5
0
        /// <summary>
        ///   Loads an AnimatedGraphicsObjects from a configuration section in a ComplexGraphicsObject.
        /// </summary>
        /// <param name="section">
        ///   The section from the CGO configuration that specifies this object.
        /// </param>
        /// <param name="owner">The CGO that owns this object.</param>
        internal void Load(Dictionary<string, string> section, ComplexGraphicsObject owner)
        {
            if (!isLoaded)
            {
                int frames = int.Parse(section["Frames"]);
                Vector2 frameSize = owner.FrameSize;
                filePath = owner.FilePath;
                for (int i = 0; i < frames; i++)
                {
                    CgoSourceRects.Add(Vector2Extensions.Parse(section[string.Concat("Frame", i)]).ToRectangle(frameSize));
                }

                if (section["Type"] == "animated_runonce")
                {
                    IsRunOnce = true;
                }

                AnimationCycleLength = decimal.Parse(section["CycleLength"]);
                cgoOwner = owner;
                frameCount = frames - 1;
                isLoaded = true;
            }
        }
コード例 #6
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);
        }
コード例 #7
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();
        }
コード例 #8
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());
        }