/// <summary> /// Click handler for all the panel actions /// </summary> /// <param name="actionOnPanel"></param> private void OnActionClick(ActionOnPanel actionOnPanel) { if (Engine.SelectedMapObject != null) { switch (actionOnPanel.Type) { case Actions.TrainWorker: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.StartMakingUnit(new Worker(mh.PlayerId)); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.TrainSoldier: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.StartMakingUnit(new Soldier(mh.PlayerId)); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.TrainHero: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.StartMakingUnit(new Hero(mh.PlayerId)); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.TrainDoctor: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.StartMakingUnit(new Doctor(mh.PlayerId)); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.TrainGunMan: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.StartMakingUnit(new GunMan(mh.PlayerId)); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.Cancel: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(TrainerBuilding))) { TrainerBuilding mh = (TrainerBuilding)Engine.SelectedMapObject; mh.CancelTraining(); BuildMode = false; SelectedAction = Actions.None; } break; case Actions.BuildWall: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new Wall(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildWall; } break; case Actions.BuildBarracs: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new Barracks(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildBarracs; } break; case Actions.BuildMainHall: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new MainHall(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildMainHall; } break; case Actions.BuildMedicalTent: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new MedicalTent(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildMedicalTent; } break; case Actions.BuildTower: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new Tower(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildTower; } break; case Actions.BuildFarm: if (Engine.SelectedMapObject.GetType() == typeof(Worker) && Engine.ThePlayer.Resources.HasEnoughToReduceBy(new FarmBuilding(0).Costs)) { BuildMode = true; SelectedAction = Actions.BuildFarm; } break; case Actions.Stop: if (Engine.SelectedMapObject.GetType() == typeof(Worker)) { Worker worker = (Worker)Engine.SelectedMapObject; worker.NextOrder = Order.None; worker.MoveTarget = null; BuildMode = false; } break; case Actions.AutoAttack: case Actions.AutoHeal: if (Engine.SelectedMapObject.GetType().IsSubclassOf(typeof(Unit))) { Unit unit = (Unit)Engine.SelectedMapObject; if (unit.AlertMode) { unit.AlertMode = false; } else { unit.AlertMode = true; } BuildMode = false; } break; } } }