FyroxEngine/Fyrox · error

Setting latest value of missing element

Error message

Setting latest value of missing element

What it means

BrushStroke's `set_latest` writes the latest brush value into a StrokeElement stored at a given grid position. It panics when no element exists at that position in the stroke's internal map, meaning the caller is trying to update a terrain cell the stroke never touched.

Solutions

  1. Ensure the element at that position exists first — call the stroke's `modify`/add method for the position before `set_latest`.
  2. Use the map's `get`/contains check on the same position to confirm it is part of the stroke.
  3. Verify position coordinates are the integer terrain-grid cell the brush previously visited (same rounding as when it was inserted).

Example fix

// before
stroke.set_latest(position, value);
// after
if stroke.element_at(position).is_some() {
    stroke.set_latest(position, value);
}
Defensive patterns

Strategy: validation

Validate before calling

// Check the stroke contains the element before updating:
// if stroke.element_at(position).is_some() { stroke.set_latest(position, value); }

Try / catch

// Rust panic - avoid instead: only call set_latest for positions the brush has already visited (tracked when calling modify/add).

Prevention

When it happens

Trigger: Calling `stroke.set_latest(position, value)` with a `Vector2<i32>` position that was never inserted (e.g. not previously added via the stroke's add/update element method, or a position outside the brush footprint).

Common situations: Custom terrain brush code computing positions that drift outside the recorded stroke elements (rounding differences, brush radius off by one); applying a stroke after the map was cleared or rebuilt.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of FyroxEngine/Fyrox@76c91aad8e (2026-09-10). Data as JSON: /api/errors/5b029bbaee83a7b7. Report an issue: GitHub.

Appendix: source

Thrown at fyrox-impl/src/scene/terrain/brushstroke/mod.rs:647

    #[inline]
    pub fn original_pixel_value(&self, position: Vector2<i32>) -> Option<&V> {
        self.0.get(&position).map(|x| &x.original_value)
    }
    /// The updated pixel value based on whatever editing operation the stroke is performing.
    #[inline]
    pub fn latest_pixel_value(&self, position: Vector2<i32>) -> Option<&V> {
        self.0.get(&position).map(|x| &x.latest_value)
    }
    /// Update the stroke with a new value at the given pixel position.
    /// This must only be called after calling [StrokeData::update_strength]
    /// to ensure that this stroke contains data for the position.
    /// Otherwise this method may panic.
    #[inline]
    pub fn set_latest(&mut self, position: Vector2<i32>, value: V) {
        if let Some(el) = self.0.get_mut(&position) {
            el.latest_value = value;
        } else {
            panic!("Setting latest value of missing element");
        }
    }
    /// Stores or modifies the StrokeElement at the given position.
    /// If the element is updated, return the original pixel value of the element.
    /// - `position`: The position of the data to modify within the terrain.
    /// - `strength`: The strength of the brush at the position, from 0.0 to 1.0.
    /// The element is updated if the stored strength is less than the given strength.
    /// If there is no stored strength, that is treated as a strength of 0.0.
    /// - `pixel_value`: The current value of the data.
    /// This may be stored in the StrokeData if no pixel value is currently recorded for the given position.
    /// Otherwise, this value is ignored.
    #[inline]
    pub fn update_strength<F>(
        &mut self,
        position: Vector2<i32>,
        strength: f32,
        pixel_value: F,
    ) -> Option<V>

View on GitHub (pinned to 76c91aad8e)