Alternative Multi-Stop Elevator

From Valve Developer Community
Revision as of 12:43, 24 May 2012 by Nacimota (talk | contribs)
Jump to navigation Jump to search
Broom icon.png
This article or section needs to be cleaned up to conform to a higher standard of quality.
For help, see the VDC Editing Help and Wikipedia cleanup process. Also, remember to check for any notes left by the tagger at this article's talk page.
Note.pngNote:This is a six floor elevator, However theretically can take a near unlimited nuber of floors though its best to restrict a limit that best fits to the map design (this has been tested up to ten floors so far --Kwp17pitts 10:18, 5 February 2012 (PST))


How It all works

  • Initial Start


First when the player gets int an elevator, he or she will press a button representing a floor. Lets say Elevator_M6_Button_&i was pressed (Pressing Elevator_F6_Button_&i refer to the same set of commands), it would first trigger the F6_ButtonFunctions_&i commands to trigger Close_AllDoors_&i, F6_TestRelay_&i, LockButtons_&i. Also calling Elevator_&i and Elevator_Weight_&i to SetPosition to 5 (func_movelinear always start with 0). As well as calling the Elevator_Chime_&i to PlaySound.


  • Process of Closing All Doors


Close_AllDoors_&i actually closes one door, but calls on the CompareAll_&i to do its own work of finding the open doors thus preventing refiring all of the doors to animate unnecessarily. When CompareAll_&i is triggered, it causes all of logic_compare enities named F1_Compare_&i through F6_Compare_&i to force their comparisons to be made.


F6_TestRelay_&i will trigger the Test_Relay_All_&i(which forces the value of zero and tests it for branchesz F1_Branch_Button_&i through F6_Branch_Button_&i) and retrigger F6_Branch_Button_&i to have its value set at one and tested.


LockButtons_&i Locks all of the buttons inside and outside of the elevator for the duration of the cycle (prevents the elevator from changing floors while running)


When Elevator_&i gets to the sixth floor, it passes over the F6_Trigger_&i (Passe over others as well) .When the elevator is touching F6_Trigger_&i , it sets the value of 1 and tests it on F6_Branch_Trigger_&i, when it is not touching it sets F6_Branch_Trigger_&i to 0 and tests it. (This also fires other commands but they are not critical to operation).


The F6_Branch_Listener_&i Listens to find if both F6_Branch_Button_&i and F6_Branch_Trigger_&i set to 1. If that is the case it fires F6_Timer_&i to start. After the duration of 3 seconds have passed, it triggers UnlockButtons_&i, 1/6 of a second later it locks both Elevator_F6_Button_&i and Elevator_M6_Button_&i, 5/6 of a second later it disables F6_Timer_&i, and last at 1 5/6 of a second later, Elevator_M_Door_&i is opened and F6_DoorBranch_&i value is set at 1 and tested.


When the'F6_DoorBranch_&i conditions are met ,It triggers F6_DoorTimerOpen_&i to be enabled and fires the timer 1/6 of a second later. When the time is up it fires Elevator_OpenDoor_F6_&i to tigger. Then Elevator_F6_Door_&i is triggered to open, Elevator_Sound_F6_Door_&i PlaySound, and F6_SetAllCompare_&i is triggered setting all of the logic_compare entities F1_Compare_&i Through F6_Compare_&i to 6. When the condition is met, F6_Compare_&i will trigger F6_DoorBranch_&i set the value to 0 and test it.


Construction

This elevator's surrounding construction fallows simililar to the MultiStop elevator tutorial, however, the elevator itself is constructed from a func_movelinear. Therefore, you will not need any pathtracks. This allows the elevator to stop exactly at each point rather than slightly above or below the intended destination.


Brush Entities

This would be the entity that will move thw player to his or her desired floor

ClassInfo

