Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/main/java/tanks/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import tanks.item.ItemShield;
import tanks.minigames.ArcadeBeatBlocks;
import tanks.minigames.ArcadeClassic;
import tanks.minigames.controlpoint.ControlPoint;
import tanks.minigames.Minigame;
import tanks.network.Client;
import tanks.network.NetworkEventMap;
Expand Down Expand Up @@ -426,6 +427,7 @@ public static void registerEvents()
NetworkEventMap.register(EventArcadeFrenzy.class);
NetworkEventMap.register(EventArcadeEnd.class);
NetworkEventMap.register(EventArcadeBonuses.class);
NetworkEventMap.register(EventControlPointCaptureProgressUpdate.class);

NetworkEventMap.register(EventSendOnlineClientDetails.class);
NetworkEventMap.register(EventSilentDisconnect.class);
Expand Down Expand Up @@ -593,6 +595,7 @@ public static void initScript()
registerMinigame(ArcadeBeatBlocks.class, "Beat arcade mode", "Arcade mode but with beat blocks!");
// registerMinigame(CastleRampage.class, "Rampage trial", "Beat the level as fast as you can---with unlimited lives and rampages!");
// registerMinigame(TeamDeathmatch.class, "Team deathmatch", "something");
registerMinigame(ControlPoint.class, "Control point", "Fight for control points with your teammates!------Only support multiplayer");

registerMetadataSelector(SelectorStackHeight.selector_name, SelectorStackHeight.class);
registerMetadataSelector(SelectorGroupID.selector_name, SelectorGroupID.class);
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/tanks/Level.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import tanks.gui.screen.leveleditor.ScreenLevelEditorOverlay;
import tanks.gui.screen.leveleditor.selector.SelectorTeam;
import tanks.item.Item;
import tanks.minigames.Minigame;
import tanks.network.event.EventEnterLevel;
import tanks.network.event.EventLoadLevel;
import tanks.network.event.EventTankRemove;
Expand Down Expand Up @@ -683,6 +684,39 @@ else if (j == 2)
double angle = this.playerSpawnsAngle.get(spawn);
Team team = this.playerSpawnsTeam.get(spawn);

if (this instanceof Minigame)
{
Team customTeam = ((Minigame) this).customTeamAssignment(i, playerCount, team);
if (customTeam != null)
team = customTeam;

if (customTeam != null && customTeam != this.playerSpawnsTeam.get(spawn))
{
ArrayList<Integer> teamSpawns = new ArrayList<>();
for (int j = 0; j < this.playerSpawnsTeam.size(); j++)
{
if (this.playerSpawnsTeam.get(j).equals(team))
teamSpawns.add(j);
}

if (!teamSpawns.isEmpty())
{
int customSpawn = ((Minigame) this).customSpawnSelection(
this.includedPlayers.get(i), team, teamSpawns
);

if (customSpawn >= 0 && customSpawn < teamSpawns.size())
spawn = teamSpawns.get(customSpawn);
else
spawn = teamSpawns.get((int) (Math.random() * teamSpawns.size()));

x = this.playerSpawnsX.get(spawn);
y = this.playerSpawnsY.get(spawn);
angle = this.playerSpawnsAngle.get(spawn);
}
}
}

if (ScreenPartyHost.isServer)
Game.addPlayerTank(this.includedPlayers.get(i), x, y, angle, team);
else if (!remote)
Expand Down
36 changes: 33 additions & 3 deletions src/main/java/tanks/minigames/Minigame.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package tanks.minigames;

import tanks.Game;
import tanks.Level;
import tanks.ModAPI;
import tanks.*;
import tanks.bullet.Bullet;
import tanks.gui.screen.*;
import tanks.tank.Tank;
import tanks.tank.TankPlayer;
import tanks.tank.TankPlayerRemote;

import java.util.ArrayList;

public abstract class Minigame extends Level
{
/**
Expand Down Expand Up @@ -154,6 +154,36 @@ public void onBulletFire(Bullet b)

}

/**
* Override this to customize team assignment for players.
* Called during level load for each player.
* Call before setUp!
*
* @param playerIndex The index of the player being assigned (0, 1, 2, ...)
* @param totalPlayers Total number of players
* @param defaultTeam The team assigned by default spawn point logic
* @return The team this player should be assigned to, or null to use defaultTeam
*/
public Team customTeamAssignment(int playerIndex, int totalPlayers, Team defaultTeam)
{
return defaultTeam;
}

/**
* Override this to customize spawn point selection for a player.
* Called after team assignment.
* Call before setUp!
*
* @param player The player being spawned
* @param team The team assigned to this player
* @param availableSpawns List of available spawn indices for this team
* @return The spawn point index to use, or -1 to use random selection
*/
public int customSpawnSelection(Player player, Team team, ArrayList<Integer> availableSpawns)
{
return -1;
}

/**
* Override to do something when a tank destroys another tank
* @param attacker
Expand Down
Loading
Loading