Well, there are many different ways to accomplish this task, from pure software to pure hardware.
A hardware solution would connect the input pin to the output pin with an inverter (NOT gate) when appropriate.
A software solution starts with a bunch of #defines for the bit position of the valves as
#define Valve1 0x01 // you might use 0b00000001
#define Valve2 0x02 // 0b00000010
#define Valve3 0x04 // 0b00000100
#define Valve8 0x80 // 0b10000000
Now with a couple of statements like
Valve3_Pin_Write(InputSwitches & Valve3) /// Turn Valve 3 on or off
you can handle all your valves. This has to be repeated after each reading of your switches into the variable "InputSwitches" which should be an uint8.
Bear with me here, I understand using the #define rather than putting it in the enum. As far as using a uint8 "input switches" could i just change and use the "unsigned char myflags" to a "uint8 myflags" that is in my code now and takes the value of the bitfield? Also, why do i need to and "input switches & valve 3", Can I just pass the "input switches" or "myflags" to the valve_pin_write()?
Can I just pass the "input switches" or "myflags" to the valve_pin_write()?
Yes, you may. The restrictions are: all pins must reside on the same port.
When a pcb is made for the project it might be necessary to change signals to different ports to ease the layout. When that happenes a software redesign is mandatory (and as usual: time presses).
Your fantasy is nearly not limited by the PSoC, think of arrays of pointers to functions (which need to be initializes as constant declarations) allowing you to "for" a variable over all your switches and write
ValveArray_Write[ii](SwitchArray_Read[ii]()); // Have a look here
ended up just passing the bitfield to a control reg