package { public class PlayerController implements IObjectController { public static const PRODUCTIVITY_PER_TICK:Number = 1 / (60 * 30); public var player:PlayerModel; private var gameStateModel:GameStateModel; public function PlayerController(player:PlayerModel, gameStateModel:GameStateModel) { this.player = player; this.gameStateModel = gameStateModel; } public function update():void { var tileX:int, tileZ:int; player.committingMischief = false; tileX = Math.round(player.position.x); tileZ = Math.round(player.position.z); if (tileX >= 0 && tileX < gameStateModel.level.sizeX && tileZ >= 0 && tileZ < gameStateModel.level.sizeZ) { player.ownerOfOccupiedTile = gameStateModel.level.officeOwners[tileZ * gameStateModel.level.sizeX + tileX]; } if (player.interacting) { var offset:Vector2 = Direction.toVector(player.facing); var tile:TileModel, doodad:TileModel; var alreadyInteracted:Boolean = false; tileX += offset.x; tileZ += offset.z; tile = gameStateModel.tiles[tileZ * gameStateModel.level.sizeX + tileX]; if (tile != null) { switch (tile.tileType) { case TileModel.TILE_DoorFrameE: case TileModel.TILE_DoorFrameN: case TileModel.TILE_DoorFrameS: case TileModel.TILE_DoorFrameW: var wasOpen:Boolean = OfficeDoorFrameModel(tile).open; OfficeDoorFrameModel(tile).toggleOpen(); var nowOpen:Boolean = OfficeDoorFrameModel(tile).open; alreadyInteracted = true; if (wasOpen && !nowOpen) { Embeds.soundForType(SoundModel.SOUND_DoorClose).play(); } break; case TileModel.TILE_FridgeE: case TileModel.TILE_FridgeS: if (FridgeModel(tile).hasSandwich && !player.hasSandwich) { FridgeModel(tile).hasSandwich = false; player.pickUpSandwich(); alreadyInteracted = true; Embeds.soundForType(SoundModel.SOUND_FridgeDoor).play(); } break; case TileModel.TILE_TrashE: case TileModel.TILE_TrashS: if (player.hasSandwich) { player.throwAwaySandwich(); alreadyInteracted = true; Embeds.soundForType(SoundModel.SOUND_Trash).play(); } break; default: break; } } doodad = gameStateModel.doodads[tileZ * gameStateModel.level.sizeX + tileX]; if (doodad != null && !alreadyInteracted) { switch (doodad.tileType) { case TileModel.TILE_CoffeemakerE: case TileModel.TILE_CoffeemakerS: if (CoffeePotModel(doodad).fullnessLevel > 0) { CoffeePotModel(doodad).fullnessLevel--; Embeds.soundForType(SoundModel.SOUND_CoffeePour).play(); if (CoffeePotModel(doodad).fullnessLevel == 0) { player.committingMischief = true; } } break; default: break; } } player.interacting = false; } if (player.ownerOfOccupiedTile == player.workerID) { gameStateModel.productivity = Math.min(1, gameStateModel.productivity + PRODUCTIVITY_PER_TICK); } if (player.hasSandwich) { player.committingMischief = true; } } } }