Class
func_movelinear
Name
Elevator_&i
Move Direction (Pitch Yaw Roll)
-90 0 0
Move Distance
160
Note.pngNote:To figure the move distance, add the height of the wall height plus floor thickness (The walls were 128 tall, floors were 32 thick)
Block Damage
2000
Note.pngNote:Necessary to prevent the elevator from getting jammed
Sound played when the brush starts moving
(Pick A Sound)
Sound played when the brush stops moving
(Pick A Sound)

Outputs

NONE


Note.pngNote:Elevator_Weight_&i is not absolutly necessary but it is more for visuals

Place this at the top most floor

ClassInfo

Class
func_movelinear
Name
Elevator_Weight_&i
Move Direction (Pitch Yaw Roll)
90 0 0
Move Distance
160
Note.pngNote:To figure the move distance, add the height of the wall height plus floor thickness (The walls were 128 tall, floors were 32 thick)
Block Damage
2000
Note.pngNote:Necessary to prevent the elevator from getting jammed
Sound played when the brush starts moving
(Pick A Sound)
Sound played when the brush stops moving
(Pick A Sound)

Outputs

NONE


This entity would be placed on a wall outside of the elevator

ClassInfo

Class
func_button
Name
Elevator_F1_Button_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnPressed F1_ButtonFunctions_&i Trigger 0.00

Flags

☑ Don't move

☐ Toggle

☐ Touch Activates

☐ Damage Activates

☑ Use Activates

☐ Starts Locked

☐ Sparks


This entity would be placed inside of the elevator and will move with it.

ClassInfo

Class
func_button
Name
Elevator_M1_Button_&i
Parent
Elevator_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnPressed F1_ButtonFunctions_&i Trigger 0.00

Flags

☑ Don't move

☐ Toggle

☐ Touch Activates

☐ Damage Activates

☑ Use Activates

☐ Starts Locked

☐ Sparks


This is used for detecting the elevator as it passes over. It is mainly used for door control, though it can be used for indicator lights.

Note.pngNote:These must be carefully Placed to allow the doors to function properly

ClassInfo

Class
trigger_multiple
Name
F1_Trigger_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnEndTouch F1_Branch_Trigger_&i SetValueTest 0 0.00
Io11.png OnStartTouch F1_Branch_Trigger_&i SetValueTest 1 0.00
Io11.png OnEndTouch num1_&i Disable 0.00
Io11.png OnStartTouch num1_&i Enable 0.00
Io11.png OnEndTouch F1_Light_&i Color 0 255 0 0.00
Io11.png OnStartTouch F1_Light_&i Color 255 0 0 0.00

Flags

☐ Clients

☐ NPCs

☐ Pushables

☐ Physics Objects

☐ Only player ally NPCs

☐ Only clients in vehicles

☑ Everything (not including physics debris)

☐ Only clients *not* in vehicles

☐ Physics debris

☐ Only NPCs in vehicles (respects player ally flag)

Functional Relays

FunctionalEnts.jpg


These Fuctional relays were created to reduce the number of commands when operating the elevator. More for organizational purposes. For example, rather than rewriting 6 or 12 commands in roughly 24 diferent places, we can write one command for the same 24 places.


This Locks the buttons to prevent players from retriggering while the elevator is operating.

ClassInfo

Class
logic_relay
Name
LockButtons_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger Elevator_F1_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_F2_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_F3_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_F4_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_F5_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_F6_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M1_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M2_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M3_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M4_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M5_Button_&i Lock 0.00
Io11.png OnTrigger Elevator_M6_Button_&i Lock 0.00

This unlocks when the elevator is done with the full cycle.

ClassInfo

Class
logic_relay
Name
UnockButtons_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger Elevator_F1_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_F2_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_F3_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_F4_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_F5_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_F6_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M1_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M2_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M3_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M4_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M5_Button_&i Unock 0.00
Io11.png OnTrigger Elevator_M6_Button_&i Unock 0.00

This forces all of the logic_compare entities to compare the currently set values to effect the doors on all floors.

ClassInfo

