Spyke

Replies

Comment on

Women in Brussels 'filmed without their knowledge' by men wearing Meta smart glasses

Reply in thread

I do get to, actually, through a little process called shame.

You want to be able to control everyone and force them to act the way you want them to act.

We already do this. You cannot murder, you can't piss in public, a lot of states don't allow open carry, you can be shooed off the premises for smoking in the wrong areas. And, you can't pull your dick out. "Controlling" the way people act is actually absurdly common.

Comment on

Women in Brussels 'filmed without their knowledge' by men wearing Meta smart glasses

Reply in thread

I'm asking you to keep your cock in your pants.

It is so fucked that in modern life I have to waste my time with conservatives trying to endlessly relitigate exactly what about being a pedophile is bad, and with tech fetishists exactly why being an asshole in public is wrong.

Spaceballs, if you're standing somewhere over the grand canyon with your phone out, obviously filming a family of three that does not want to be filmed, what the fuck are you doing? Do you find joy in being an unlikeable loser? Do you often think you just aren't lonely enough?

I don't know what it is you want me to say to you. In my ideal world, Facebook wouldn't be allowed to make this product in the first place.

Comment on

Men against bush

Reply in thread

You know, I decided to look some stuff up after reading this, and there is a fantastic chance it's only because I have relatively thin, straight hair.

I shampoo, I exfoliate. I imagine it would be insane to hear that the razor I use for my face, junk, and limbs is getting a bit scratchy, I probably needed to swap the blade out like a week ago. Getting one ingrown hair, let alone a minefield is just unthinkable to me.

If I had to deal with half of what you do, I either just wouldn't shave or I'd be looking for more permanent methods.

The message of the OP is one I agree with anyway, so it's not like it's a big deal. I hope after 20 years you've settled on a look you like. :p

Comment on

Õ.Ō

This happened to me once.

I was playing some old game on my dad's ps1 when out of nowhere there was a loud flash of light outside, and then some rubber suit wearing guy on the TV just said "Look what I can do! Put your controller on the floor" and then just made it vibrate a bunch. I was about to pick the controller back up, but then, while I was watching, he made it like vibrate walk out of the room over to my mom's purse to dig out her credit card information, and then used it to purchase Digimon Rumble Arena off of some website I've never seen before. I was so mad because my mom was totally gonna blame me for this.

godot

Comment on

Finite state machines overview

There is a trick I learned from Firebelley Games (a youtube channel) that is just as simple to spin up and use as the Enum + match strategy but without sacrificing any versatility.

I actually like it better than the Node-based pattern because you don't have to set up much boilerplate, and you really don't need to think about how different state classes might share data. Plus, none of it will clog up your scene tree or need to be pointlessly instantiated by the engine.

::: spoiler Tap for code

If you're on mobile, I would recommend reading this in horizontal view.

This is all it takes to spin one up:

class_name Player2D extends Node2D

var _state_machine := CallableStateMachine.new();

func _ready() -> void:
  _state_machine.add_state(
    _state_idle_update,
    Callable(),
    Callable()
  );
  _state_machine.add_state(
    _state_jump_update,
    _state_jump_enter,
    Callable()
  );
  # Set first state
  _state_machine.switch_to(_state_idle_update);

func _process(_delta: float) -> void:
  _state_machine.update();

# These are your state functions.
func _state_idle_update() -> void;
func _state_jump_update() -> void;
func _state_jump_enter() -> void;

The only thing your state machine actually needs to know is which functions are paired together. You can use Callable() to fill in any steps you're not actually using.

func _ready() -> void:
  _state_machine.add_state(
    _state_idle_update, # update
    _state_idle_enter,  # enter
    Callable(),         # exit
  );

You call update() yourself, so its timing is completely under your control.

func _process(delta: float) -> void:
  velocity.y += 9.8 * delta;
  _state_machine.update();
  move_and_slide();

States are keyed by their own update step, so there's no extra overhead for string names or Enums or the like, and you still get your IDE's tab autocomplete to help you with 'em.

func _state_idle_update() -> void:
  if Input.is_action_pressed('jump'):
    _state_machine.switch_to(_state_jump_update);

All state functions exist within the Player2D script, so you have complete access to any shared data or component that Player2D does.

var _anim: AnimatedSprite2D = $An...;
var _jump_times := 0;

func _state_idle_enter() -> void:
  _anim.play('idle');
  _jump_times = 0;

func _state_jump_enter() -> void:
  _anim.play('jump');
  _jump_times += 1;

A basic implementation of CallableStateMachine is none too complicated, and you can reuse it anywhere.

class_name CallableStateMachine extends RefCounted

var _states_map := {} as Dictionary[Callable, CallableState];
var _current_state: CallableState = null;

func add_state(update: Callable, enter: Callable, exit: Callable) -> void:
  _states_map.set(update, CallableState.new(update, enter, exit));

func switch_to(update: Callable) -> void:
  if not _states_map.has(update):
    return;
  exit();
  _current_state = _states_map.get(update);
  enter();

func update() -> void:
  if _current_state:
    _current_state.update.call();

func enter() -> void:
  if _current_state:
    _current_state.enter.call();

func exit() -> void:
  if _current_state:
    _current_state.exit.call();

# This is just a struct to package the set of functions.
class CallableState extends RefCounted:
  var update: Callable;
  var enter: Callable;
  var exit: Callable;
  func _init(update: Callable, enter: Callable, exit: Callable) -> void:
    self.update = update;
    self.enter = enter;
    self.exit = exit;

You can do a lot from this base setup, too. I have mine setup such that if I name my functions like this:

func _state_idle() -> void;
func _state_idle__update(delta: float) -> void;
func _state_idle__unhandled_input(event: InputEvent) -> void;
func _state_idle__exit() -> void;

My state machine automatically knows which step each function is for by the keyword after the double-unders (e.g. '__update'), as well as that the nameless _state_idle() is the enter step and the key that I use to switch_to().

:::

Comment on

📡📡📡

Reply in thread

porn in america is hyper-aggressive and focused on penetration. there's no eroticism to it. it's crass and disgusting.

Truuue.

what a boneheaded take out of the OP.

Well, the guy they're talking to is almost certainly a Sargon of Akkad-lite who is upset that feminism is ruining his disney movies. I would tell him to go watch porn too, but that's because I like zingers.

Comment on

nuked from orbit

Reply in thread

Elon actually hands these out to people who don't want them because they were unpopular and an easy means of telling chuds apart from... uh, chads? There's a good chance hers is a forced advertisement and not something she's actually paying for.