/// <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); } } }