Untitled
unknown
plain_text
2 years ago
12 kB
13
Indexable
import CameraTransposer from "./CameraTransposer";
import GameMgr from "./Gamemgr";
const { ccclass, property } = cc._decorator;
@ccclass
export default class Player extends cc.Component {
@property()
playerSpeed: number = 200;
@property()
jumpSpeed: number = 300;
@property()
dashSpeed: number = 350;
@property(cc.Node)
gameMgr: cc.Node = null;
@property(cc.ParticleSystem)
particle: cc.ParticleSystem = null;
@property()
reverse_gravity: boolean = false;
private animation: cc.Animation = null;
private rigidbody: cc.RigidBody = null;
private moveDir = 0;
public windspeed = 0;
private faceRight: boolean = true;
public canjump: boolean = false;
public canDash: boolean = false;
private isDashing: boolean = false;
private dying: boolean = false;
private onGround: boolean = false;
private isClimbing: boolean = false;
public canClimb: boolean = false;
private endurance: number = 50.0;
public inBubble: boolean = false;
onLoad(): void {
this.animation = this.node.getComponent(cc.Animation);
this.rigidbody = this.node.getComponent(cc.RigidBody);
}
start() {
}
update(dt) {
this.playanimation();
if (this.isClimbing) {
if (this.faceRight)
this.node.scaleX = -1
else
this.node.scaleX = 1;
}
else if (this.moveDir != 0) {
this.node.scaleX = this.moveDir
}
if (this.dying) {
this.node.setPosition(cc.v2(77, 158));
this.dying = false;
}
if (this.node.y < 0) {
this.node.setPosition(cc.v2(77, 158));
}
if (this.inBubble) {
return;
}
if (!this.isDashing) {
this.node.x += (this.playerSpeed * this.moveDir - this.windspeed) * dt;
}
if (this.moveDir != 0) {
this.node.scaleX = this.moveDir;
}
if (this.canClimb && this.gameMgr.getComponent(GameMgr).z_pressed) {
this.rigidbody.linearVelocity = cc.v2(0, 0);
this.isClimbing = true;
this.getComponent(cc.RigidBody).gravityScale = 0;
}
if (this.isClimbing && this.gameMgr.getComponent(GameMgr).z_pressed) {
this.handleClimbing();
} else if (this.isClimbing && !this.gameMgr.getComponent(GameMgr).z_pressed) {
this.rigidbody.linearVelocity = cc.v2(0, 0);
this.isClimbing = false;
this.getComponent(cc.RigidBody).gravityScale = 1;
this.endurance += this.endurance == 50 ? 0 : this.onGround ? 0.1 : 0;
} else if (!this.isClimbing && this.gameMgr.getComponent(GameMgr).z_pressed) {
this.isClimbing = false;
this.getComponent(cc.RigidBody).gravityScale = 1;
this.endurance += this.endurance == 50 ? 0 : this.onGround ? 0.1 : 0;
} else {
this.getComponent(cc.RigidBody).gravityScale = 1;
this.endurance += this.endurance == 50 ? 0 : this.onGround ? 0.1 : 0;
}
if (this.reverse_gravity) {
this.node.scaleY = -1;
}
}
handleClimbing() {
let down_pressed = cc.find("gameMgr").getComponent(GameMgr).down_pressed;
let up_pressed = cc.find("gameMgr").getComponent(GameMgr).up_pressed;
if (this.endurance <= 0) {
// this.rigidbody.linearVelocity = cc.v2(0, 0);
this.isClimbing = false;
this.canClimb = false;
this.getComponent(cc.RigidBody).gravityScale = 1;
return;
} else {
this.endurance -= 0.1;
}
if (down_pressed) {
this.node.y -= 1;
} else if (up_pressed) {
this.node.y += 0.5;
}
}
playerMove(left_pressed: boolean, right_pressed: boolean) {
if (left_pressed) {
this.faceRight = false;
this.moveDir = -1;
} else if (right_pressed) {
this.faceRight = true;
this.moveDir = 1;
} else {
this.moveDir = 0;
}
}
playerJump(c_pressed: boolean) {
if (c_pressed && this.canjump && !this.inBubble) {
this.canjump = false;
let lv = this.rigidbody.linearVelocity;
if (this.reverse_gravity) {
lv.y = -this.jumpSpeed;
} else {
lv.y = this.jumpSpeed;
}
this.rigidbody.linearVelocity = lv;
//console.log("jump")
}
}
playerDash(x_pressed: boolean) {
if (x_pressed && this.canDash && !this.isDashing && !this.inBubble) {
//console.log("dash");
this.canDash = false;
this.isDashing = true;
this.scheduleOnce(() => {
this.isDashing = false;
this.rigidbody.linearVelocity = cc.v2(0, 0);
}, 0.25)
this.rigidbody.linearVelocity = cc.v2(0, 0);
this.scheduleOnce(() => {
let lv = cc.v2(0, 0);
let left_pressed = cc.find("gameMgr").getComponent(GameMgr).left_pressed;
let right_pressed = cc.find("gameMgr").getComponent(GameMgr).right_pressed;
let down_pressed = cc.find("gameMgr").getComponent(GameMgr).down_pressed;
let up_pressed = cc.find("gameMgr").getComponent(GameMgr).up_pressed;
if (left_pressed || right_pressed) {
lv.x = right_pressed ? 1 : -1;
} else {
if (down_pressed || up_pressed) {
lv.x = 0;
} else {
lv.x = this.faceRight ? 1 : -1;
}
}
if (down_pressed || up_pressed) {
lv.y = up_pressed ? 1 : -1;
} else {
lv.y = 0;
}
lv.normalizeSelf();
this.handleparticle(lv);
lv.x = lv.x * this.dashSpeed;
lv.y = lv.y * this.dashSpeed * 1.5;
this.rigidbody.linearVelocity = lv;
cc.find("Canvas/Main Camera").getComponent(CameraTransposer).shakeEffect(1);
}, 0.1)
}
}
handleparticle(lv: cc.Vec2) {
if (lv.x > 0 && lv.y == 0) {
this.particle.angle = 180
} else if (lv.x < 0 && lv.y == 0) {
this.particle.angle = 0;
} else if (lv.x == 0 && lv.y > 0) {
this.particle.angle = 270
} else if (lv.x == 0 && lv.y < 0) {
this.particle.angle = 90
} else if (lv.x > 0 && lv.y > 0) {
this.particle.angle = 225
} else if (lv.x > 0 && lv.y < 0) {
this.particle.angle = 135
} else if (lv.x < 0 && lv.y > 0) {
this.particle.angle = 315
} else if (lv.x < 0 && lv.y < 0) {
this.particle.angle = 45
}
console.log("particle")
this.particle.resetSystem();
}
playanimation() {
if (this.isClimbing && !this.animation.getAnimationState("playerClimbing").isPlaying) {
this.animation.play("playerClimbing");
}
else if (!this.isClimbing && this.isDashing && !this.animation.getAnimationState("playerDash").isPlaying) {
this.animation.play("playerDash");
}
else if (!this.isClimbing && !this.isDashing && this.moveDir == 0 && this.rigidbody.linearVelocity.y == 0 && !this.animation.getAnimationState("playerIdle").isPlaying) {
this.animation.play("playerIdle");
}
else if (!this.isClimbing && !this.isDashing && this.rigidbody.linearVelocity.y == 0 && this.moveDir != 0 && !this.animation.getAnimationState("playerMove").isPlaying) {
this.animation.play("playerMove");
}
else if (!this.isClimbing && !this.isDashing && this.rigidbody.linearVelocity.y > 0 && !this.animation.getAnimationState("playerJump").isPlaying) {
this.animation.play("playerJump");
}
else if (!this.isClimbing && !this.isDashing && this.rigidbody.linearVelocity.y < 0 && !this.animation.getAnimationState("playerFall").isPlaying) {
this.animation.play("playerFall");
}
}
playerAction() {
let easeRate: number = 2;
var move_down = cc.moveBy(0.2, 0, -30).easing(cc.easeInOut(easeRate));
this.node.runAction(move_down);
}
onBeginContact(contact, self, other) {
//console.log(other.node.name)
if (other.node.name == "nails") {
this.dying = true;
//console.log(this.dying);
}
this.onGround = false;
if (this.reverse_gravity == false && (other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.y < 0) {
//this.rigidbody.linearVelocity = cc.v2(0, 0);
this.canDash = true;
this.canjump = true;
this.onGround = true;
} else if (this.reverse_gravity == true && (other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.y > 0) {
//this.rigidbody.linearVelocity = cc.v2(0, 0);
this.canDash = true;
this.canjump = true;
this.onGround = true;
}
if (this.reverse_gravity == false && (other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.y < 0 && contact.getWorldManifold().normal.x == 0) {
this.canClimb = false;
this.canjump = true;
this.onGround = true;
} else if (this.reverse_gravity == true && (other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.y > 0 && contact.getWorldManifold().normal.x == 0) {
this.canClimb = false;
this.canjump = true;
this.onGround = true;
}
if ((other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.x != 0) {
this.canClimb = true;
}
this.inBubble = false;
if (other.node.name == "bubble" || other.node.name == "bubble2") {
this.rigidbody.linearVelocity = cc.v2(0, 0);
this.isDashing = false;
this.canjump = false;
this.canDash = false;
this.inBubble = true;
}
if (other.node.name == "cloud") {
this.canjump = true;
this.canDash = true;
}
}
onEndContact(contact, self, other) {
if ((other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.x != 0) {
//this.rigidbody.linearVelocity = cc.v2(0, 0);
//this.isClimbing = false;
this.canClimb = false;
this.canjump = true;
this.getComponent(cc.RigidBody).gravityScale = 1;
}
if ((other.node.name == "map" || other.node.name == "moving_block") && contact.getWorldManifold().normal.y != 0) {
this.onGround = false;
}
if (other.node.name == "cloud") {
this.canjump = false;
}
}
}
Editor is loading...