Godot Version
4.4.1 .NET
(C# Extensively)
Question
I was working on my simulation and I decided to export it to see how it would run. When I did this the simulation refused to work and after making it functional I noticed 2 strange issues.
1: The manpower of countries in the simulation would be reduced to the negative integer limit
2: Zoom was incredibly slippery
Both of these issues I didn’t face in the editor, and I’m worried there could be more. Does anyone know why this weirdness is caused and any way to fix it? Thanks in advance!
Camera Controller
extends Camera2D
class_name CameraController
@export var cameraSpeed : float = 500.0
@export var controlEnabled : bool = false
var positionTarget : Vector2
var zoomTarget : Vector2
var zoomSpeed : float = 1
var minZoom : float = 6
var maxZoom : float = 1
var dragging : bool
var draggingStartMousePos : Vector2
var draggingStartPos : Vector2
func _ready() -> void:
positionTarget = position
func _process(delta: float) -> void:
if (controlEnabled):
zoomCamera(delta)
keyboardPan(delta)
dragPan()
func keyboardPan(delta : float) -> void:
var movementVector : Vector2
movementVector.x = Input.get_axis("Move_Left", "Move_Right")
movementVector.y = Input.get_axis("Move_Up", "Move_Down")
position += (movementVector * cameraSpeed * delta * (1/zoom.x))
func dragPan() -> void:
if (!dragging && Input.is_action_just_pressed("Camera_Pan")):
draggingStartMousePos = get_viewport().get_mouse_position()
draggingStartPos = position
dragging = true
if (dragging && Input.is_action_just_released("Camera_Pan")):
dragging = false
if (dragging):
var moveVector : Vector2 = get_viewport().get_mouse_position() - draggingStartMousePos
position = draggingStartPos - moveVector * (1/zoom.x)
func zoomCamera(delta : float) -> void:
if (Input.is_action_just_released("Zoom_In")):
zoomTarget *= 1.1
elif (Input.is_action_just_released("Zoom_Out")):
zoomTarget *= 0.9
zoomTarget = clamp(zoomTarget, Vector2(maxZoom, maxZoom), Vector2(minZoom, minZoom))
var oldZoom = zoom.x
zoom = lerp(zoom, zoomTarget, zoomSpeed * delta)
# Zooming on position
var zoomDir : Vector2 = get_global_mouse_position() - position
position += zoomDir - (zoomDir / (zoom.x/oldZoom))
Function responsible for manpower decreases
public void TakeLosses(long amount, State state = null){
pops.Shuffle();
foreach (Pop pop in pops){
if (pop.profession != Profession.ARISTOCRAT){
if (pop.workforce >= amount){
amount = 0;
pop.ChangeWorkforce(-amount);
} else {
amount -= pop.workforce;
pop.ChangeWorkforce(-pop.workforce);
}
}
if (amount < 1){
break;
}
}
if (state != null){
state.manpower -= amount;
}
}