private void apply_controls() { float dt = Time.deltaTime; Vector2 click = new Vector2(0.0f, 0.0f); receive_input(ref click); const float SENSITIVITY = 0.1f; if (click.y > SENSITIVITY || click.y < -SENSITIVITY || click.x < -SENSITIVITY || click.x > SENSITIVITY) { spritesheet_animation_timer += dt * ANIMATION_SPEED; } else { spritesheet_animation_timer = 0.0f; } if (click.y > SENSITIVITY) { ukko_speed_y += UKKO_ACCELERATION * Time.deltaTime * click.y; spritesheet_square_y = 0; if (ukko_speed_y > 0.0f) // moving up { if (map.map_value(x - UKKO_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) < 100 && map.map_value(x + UKKO_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) >= 100 && map.map_value(x + UKKO_DODGE_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) < 100) { if (ukko_speed_x > -UKKO_MAX_SPEED * 0.3f) { ukko_speed_x = -UKKO_MAX_SPEED * 0.3f; // dodge left } } if (map.map_value(x + UKKO_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) < 100 && map.map_value(x - UKKO_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) >= 100 && map.map_value(x - UKKO_DODGE_RADIUS_X, y + UKKO_RADIUS_Y + ukko_speed_y * dt) < 100) { if (ukko_speed_x < UKKO_MAX_SPEED * 0.3f) { ukko_speed_x = UKKO_MAX_SPEED * 0.3f; // dodge right } } } } else if (click.y < -SENSITIVITY) { ukko_speed_y += UKKO_ACCELERATION * Time.deltaTime * click.y; spritesheet_square_y = 1; if (ukko_speed_y < 0.0f) // moving down { if (map.map_value(x - UKKO_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) < 100 && map.map_value(x + UKKO_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) >= 100 && map.map_value(x + UKKO_DODGE_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) < 100) { if (ukko_speed_x > -UKKO_MAX_SPEED * 0.3f) { ukko_speed_x = -UKKO_MAX_SPEED * 0.3f; // dodge left } } if (map.map_value(x + UKKO_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) < 100 && map.map_value(x - UKKO_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) >= 100 && map.map_value(x - UKKO_DODGE_RADIUS_X, y - UKKO_RADIUS_Y + ukko_speed_y * dt) < 100) { if (ukko_speed_x < UKKO_MAX_SPEED * 0.3f) { ukko_speed_x = UKKO_MAX_SPEED * 0.3f; // dodge right } } } } else { if (ukko_speed_y < 0.0f) { ukko_speed_y += UKKO_ACCELERATION * Time.deltaTime; if (ukko_speed_y > 0.0f) { ukko_speed_y = 0.0f; } } if (ukko_speed_y > 0.0f) { ukko_speed_y -= UKKO_ACCELERATION * Time.deltaTime; if (ukko_speed_y < 0.0f) { ukko_speed_y = 0.0f; } } } if (click.x < -SENSITIVITY) { ukko_speed_x += UKKO_ACCELERATION * Time.deltaTime * click.x; if (Mathf.Abs(click.x) > Mathf.Abs(click.y)) { spritesheet_square_y = 2; } if (ukko_speed_x < 0.0f) // moving left { if (map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_RADIUS_Y) < 100 && map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_RADIUS_Y) >= 100 && map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_DODGE_RADIUS_Y) < 100) { if (ukko_speed_y < UKKO_MAX_SPEED * 0.3f) { ukko_speed_y = UKKO_MAX_SPEED * 0.3f; // dodge up } } if (map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_RADIUS_Y) < 100 && map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_RADIUS_Y) >= 100 && map.map_value(x - UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_DODGE_RADIUS_Y) < 100) { if (ukko_speed_y > -UKKO_MAX_SPEED * 0.3f) { ukko_speed_y = -UKKO_MAX_SPEED * 0.3f; // dodge down } } } } else if (click.x > SENSITIVITY) { ukko_speed_x += UKKO_ACCELERATION * Time.deltaTime * click.x; if (Mathf.Abs(click.x) > Mathf.Abs(click.y)) { spritesheet_square_y = 3; } if (ukko_speed_x > 0.0f) // moving left { if (map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_RADIUS_Y) < 100 && map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_RADIUS_Y) >= 100 && map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_DODGE_RADIUS_Y) < 100) { if (ukko_speed_y < UKKO_MAX_SPEED * 0.3f) { ukko_speed_y = UKKO_MAX_SPEED * 0.3f; // dodge up } } if (map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y - UKKO_RADIUS_Y) < 100 && map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_RADIUS_Y) >= 100 && map.map_value(x + UKKO_RADIUS_X + ukko_speed_x * dt, y + UKKO_DODGE_RADIUS_Y) < 100) { if (ukko_speed_y > -UKKO_MAX_SPEED * 0.3f) { ukko_speed_y = -UKKO_MAX_SPEED * 0.3f; // dodge down } } } } else { if (ukko_speed_x < 0.0f) { ukko_speed_x += UKKO_ACCELERATION * Time.deltaTime; if (ukko_speed_x > 0.0f) { ukko_speed_x = 0.0f; } } if (ukko_speed_x > 0.0f) { ukko_speed_x -= UKKO_ACCELERATION * Time.deltaTime; if (ukko_speed_x < 0.0f) { ukko_speed_x = 0.0f; } } } //Debug.Log("ukko=("+x+", "+y+") speed=("+ukko_speed_x+", "+ukko_speed_y+")"); }
private void move() { float dt = Time.deltaTime; if (speed_y > 0.0f) // moving up { if (map.map_value(x - RADIUS_X, y + RADIUS_Y + speed_y * dt) < 100 && map.map_value(x, y + RADIUS_Y + speed_y * dt) < 100 && map.map_value(x + RADIUS_X, y + RADIUS_Y + speed_y * dt) < 100) { y += speed_y * dt; } else { speed_y = 0.0f; } } if (speed_y < 0.0f) // moving down { if (map.map_value(x - RADIUS_X, y - RADIUS_Y + speed_y * dt) < 100 && map.map_value(x, y - RADIUS_Y + speed_y * dt) < 100 && map.map_value(x + RADIUS_X, y - RADIUS_Y + speed_y * dt) < 100) { y += speed_y * Time.deltaTime; } else { speed_y = 0.0f; } } if (speed_x < 0.0f) // moving left { if (map.map_value(x - RADIUS_X + speed_x * dt, y + RADIUS_Y) < 100 && map.map_value(x - RADIUS_X + speed_x * dt, y) < 100 && map.map_value(x - RADIUS_X + speed_x * dt, y - RADIUS_Y) < 100) { x += speed_x * Time.deltaTime; } else { speed_x = 0.0f; } } if (speed_x > 0.0f) // moving right { if (map.map_value(x + RADIUS_X + speed_x * dt, y + RADIUS_Y) < 100 && map.map_value(x + RADIUS_X + speed_x * dt, y) < 100 && map.map_value(x + RADIUS_X + speed_x * dt, y - RADIUS_Y) < 100) { x += speed_x * Time.deltaTime; } else { speed_x = 0.0f; } } transform.position = new Vector3(x, 0.0f, y); map.update_object_position(id, x, y); state_timer += dt; if (state == 0 && (speed_y == 0.0f || state_timer > 5.0f)) { state = 3; spritesheet_square_y = 3; state_timer = 0.0f; speed_x = MAX_SPEED; speed_y = 0.0f; } if (state == 1 && (speed_y == 0.0f || state_timer > 3.0f)) { state = 2; spritesheet_square_y = 2; state_timer = 0.0f; speed_x = -MAX_SPEED; speed_y = 0.0f; } if (state == 2 && (speed_x == 0.0f || state_timer > 2.0f)) { state = 0; spritesheet_square_y = 0; state_timer = 0.0f; speed_x = 0.0f; speed_y = MAX_SPEED; } if (state == 3 && (speed_x == 0.0f || state_timer > 1.0f)) { state = 1; spritesheet_square_y = 1; state_timer = 0.0f; speed_x = 0.0f; speed_y = -MAX_SPEED; } }