![JAR search and dependency download from the Maven repository](/logo.png)
com.github.ocraft.s2client.bot.gateway.impl.ActionInterfaceImpl Maven / Gradle / Ivy
The newest version!
package com.github.ocraft.s2client.bot.gateway.impl;
/*-
* #%L
* ocraft-s2client-bot
* %%
* Copyright (C) 2017 - 2018 Ocraft Project
* %%
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
* #L%
*/
import SC2APIProtocol.Data;
import com.github.ocraft.s2client.bot.gateway.ActionInterface;
import com.github.ocraft.s2client.protocol.action.Action;
import com.github.ocraft.s2client.protocol.action.ActionChat;
import com.github.ocraft.s2client.protocol.action.raw.ActionRaw;
import com.github.ocraft.s2client.protocol.action.raw.ActionRawToggleAutocast;
import com.github.ocraft.s2client.protocol.action.raw.ActionRawUnitCommand;
import com.github.ocraft.s2client.protocol.data.Abilities;
import com.github.ocraft.s2client.protocol.data.Ability;
import com.github.ocraft.s2client.protocol.request.RequestAction;
import com.github.ocraft.s2client.protocol.request.Requests;
import com.github.ocraft.s2client.protocol.response.ResponseAction;
import com.github.ocraft.s2client.protocol.spatial.Point2d;
import com.github.ocraft.s2client.protocol.unit.Tag;
import com.github.ocraft.s2client.protocol.unit.Unit;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import static com.github.ocraft.s2client.protocol.action.Action.action;
class ActionInterfaceImpl implements ActionInterface {
private final ControlInterfaceImpl controlInterface;
private final List actions = new ArrayList<>();
private final List commands = new ArrayList<>();
ActionInterfaceImpl(ControlInterfaceImpl controlInterface) {
this.controlInterface = controlInterface;
}
private ControlInterfaceImpl control() {
return controlInterface;
}
@Override
public ActionInterface unitCommand(Unit unit, Ability ability, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Unit unit, Ability ability, Point2d point, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.target(point)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Unit unit, Ability ability, Unit target, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.target(target.getTag())
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(List units, Ability ability, boolean queuedMove) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Unit[0]))
.useAbility(ability)
.queued(queuedMove)).build());
return this;
}
@Override
public ActionInterface unitCommand(List units, Ability ability, Point2d point, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Unit[0]))
.useAbility(ability)
.target(point)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(List units, Ability ability, Unit target, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Unit[0]))
.useAbility(ability)
.target(target.getTag())
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Tag unit, Ability ability, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Tag unit, Ability ability, Point2d point, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.target(point)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Tag unit, Ability ability, Unit target, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(ability)
.target(target.getTag())
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Set units, Ability ability, boolean queuedMove) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Tag[0]))
.useAbility(ability)
.queued(queuedMove)).build());
return this;
}
@Override
public ActionInterface unitCommand(Set units, Ability ability, Point2d point, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Tag[0]))
.useAbility(ability)
.target(point)
.queued(queuedCommand)).build());
return this;
}
@Override
public ActionInterface unitCommand(Set units, Ability ability, Unit target, boolean queuedCommand) {
actions.add(action().raw(ActionRawUnitCommand.unitCommand()
.forUnits(units.toArray(new Tag[0]))
.useAbility(ability)
.target(target.getTag())
.queued(queuedCommand)).build());
return this;
}
@Override
public List commands() {
return new ArrayList<>(commands);
}
@Override
public ActionInterface toggleAutocast(Tag unitTag, Ability ability) {
actions.add(action().raw(ActionRawToggleAutocast.toggleAutocast()
.ofAbility(ability).forUnits(unitTag)).build());
return this;
}
@Override
public ActionInterface toggleAutocast(List unitTags, Ability ability) {
actions.add(action().raw(ActionRawToggleAutocast.toggleAutocast()
.ofAbility(ability).forUnits(unitTags.toArray(new Tag[0]))).build());
return this;
}
@Override
public ActionInterface sendChat(String message, ActionChat.Channel channel) {
actions.add(action().chat(ActionChat.message().of(message).to(channel)).build());
return this;
}
@Override
public ActionInterface select(Tag... unitTag) {
actions.add(action()
.raw(ActionRawUnitCommand.unitCommand()
.forUnits(unitTag)
.useAbility(Abilities.from(0))
.build())
.build());
return this;
}
@Override
public ActionInterface select(Unit... unit) {
actions.add(action()
.raw(ActionRawUnitCommand.unitCommand()
.forUnits(unit)
.useAbility(Abilities.from(0))
.build())
.build());
return this;
}
@Override
public boolean sendActions() {
commands.clear();
if (actions.isEmpty()) return false;
RequestAction.Builder request = Requests.actions().of(actions.toArray(new Action[0]));
actions.forEach(action -> action.getRaw()
.flatMap(ActionRaw::getUnitCommand)
.map(ActionRawUnitCommand::getUnitTags)
.ifPresent(commands::addAll));
actions.clear();
return control()
.waitForResponse(control().proto().sendRequest(request))
.flatMap(response -> response.as(ResponseAction.class))
.isPresent();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy