Skip to content

Commit 84dd900

Browse files
committed
Kotlin entities: target_chrosslevel trigger/target
1 parent 52760e5 commit 84dd900

File tree

3 files changed

+52
-74
lines changed

3 files changed

+52
-74
lines changed

game/src/main/java/jake2/game/GameSpawn.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -357,26 +357,8 @@ private static void addSpawnAdapter(String id, EntThinkAdapter adapter) {
357357
spawns.put("target_splash", TargetEntitiesKt::targetSplash);
358358
spawns.put("target_spawner", TargetEntitiesKt::targetSpawner);
359359
spawns.put("target_blaster", TargetEntitiesKt::targetBlaster);
360-
addSpawnAdapter("target_crosslevel_trigger", new EntThinkAdapter() {
361-
public String getID() {
362-
return "SP_target_crosslevel_trigger";
363-
}
364-
365-
public boolean think(SubgameEntity ent, GameExportsImpl gameExports) {
366-
GameTarget.SP_target_crosslevel_trigger(ent);
367-
return true;
368-
}
369-
});
370-
addSpawnAdapter("target_crosslevel_target", new EntThinkAdapter() {
371-
public String getID() {
372-
return "SP_target_crosslevel_target";
373-
}
374-
375-
public boolean think(SubgameEntity ent, GameExportsImpl gameExports) {
376-
GameTarget.SP_target_crosslevel_target(ent, gameExports);
377-
return true;
378-
}
379-
});
360+
spawns.put("target_crosslevel_trigger", TargetEntitiesKt::targetCrosslevelTrigger);
361+
spawns.put("target_crosslevel_target", TargetEntitiesKt::targetCrosslevelTarget);
380362
addSpawnAdapter("target_laser", new EntThinkAdapter() {
381363
public String getID() {
382364
return "SP_target_laser";

game/src/main/java/jake2/game/GameTarget.java

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,6 @@
3535

3636
class GameTarget {
3737

38-
39-
static void SP_target_crosslevel_trigger(SubgameEntity self) {
40-
self.svflags = Defines.SVF_NOCLIENT;
41-
self.use = trigger_crosslevel_trigger_use;
42-
}
43-
44-
static void SP_target_crosslevel_target(SubgameEntity self, GameExportsImpl gameExports) {
45-
if (0 == self.delay)
46-
self.delay = 1;
47-
self.svflags = Defines.SVF_NOCLIENT;
48-
49-
self.think.action = target_crosslevel_target_think;
50-
self.think.nextTime = gameExports.level.time + self.delay;
51-
}
52-
5338
private static void target_laser_on(SubgameEntity self, GameExportsImpl gameExports) {
5439
if (null == self.activator)
5540
self.activator = self;
@@ -70,43 +55,6 @@ static void SP_target_laser(SubgameEntity self, GameExportsImpl gameExports) {
7055
self.think.nextTime = gameExports.level.time + 1;
7156
}
7257

73-
/**
74-
* QUAKED target_crosslevel_trigger (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1
75-
* trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8 Once this
76-
* trigger is touched/used, any trigger_crosslevel_target with the same
77-
* trigger number is automatically used when a level is started within the
78-
* same unit. It is OK to check multiple triggers. Message, delay, target,
79-
* and killtarget also work.
80-
*/
81-
private static EntUseAdapter trigger_crosslevel_trigger_use = new EntUseAdapter() {
82-
public String getID() { return "trigger_crosslevel_trigger_use"; }
83-
public void use(SubgameEntity self, SubgameEntity other, SubgameEntity activator, GameExportsImpl gameExports) {
84-
gameExports.game.serverflags |= self.spawnflags;
85-
gameExports.freeEntity(self);
86-
}
87-
};
88-
89-
/**
90-
* QUAKED target_crosslevel_target (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1
91-
* trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8 Triggered
92-
* by a trigger_crosslevel elsewhere within a unit. If multiple triggers are
93-
* checked, all must be true. Delay, target and killtarget also work.
94-
*
95-
* "delay" delay before using targets if the trigger has been activated
96-
* (default 1)
97-
*/
98-
private static EntThinkAdapter target_crosslevel_target_think = new EntThinkAdapter() {
99-
public String getID() { return "target_crosslevel_target_think"; }
100-
public boolean think(SubgameEntity self, GameExportsImpl gameExports) {
101-
if (self.spawnflags == (gameExports.game.serverflags
102-
& Defines.SFL_CROSS_TRIGGER_MASK & self.spawnflags)) {
103-
GameUtil.G_UseTargets(self, self, gameExports);
104-
gameExports.freeEntity(self);
105-
}
106-
return true;
107-
}
108-
};
109-
11058
/**
11159
* QUAKED target_laser (0 .5 .8) (-8 -8 -8) (8 8 8) START_ON RED GREEN BLUE
11260
* YELLOW ORANGE FAT When triggered, fires a laser. You can either set a

game/src/main/kotlin/jake2/game/targetEntities.kt

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -567,8 +567,56 @@ private val targetChangelevelUse = registerUse("use_target_changelevel") { self,
567567
}
568568

569569
// if going to a new unit, clear cross triggers
570-
if (self.map.indexOf('*') > -1) game.game.serverflags =
571-
game.game.serverflags and Defines.SFL_CROSS_TRIGGER_MASK.inv()
570+
if (self.map.indexOf('*') > -1)
571+
game.game.serverflags = game.game.serverflags and Defines.SFL_CROSS_TRIGGER_MASK.inv()
572572

573573
PlayerHud.BeginIntermission(self, game)
574574
}
575+
576+
/**
577+
* QUAKED target_crosslevel_trigger (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1
578+
* trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8
579+
*
580+
* Set's it's spawnflag to the serverflags register.
581+
*
582+
* Once this trigger is touched/used, any trigger_crosslevel_target with the same
583+
* trigger number is automatically used when a level is started within the same unit.
584+
* It is OK to check multiple triggers.
585+
* Message, delay, target, and killtarget also work.
586+
*/
587+
fun targetCrosslevelTrigger(self: SubgameEntity, game: GameExportsImpl) {
588+
self.svflags = Defines.SVF_NOCLIENT
589+
self.use = targetCrosslevelTriggerUse
590+
}
591+
592+
private val targetCrosslevelTriggerUse = registerUse("trigger_crosslevel_trigger_use") { self, _, _, game ->
593+
game.game.serverflags = game.game.serverflags or self.spawnflags
594+
game.freeEntity(self)
595+
}
596+
597+
/**
598+
* QUAKED target_crosslevel_target (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1
599+
* trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8
600+
*
601+
* Triggered by a trigger_crosslevel elsewhere within a unit.
602+
* If multiple triggers are checked, all must be true.
603+
* Delay, target and killtarget also work.
604+
*
605+
* "delay" delay before using targets if the trigger has been activated
606+
* (default 1)
607+
*/
608+
fun targetCrosslevelTarget(self: SubgameEntity, game: GameExportsImpl) {
609+
if (self.delay == 0f)
610+
self.delay = 1f
611+
self.svflags = Defines.SVF_NOCLIENT
612+
self.think.action = targetCrosslevelTargetThink
613+
self.think.nextTime = game.level.time + self.delay
614+
}
615+
616+
private val targetCrosslevelTargetThink = registerThink("target_crosslevel_target_think") { self, game ->
617+
if (self.spawnflags == Defines.SFL_CROSS_TRIGGER_MASK and game.game.serverflags and self.spawnflags) {
618+
GameUtil.G_UseTargets(self, self, game)
619+
game.freeEntity(self)
620+
}
621+
true
622+
}

0 commit comments

Comments
 (0)