Skip to content

Commit

Permalink
Implements passing vector to get_raw_buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
ASalvail committed Oct 5, 2018
1 parent c668487 commit 5f09223
Showing 1 changed file with 26 additions and 4 deletions.
30 changes: 26 additions & 4 deletions screeps-game-api/src/objects/impls/room_terrain.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,37 @@
use {constants::Terrain, objects::RoomTerrain};
use stdweb::UnsafeTypedArray;

use {constants::{ReturnCode, Terrain}, objects::RoomTerrain, traits::TryInto};

impl RoomTerrain {
pub fn constructor(room_name: &str) -> Self {
js_unwrap!{new Room.Terrain(@{room_name})}
js_unwrap!(new Room.Terrain(@{room_name}))
}

pub fn get(&self, x: u32, y: u32) -> Terrain {
js_unwrap!{@{self.as_ref()}.get(@{x}, @{y})}
js_unwrap!(@{self.as_ref()}.get(@{x}, @{y}))
}

pub fn get_raw_buffer(&self) -> Vec<u8> {
js_unwrap!(@{self.as_ref()}.getRawBuffer())
let mut buffer: Vec<u8> = vec![0; 2500];
self.get_raw_buffer_array_ref(&mut buffer).expect("Panic in get_raw_buffer.");
buffer
}

pub fn get_raw_buffer_array_ref<'a>(&self, buffer: &'a mut Vec<u8>) -> Result<&'a mut Vec<u8>, ReturnCode> {
let is_success: bool;
{
let arr: UnsafeTypedArray<u8> = unsafe{ UnsafeTypedArray::new(buffer.as_mut_slice()) };

is_success = js!{
var bytes = @{arr};
return @{self.as_ref()}.getRawBuffer(bytes) != -10;
}.try_into().unwrap();
}
if is_success {
Ok(buffer)
} else {
Err(ReturnCode::InvalidArgs)
}
}

}

0 comments on commit 5f09223

Please sign in to comment.