Class
logic_relay
Name
CompareAll_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger F1_Compare_&i Compare 0.00
Io11.png OnTrigger F2_Compare_&i Compare 0.00
Io11.png OnTrigger F3_Compare_&i Compare 0.00
Io11.png OnTrigger F4_Compare_&i Compare 0.00
Io11.png OnTrigger F5_Compare_&i Compare 0.00
Io11.png OnTrigger F6_Compare_&i Compare 0.00

This is to force close all of the doors when the elevator starts its cycle. (Utilizing the CompareAll_&i relay)

ClassInfo

Class
logic_relay
Name
Close_AllDoors_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger CompareAll_&i Trigger 0.00
Io11.png OnTrigger Elevator_M_Door_&i SetAnimation close 0.00

Used for setting all of the values to false (0) the the elevator has a destination change.

ClassInfo

Class
logic_relay
Name
Test_Relay_All_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger F1_Branch_Button_&i SetValueTest 0 0.00
Io11.png OnTrigger F2_Branch_Button_&i SetValueTest 0 0.00
Io11.png OnTrigger F3_Branch_Button_&i SetValueTest 0 0.00
Io11.png OnTrigger F4_Branch_Button_&i SetValueTest 0 0.00
Io11.png OnTrigger F5_Branch_Button_&i SetValueTest 0 0.00
Io11.png OnTrigger F6_Branch_Button_&i SetValueTest 0 0.00

Used to open the first floor door when the map starts.

ClassInfo

Class
logic_auto

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnMapSpawn Elevator_M_Door_&i SetAnimation open 0.00
Io11.png OnMapSpawn F1_DoorBranch_&i SetValueTest 1 0.00


Floor Spacific Functions

FloorSpacificEnts close 1.jpg
FloorSpacificEnts close 2.jpg
FloorSpacificEnts close 3.jpg




Increment F1 in a entity name to the next intended floor (That includes the output commands as well)

EX. (F1_TestRelay_&i to F2_TestRelay_&i)
Note.pngNote:For Every floor you intend to add, all of these entities need to be present, in that floor, for the elevator to operate correctly

This triggers the cycle instructions to get to the particular floor (Triggered by one of the two elevator buttons)

ClassInfo

Class
logic_relay
Name
F1_ButtonFunctions_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger Close_AllDoors_&i Trigger 0.00
Io11.png OnTrigger F1_TestRelay_&i Trigger 0.00
Io11.png OnTrigger LockButtons_&i Trigger 0.00
Io11.png OnTrigger Elevator_Chime_&i PlaySound 0.00
Io11.png OnTrigger Elevator_&i SetPosition 0 2.00
Io11.png OnTrigger Elevator_Weight_&i SetPosition 0 2.00



ClassInfo

Class
logic_relay
Name
F1_TestRelay_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger F1_Branch_Button_&i SetValueTest 1 0.01
Io11.png OnTrigger Test_Relay_All_&i Trigger 0 0.00

This branch will only have a true value (1) if the corresponging button has been pressed (ex. if "Elevator_F1_Button_&i" was pressed, F1_Branch_Button_&i would be set to true)

ClassInfo

Class
logic_branch
Name
F1_Branch_Button_&i
Initial value
0

Outputs

NONE


This branch will only have a true value (1) if the corresponging trigger has been tripped (ex. if "F1_Trigger_&i" was pressed, "F1_Branch_Trigger_&i" would be set to true)


ClassInfo

Class
logic_branch
Name
F1_Branch_Trigger_&i
Initial value
0

Outputs

NONE


This listens to the values of both branches, of the same floor, before triggering the timer control. (This is only set to look for the true value of the branches)

ClassInfo

Class
logic_branch_listener
Name
F1_Branch_Listener_&i
Logic Branch 01
F1_Branch_Button_&i
Logic Branch 02
F1_Branch_Trigger_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnAllFalse F1_Timer_&i Disable 0.00
Io11.png OnAllTrue F1_Timer_&i Enable 0.00
Io11.png OnMixed F1_Timer_&i Disable 0.00
Io11.png OnAllTrue F1_Timer_&i FireTimer 0.10

