예제 #1
0
        public static bool AgentCanMoveAcross(Path path, Node node, Agent agent)
        {
            MovementOverride moveOR = (agent == null) ? null : path.movementOverrides.FirstOrDefault(o => o.agentType == agent.agentType);
            MovementType     checkMove;

            if (moveOR == null)
            {
                // No overrides. Use normal path direction
                checkMove = path.pathDirection;
            }
            else
            {
                // Use override value for this agent
                checkMove = moveOR.movement;
            }

            // Everyone can move on a two-way
            if (checkMove == MovementType.TwoWay)
            {
                return(true);
            }
            // One-way allows moving from FROM to TO
            if (checkMove == MovementType.OneWay && path.fromNode == node)
            {
                return(true);
            }
            // Reverse allows moving from TO to FROM
            if (checkMove == MovementType.Reverse && path.toNode == node)
            {
                return(true);
            }
            // If we're here, it means it's impassable
            return(false);
        }
예제 #2
0
파일: Path.cs 프로젝트: rcalderking/SLOT
		public void AddOverride(int agentType, MovementType movementType) {
			MovementOverride existingOverrideForAgent = movementOverrides.First(o => o.agentType == agentType);
			if (existingOverrideForAgent == null) {
				MovementOverride newOverride = new MovementOverride() {
					agentType = agentType,
					movement = movementType
				};
				movementOverrides.Add(newOverride);
			} else {
				existingOverrideForAgent.movement = movementType;
			}
		}
예제 #3
0
파일: Path.cs 프로젝트: rcalderking/SLOT
		public void RemoveOverride(int agentType) {
			MovementOverride existingOverrideForAgent = movementOverrides.First(o => o.agentType == agentType);
			if (existingOverrideForAgent != null) {
				movementOverrides.Remove(existingOverrideForAgent);
			}
		}