Beispiel #1
0
        protected virtual BehaviorReturnCode MoveForwardExec()
        {
            if (charDriver.IsFacingRight())
            {
                if (run)
                {
                    charDriver.RunRight();
                }
                else
                {
                    charDriver.WalkRight();
                }
            }
            else
            {
                if (run)
                {
                    charDriver.RunLeft();
                }
                else
                {
                    charDriver.WalkLeft();
                }
            }

            return(BehaviorReturnCode.Success);
        }
		BehaviorReturnCode MoveToDestnExec()
		{
			// We may use X/8 of the offset distance to be considered close to a position. This way, we may ensure
			// the character will stop moving only if it's inside the destination area.
			//
			// I left this action binded to IsArrivedAtDestnConditional because they are often used together.
			float offset = IsArrivedAtDestnConditional.Offset / 8;

			Vector3 charPos = charDriver.GetPosition();

			// Horizontal movement.
			float destnX = GetDestnFunc().x;
			float currPosX = charPos.x;
			if ((destnX - offset) > currPosX) {
				if (run) {
					charDriver.RunRight();
				} else {
					charDriver.WalkRight();
				}
			} else if ((destnX + offset) < currPosX){
				if (run) {
					charDriver.RunLeft();
				} else {
					charDriver.WalkLeft();
				}
			}

			// Vertical movement.
			if (axisMvmt) {
				float destnY = GetDestnFunc().y;
				float currPosY = charPos.y;
            
				if ((destnY - offset) > currPosY) {
					if (run) {
						charDriver.RunUp();
					} else {
						charDriver.WalkUp();
					}
				} else if ((destnY + offset) < currPosY){
					if (run) {
						charDriver.RunDown();
					} else {
						charDriver.WalkDown();
					}
				}
			}

			return BehaviorReturnCode.Success;
		}