This was used to prevent retriggering the doors, only activates the fallowing commands after a 3 second delay.

ClassInfo

Class
logic_timer
Name
F1_Timer_&i
Start Disabled
Yes
Refire Interval
3

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTimer UnlockButtons_&i Trigger 0.00
Io11.png OnTimer Elevator_F1_Button_&i Lock 0.10
Io11.png OnTimer Elevator_M1_Button_&i Lock 0.10
Io11.png OnTimer F1_Timer_&i Disable 0.50
Io11.png OnTimer Elevator_M_Door_&i SetAnimation open 1.50
Io11.png OnTimer F1_DoorBranch_&i SetValueTest 1 1.50

A set of instructions to open the specified door on the same floor.

ClassInfo

Class
logic_relay
Name
Elevator_OpenDoor_F1_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger Elevator_F1_Door_&i SetAnimation open 0.00
Io11.png OnTrigger Elevator_Sound_F1_Door_&i PlaySound 0.00
Io11.png OnTrigger F1_SetAllCompare_&i Trigger 0.00

A set of instructions to close the specified door on the same floor.

ClassInfo

Class
logic_relay
Name
Elevator_CloseDoor_F1_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger Elevator_F1_Door_&i SetAnimation close 0.00
Io11.png OnTrigger Elevator_Sound_F1_Door_&i PlaySound 0.00

timer delay for opening the door on the specified floor (prevents glitching the animations)

ClassInfo

Class
logic_timer
Name
F1_DoorTimerOpen_&i
Start Disabled
Yes
Refire Interval
3

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTimer Elevator_OpenDoor_F1_&i Trigger 0.00

---

timer delay for closing the door on the specified floor (prevents glitching the animations)

ClassInfo

Class
logic_timer
Name
F1_DoorTimerClose_&i
Start Disabled
Yes
Refire Interval
3

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTimer Elevator_CloseDoor_F1_&i Trigger 0.00

This controls when the door should be open or closed

ClassInfo

Class
logic_branch
Name
F1_DoorBranch_&i
Initial value
0

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnFalse F1_DoorTimerClose_&i Enable 0.00
Io11.png OnFalse F1_DoorTimerOpen_&i Disable 0.00
Io11.png OnTrue F1_DoorTimerOpen_&i Enable 0.00
Io11.png OnTrue F1_DoorTimerClose_&i Disable 0.00
Io11.png OnFalse F1_DoorTimerClose_&i FireTimer 0.10
Io11.png OnTrue F1_DoorTimerOpen_&i FireTimer 0.10
Io11.png OnFalse F1_DoorTimerClose_&i Disable 1.00
Io11.png OnTrue F1_DoorTimerOpen_&i Disable 1.00

This sets all of the floors to a certain value (if we were going to floor 6, all of the value are set to six, then only one logic_compare enity is tripped that uses 6 as its compare value therefor only triggering the doors on the sixth floor)

ClassInfo

Class
logic_relay
Name
F1_SetAllCompare_&i

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnTrigger F1_Compare_&i SetValue 1 0.00
Io11.png OnTrigger F2_Compare_&i SetValue 1 0.00
Io11.png OnTrigger F3_Compare_&i SetValue 1 0.00
Io11.png OnTrigger F4_Compare_&i SetValue 1 0.00
Io11.png OnTrigger F5_Compare_&i SetValue 1 0.00
Io11.png OnTrigger F6_Compare_&i SetValue 1 0.00

ClassInfo

Class
logic_compare
Name
F1_Compare_&i
Compare value
1 {{Note| This must be change to the cooresponding floor number (If F6_Compare_&i then this value must be set at 6)

Outputs

My Output Target Entity Target Input Parameter Delay
Io11.png OnEqualTo F1_DoorBranch_&i SetValueTest 0 0.00