Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///obj_player complete code as of 1/14/2019
- ///Please note all lines of code with /// or // are comments and are there for explanatory purposes only
- ///Create event
- //MIGHT NOT DO ACCELRARTION, FIGURE OUT LATER
- hspeed_ = 0;
- vspeed_ = 0;
- walkspeed = 3;
- walkAccel = 1.5;
- hFrictionGround = 0.5;
- hFrictionAir = 0;
- jumpspeed = 6;
- gravity_ = 0.2;
- hspeedFraction = 0.0;
- vspeedFraction = 0.0;
- state = pState.normal; //Guess to set default state
- ropeAccelRate = -0.2;
- dampen = 0.99;
- ropeManualAccelRate = 0.08;
- enum pState
- {
- normal,
- swing
- }
- ///Step event
- //Collision on ground
- grounded = (place_meeting(x, y + 1, obj_wall));
- //Moving around
- var _keyleft = keyboard_check(vk_left);
- var _keyright = keyboard_check(vk_right);
- var _keyup = keyboard_check(vk_up);
- var _keydown = keyboard_check(vk_down);
- var _keyjump = keyboard_check_pressed(vk_space);
- //All of the different states to cycle through
- switch (state)
- {
- //State of normal moving around, no hook
- case pState.normal:
- {
- //Code for movement and jumping
- var dir = _keyright - _keyleft *2; //nothing
- hspeed_ += dir * walkAccel; //need walkAccel?
- var changedir = dir -1 ; //to grab number to change stuff later //minus one to reduce make it not as fast
- if (dir == 0)
- {
- var hFriction = hFrictionGround;
- if (!grounded)
- {
- hFriction = hFrictionAir;
- }
- hspeed_ = Approach(hspeed_, 0, hFriction);
- }
- hspeed_ = clamp(hspeed_, -walkspeed, walkspeed);
- vspeed_ += gravity_;
- if (_keyjump) && (grounded)
- {
- grounded = false;
- vspeedFraction = 0;
- vspeed_ = -jumpspeed;
- }
- //Figure out how to transfer momentum from above actions to here (for swinging)
- //do the vspeed/jumpseed for velcotiy
- if (mouse_check_button_pressed(mb_left)) &&(!grounded) //rework later so that it can be used to grab stuff with grapple hook on ground
- {
- //Position of rope where we clicked
- grappleX = mouse_x;
- grappleY = mouse_y;
- //Position of rope end (player's end)
- ropeX = x;
- ropeY = y;
- //NOTE DELTE LATER: Fix carrying momentum over
- //Speed of swinging
- ropeAngleVelocity = hspeed_ + vspeed_; //0;//how quickly we swing //Carry momentum here, cannot cause rise when swinging from left
- ropeAngle = point_direction(grappleX, grappleY, x, y);
- ropeLength = point_distance(grappleX, grappleY, x, y);
- state = pState.swing;
- }
- } break;
- //The swing state
- case pState.swing:
- {
- //To mimic behavior of pendulum; accelration
- //ropeAngleAccel: how quickly player accelrates along angles of circle of pendulm
- //dcos = working with degrees, not radians like cos, similar to sign
- var ropeAngleAccel = ropeAccelRate * dcos(ropeAngle);
- //Move around while swinging, reduce rope length
- ropeAngleAccel += (_keyright - _keyleft) * ropeManualAccelRate;
- //Reduce or increase rope length
- ropeLength += (_keydown - _keyup) * 15; //_keyjump (instead of _keyup) // *2;
- //Limit of how long rope can be
- ropeLength = max(ropeLength, 0);
- //Actual speed of swinging
- ropeAngleVelocity += ropeAngleAccel;
- ropeAngle += ropeAngleVelocity;
- //SLowly reduce velocity, CAN REMOVE
- ropeAngleVelocity *= dampen;
- //Getting player to move along pendulum
- ropeX = grappleX + lengthdir_x(ropeLength, ropeAngle);
- ropeY = grappleY + lengthdir_y(ropeLength,ropeAngle);
- //Set player speed, for use in collision code
- //FInding difference between where rope is and where we are, making speed that diff.
- hspeed_ = ropeX - x;
- vspeed_ = ropeY - y;
- if (_keyjump)//(mouse_check_button_released(mb_left)) //(_keyjump)
- {
- state = pState.normal;
- vspeedFraction = 0;
- vspeed_ = -jumpspeed;
- }
- } break;
- }
- //Fraction handling (FIGURE OUT SPECIFICS)
- hspeed_ += hspeedFraction;
- vspeed_ += vspeedFraction;
- hspeedFraction = frac(hspeed_);
- vspeedFraction = frac(vspeed_);
- hspeed_ -= hspeedFraction;
- vspeed_ -= vspeedFraction;
- //Collision code
- if (place_meeting (x + hspeed_, y, obj_wall))
- {
- var hStep = sign (hspeed_);
- hspeed_ = 0;
- hspeedFraction = 0;
- //MAY NOT NEED BRACKETS, JUST PUT NEXT TO WHILE
- while (!place_meeting(x + hStep, y, obj_wall))
- {
- x += hStep;
- }
- //what happens when it collides while swinging
- if (state == pState.swing)
- {
- ropeAngle = point_direction(grappleX, grappleY, x, y);
- ropeAngleVelocity = 0; //could try negative number for a bounce
- }
- }
- x += hspeed_;
- if (place_meeting(x, y + vspeed_, obj_wall))
- {
- var vStep = sign (vspeed_);
- vspeed_ = 0;
- vspeedFraction = 0;
- while (!place_meeting(x, y + vStep, obj_wall))
- {
- y += vStep;
- }
- //what happens when it collides while swinging
- if (state == pState.swing)
- {
- ropeAngle = point_direction(grappleX, grappleY, x, y);
- ropeAngleVelocity = 0;
- }
- }
- y += vspeed_;
- ///Draw event
- if (state == pState.swing)
- {
- //draw_sprite_ext(spr_chainlink, 0, x - 8 * xscale, y, xscale, 1, point, image_blend, image_alpha );
- draw_line_width(grappleX, grappleY, x, y, 2); //x, y,
- }
- //Point from player position to mouse position
- var point = point_direction (x, y, mouse_x, mouse_y);
- //Range from 0 to 2, calculate to have range from -1 to 1
- //0 would be false, or making sprite disappear on left (turning it off)
- var xscale = (mouse_x > x) * 2 - 1;
- //Draw player
- draw_sprite_ext(spr_player, 0, x, y, xscale, 1, 0, image_blend, image_alpha);
- //Draw grappling hook
- //Doesn't need xscale, there for lighting consistency
- // x- 4 to correct grapple position; * xscale to keep in place on opp side
- draw_sprite_ext(spr_grapple, 0, x - 4 * xscale, y, 1, xscale, point, image_blend, image_alpha);
- //Normally GMS has a default Draw event that draws the objet (player)
- //THis would remove default\
- //Use draw_self to make player appear
- //Order in which code appears matters; draws it that way
- //The image_blend and alpha are the default blend and alpha for the sprites
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement