Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class VisLinker : Actor {
- // these should only be purely cosmetic (blocking/solid is ok) actors
- // they should not ever move
- static const Name classes[] = {
- "AlienGrass",
- "PalmTree1",
- "GrassPatch1",
- "GrassPatch2",
- "ExplosiveBarrel",
- "ShortGreenColumn",
- "ShortRedColumn",
- "SkullColumn",
- "Stalagmite",
- "Stalagtite",
- "TallGreenColumn",
- "TallRedColumn",
- "TechPillar",
- "Backpack",
- "CellPack",
- "ClipBox",
- "Clip",
- "RocketAmmo",
- "RocketBox",
- "ShellBox",
- "Shell",
- "BigTree",
- "TorchTree",
- "BigDeadTree",
- "Firelight",
- "SmallFire"
- };
- array<Actor> actors;
- bool actorsHidden;
- double playerDistThreshold;
- double actorGrabDist;
- int checkDelay;
- int initDelay;
- Default {
- //$Sprite AMRKA0
- //$NotAngled
- //$Arg0 "Radius (dflt: 1024)"
- -SOLID;
- +NOINTERACTION;
- +INVISIBLE;
- +SYNCHRONIZED;
- radius 64;
- }
- override void PostBeginPlay() {
- self.actorGrabDist = self.args[0] == 0 ? 1024 : self.args[0];
- self.playerDistThreshold = self.actorGrabDist + 2400;
- if (self.tid == 0) {
- ChangeTid(FindUniqueTid());
- }
- super.PostBeginPlay();
- }
- void Enumerate() {
- self.actors.Clear();
- Actor _actor;
- // Some actors may have NOBLOCKMAP, this is only done once/rarely
- ThinkerIterator iter = ThinkerIterator.Create("Actor");
- while (_actor = Actor(iter.Next())) {
- if (Distance3D(_actor) <= actorGrabDist) {
- for (int i = 0; i < classes.size(); i++){
- if (_actor is classes[i]) {
- actors.Push(_actor);
- }
- }
- }
- }
- Console.printf("VisLinker (" .. self.tid .. ") -- Enumerated " .. actors.size() .. " actors");
- super.PostBeginPlay();
- }
- bool proxCheck () {
- // return true;
- // return false;
- return CheckProximity("PlayerPawn", playerDistThreshold, 1, CPXF_ANCESTOR);
- }
- void hide() {
- Console.printf("VisLinker (" .. self.tid .. ") -- hide ");
- for (int i = 0; i < actors.size(); i++) {
- actors[i].bINVISIBLE = true;
- }
- actorsHidden = true;
- }
- void unhide() {
- Console.printf("VisLinker (" .. self.tid .. ") -- unhide ");
- for (int i = 0; i < actors.size(); i++) {
- actors[i].bINVISIBLE = false;
- }
- actorsHidden = false;
- }
- void CheckVis() {
- if (actorsHidden && proxCheck()) {
- unhide();
- }
- else if (!actorsHidden && !proxCheck()) {
- hide();
- }
- }
- States {
- Spawn:
- TNT1 A 2;
- TNT1 A 0 Enumerate;
- Idle:
- // stagger checking
- TNT1 A random(35, 70) CheckVis;
- goto Idle;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment