Skip to content

Commit

Permalink
Fixed issue with accidentally deleting yourself or other protected pr…
Browse files Browse the repository at this point in the history
…efabs as part of a group. Fixed repositioning when cloning single prefabs. Cloned objects will also spawn offset by 1 meter in the 'up' direction for visibility. Cloning now uses the save/load connection to prevent interruption since it can take some time on large groups.
  • Loading branch information
TwidgeVR committed Sep 18, 2020
1 parent f894e66 commit 18f4e09
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 26 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ https://github.com/edencomputing/attprefabulator/releases/
<a href="https://github.com/edencomputing/attprefabulator/releases/"><img src="public/images/prefabulator_controls.png" width="30%" height="30%" alt="Prefab Controls"></a>

### Release Notes
- v1.7.0 - Snap groups to ground! Fixed issue with accidentally deleting yourself or other protected prefabs as part of a group. Cloning regular objects works now!. Cloned objects will also spawn offset by 1 meter in the 'up' direction for visibility. Cloning now uses the save/load connection to prevent interruption since it can take some time on large groups.

- v1.6.5 - Added the community storage multiplier

- v1.6.4 - Added the new player set-home command, and options to set it to player location, user location, an exact position, or respawn point (reset)

- v1.6.3 - Added preliminary version of keyboard support for moving prefabs

- v1.6.2 - Oops! Hotfix for loading of spawnables and subscriptions

