示例#1
0
        /// <summary>
        /// Performs the execution of the <see cref="BuyTrapCommand"/> on the specified <see cref="Avatar"/>.
        /// </summary>
        /// <param name="level"><see cref="Level"/> on which to perform the <see cref="BuyTrapCommand"/>.</param>
        /// <exception cref="ArgumentNullException"><paramref name="level"/> is null.</exception>
        /// <exception cref="ArgumentNullException"><paramref name="level.Village"/> is null.</exception>
        public override void Execute(Level level)
        {
            ThrowIfLevelNull(level);
            ThrowIfLevelVillageNull(level);

            var dataRef         = new CsvDataRowRef <TrapData>(TrapDataID);
            var assets          = level.Assets;
            var tableCollection = assets.DataTables;
            var row             = dataRef.Get(tableCollection);

            if (row == null)
            {
                level.Logs.Log($"Unable to find CsvDataRow<TrapData> for data ID {TrapDataID}.");
            }
            else
            {
                // Use the first level.
                var data = row[0];
                if (data == null)
                {
                    level.Logs.Log($"Unable to find TrapData of level 0 for data ID {TrapDataID}.");
                }
                else
                {
                    level.Avatar.UseResource(data.BuildResource, data.BuildCost);

                    var trap = new Trap(level.Village, data);
                    trap.X = X;
                    trap.Y = Y;
                    trap.BeginConstruction(Tick);
                }
            }
        }