- v1.6.1 - Added prefab and group cloning! Also time of day to server settings, and title tags to all icon-only controls.
Expand Down
68 changes: 48 additions & 20 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1194,17 +1194,42 @@ wsAddHandler( 'select_prefab_group', async( data ) => {

wsAddHandler( 'delete_prefab_group', async( data ) => {
console.log( "Deleting a prefab group: ", data.id, data.group )
attConsole.onMessage = ( message ) => {
let itemsToDelete = []
let scanned = 0
attSaveLoad.onMessage = async ( message ) => {
console.log( `delete prefab event: `, message )
if ( !!message.data.Command.FullName )
{
switch( message.data.Command.FullName )
{
case "select.get":
scanned++
if ( !blacklistItems[ message.data.Result.PrefabHash ] )
{
itemsToDelete.push( message.data.Result )
}
console.log( `scanned: ${scanned}, total: ${itemsToDelete.length}`)
if ( scanned == group.items.length )
{
// Finished scanning, delete the remainder
for( let i = 0; i < itemsToDelete.length; i++ )
{
await attSaveLoad.send(`select ${itemsToDelete[i].Identifier}`)
await attSaveLoad.send(`select destroy`)
}
wsSendJSON({'result': 'OK', data: data })
}
break
}
}
}
if ( prefabGroups[ data.id ] )
{
group = prefabGroups[data.id]
for( let i = 0; i < group.items.length; i++ )
{
let item = group.items[i]
await attConsole.send(`select ${item.Identifier}`)
await attConsole.send(`select destroy`)
await attSaveLoad.send(`select get ${item.Identifier}`)
}
delete prefabGroups[ data.id ]
}
Expand Down Expand Up @@ -1239,7 +1264,7 @@ wsAddHandler( 'clone_prefab', async( data ) => {
wsSendJSON({ 'result': 'OK', data: data, group: newGroup })
}
}
attConsole.onMessage = async( message ) => {
attSaveLoad.onMessage = async( message ) => {
console.log( "clone_prefab group onMessage: ", message )
switch( message.data.Command.FullName )
{
Expand All @@ -1252,13 +1277,13 @@ wsAddHandler( 'clone_prefab', async( data ) => {
newGroup[ngi] = {}
newGroup[ngi].pos = message.data.Result.Position
newGroup[ngi].rot = message.data.Result.Rotation
await attConsole.send(`select tostring`)
await attSaveLoad.send(`select tostring`)
}
break

case "select.tostring":
let prefabString = message.data.ResultString
await attConsole.send(`spawn string ${player} ${prefabString}`)
await attSaveLoad.send(`spawn string ${player} ${prefabString}`)
break

case "spawn.string":
Expand All @@ -1267,9 +1292,9 @@ wsAddHandler( 'clone_prefab', async( data ) => {
newGroup[ngi].Name = message.data.Result[0].Name
let pos = newGroup[ngi].pos
let rot = newGroup[ngi].rot
await attConsole.send(`select ${prefabId}`)
await attConsole.send(`select rotate exact ${rot[0]},${rot[1]},${rot[2]}`)
await attConsole.send(`select move exact ${pos[0]},${pos[1]},${pos[2]}`)
await attSaveLoad.send(`select ${prefabId}`)
await attSaveLoad.send(`select rotate exact ${rot[0]},${rot[1]},${rot[2]}`)
await attSaveLoad.send(`select move exact ${pos[0]},${pos[1]+1},${pos[2]}`)
break

case "select move.exact":
Expand All @@ -1281,14 +1306,14 @@ wsAddHandler( 'clone_prefab', async( data ) => {
let selectItemToString = async ( ind ) => {
let item = groupItems[ind]
console.log( "getting item: ", ind, item )
await attConsole.send(`select ${item.Identifier}`)
await attConsole.send(`select get ${item.Identifier}`)
await attSaveLoad.send(`select ${item.Identifier}`)
await attSaveLoad.send(`select get ${item.Identifier}`)
}
selectItemToString( ind )

} else {
let newItem
attConsole.onMessage = async ( message ) => {
let newItem = {}
attSaveLoad.onMessage = async ( message ) => {
console.log( "clone_prefab onMessage: ", message )
switch( message.data.Command.FullName )
{
Expand All @@ -1300,29 +1325,32 @@ wsAddHandler( 'clone_prefab', async( data ) => {
} else {
newItem.pos = message.data.Result.Position
newItem.rot = message.data.Result.Rotation
await attConsole.send('select tostring')
await attSaveLoad.send('select tostring')
}
break
case "select.tostring":
// Re-spawn from the string
console.log( "select.tostring response: ", message.data.ResultString )
await attConsole.send(`spawn string ${player} ${message.data.ResultString}`)
await attSaveLoad.send(`spawn string ${player} ${message.data.ResultString}`)
break

case "spawn.string":
// Collect the ID and name and return it to the UI
console.log( "moving new item to: ", newItem )
let hash = message.data.Result[0].Identifier
let pos = newItem.pos
let rot = newItem.rot
await attConsole.send(`select ${hash}`)
await attConsole.send(`select rotate exact ${rot[0]},${rot[1]}.${rot[2]}`)
await attConsole.send(`select move exact ${pos[0]},${pos[1]}.${pos[2]}`)
await attSaveLoad.send(`select ${hash}`)
console.log( `select rotate exact ${rot[0]},${rot[1]}.${rot[2]}` )
console.log( `select move exact ${pos[0]},${pos[1]}.${pos[2]}` )
await attSaveLoad.send(`select rotate exact ${rot[0]},${rot[1]},${rot[2]}`)
await attSaveLoad.send(`select move exact ${pos[0]},${pos[1]+1},${pos[2]}`)
wsSendJSON( { result: 'OK', data: data, prefab: message.data.Result[0] } )
break
}
}
await attConsole.send( `select ${data.hash}` )
await attConsole.send( `select get ${data.hash}`)
await attSaveLoad.send( `select ${data.hash}` )
await attSaveLoad.send( `select get ${data.hash}`)
}
})

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "prefabulator",
"version": "1.6.5",
"version": "1.7.0",
"productName": "Prefabulator",
"description": "Add, remove and modify prefabs in A Township Tale",
"main": "electron-start.js",
Expand Down
34 changes: 30 additions & 4 deletions public/script/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -1596,6 +1596,7 @@ $(document).ready(() => {
let player = $("input#PlayerConfigUserId").val()
console.log( "copy selected prefab: ", optSelected )
wsSendJSON({ 'action': 'clone_prefab', 'player': player, 'hash': optSelected })
spinnerReplace( "CopySelectedPrefab" )
}
})

Expand Down Expand Up @@ -1729,6 +1730,7 @@ $(document).ready(() => {
selectPrefabById( "SelectedPrefabSelect", hash, name )
}
}
spinnerRevert( "CopySelectedPrefab" )
})

wsAddHandler('select_prefab_group', ( message ) => {
Expand Down Expand Up @@ -1756,16 +1758,40 @@ function delSpinner( e, ihtml )
$(e.target).html(ihtml)
}

let sprActive = false
let sprCurrentHtml = ''
function spinnerReplace( elem )
{
if ( !sprActive )
{
sprCurrentHtml = $("#"+elem).html()
$("#"+elem).html( '<i class="fa fa-spinner fa-spin" />')
$("#"+elem).addClass('disabled')
sprActive = true
}
}

function spinnerRevert( elem )
{
$("#"+elem).html( sprCurrentHtml )
$("#"+elem).removeClass('disabled')
sprActive = false
}

function deletePrefab( id ) {
console.log( "delete prefab: ", id )
wsAddHandler('delete_prefab_group', ( message ) => {
if ( message.result == 'OK' )
{
$("#SelectedPrefabSelect option:selected").remove()
let newSelected = $("#SelectedPrefabSelect option:last").val()
$("#SelectedPrefabSelect").val( newSelected ).trigger('change')
}
})
if ( `${id}`.includes('group') )
{
let groupId = `${id}`.split('_')[1]
wsSendJSON( { action: 'delete_prefab_group', id: groupId, group: prefabGroups[groupId] } )

$("#SelectedPrefabSelect option:selected").remove()
let newSelected = $("#SelectedPrefabSelect option:last").val()
$("#SelectedPrefabSelect").val( newSelected ).trigger('change')
} else {
dataSet = { 'selectedPrefabId': id }
dataSet.action = 'destroy_prefab'
Expand Down
2 changes: 1 addition & 1 deletion views/SpawnPrefabs.pug
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
div#SpawnPrefabs.SubMessage.pt-3(class="container hidden")
div#SpawnPrefabs.SubMessage.pt-3(class="container")
div.ControlsMini.d-flex.w-100.m-0
i(class="fas fa-search px-2")
input#SearchNearestItems.form-control.w-100(style="flex:1" type="text" placeholder="Search spawnable items")
Expand Down

0 comments on commit 18f4e09

Please sign in to comment.