Skip to content

Commit

Permalink
Merge pull request #4 from TorchAPI/staging
Browse files Browse the repository at this point in the history
Prepare v1.3.0
  • Loading branch information
Equinox- authored Sep 8, 2017
2 parents 7ec1a49 + c0fb09a commit b95ef31
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 46 deletions.
86 changes: 86 additions & 0 deletions Concealment/ConcealGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
using System.Linq;
using System.Reflection;
using NLog;
using Sandbox.Engine.Physics;
using Sandbox.Game.Entities;
using Sandbox.Game.Entities.Blocks;
using Sandbox.Game.World;
using SpaceEngineers.Game.Entities.Blocks;
using VRage.Game.Entity;
using VRage.Groups;
using VRage.ModAPI;
using VRageMath;

namespace Concealment
Expand Down Expand Up @@ -120,6 +123,89 @@ public bool IsCryoOccupied(ulong steamId)

return false;
}

/// <summary>
/// Conceals this group from game and physics logic.
/// </summary>
public void Conceal()
{
foreach (var body in Grids)
if (body.Parent == null)
UnregisterRecursive(body);

foreach (var body in Grids)
body.Physics?.UnweldAll(false);
foreach (var body in Grids)
body.Physics?.Deactivate();

foreach (var entity in Grids)
if (entity.Parent == null)
MyGamePruningStructure.Remove(entity);

void UnregisterRecursive(IMyEntity e)
{
MyEntities.UnregisterForUpdate((MyEntity)e);
if (e.Hierarchy == null)
return;

foreach (var child in e.Hierarchy.Children)
UnregisterRecursive(child.Container.Entity);
}
}

/// <summary>
/// Reveals this group to game and physics logic.
/// </summary>
public void Reveal()
{
foreach (var entity in Grids)
if (entity.Parent == null)
MyGamePruningStructure.Add(entity);


var weldGroups = new HashSet<MyGroups<MyEntity, MyWeldGroupData>.Group>();
foreach (var body in Grids)
{
if (body.Physics == null)
continue;
var group = MyWeldingGroups.Static.GetGroup(body);
if (group == null)
body.Physics.Activate();
else
weldGroups.Add(group);
}
foreach (var group in weldGroups)
{
var body = group.GroupData.Parent;
if (!(body.Physics is MyPhysicsBody bodyPhysics))
continue;
bodyPhysics.Activate();

foreach (var child in group.Nodes)
if (child.NodeData != body &&
!child.NodeData.MarkedForClose &&
child.NodeData.Physics is MyPhysicsBody physBody)
bodyPhysics.Weld(physBody);

body.RaisePhysicsChanged();
}


foreach (var entity in Grids)
if (entity.Parent == null)
RegisterRecursive(entity);

void RegisterRecursive(IMyEntity e)
{
MyEntities.RegisterForUpdate((MyEntity)e);
if (e.Hierarchy == null)
return;

foreach (var child in e.Hierarchy.Children)
RegisterRecursive(child.Container.Entity);
}
}

}

}
55 changes: 9 additions & 46 deletions Concealment/ConcealmentPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using Havok;
using NLog;
using Sandbox.Definitions;
using Sandbox.Engine.Multiplayer;
Expand All @@ -23,7 +22,6 @@
using VRage.Game;
using VRage.Game.Components;
using VRage.Game.Definitions;
using VRage.Game.Entity;
using VRage.Game.ModAPI;
using VRage.Game.ObjectBuilders.ComponentSystem;
using VRage.ModAPI;
Expand Down Expand Up @@ -54,7 +52,7 @@ public ConcealmentPlugin()

UserControl IWpfPlugin.GetControl()
{
return _control ?? (_control = new ConcealmentControl {DataContext = this});
return _control ?? (_control = new ConcealmentControl { DataContext = this });
}

public override void Init(ITorchBase torch)
Expand Down Expand Up @@ -198,55 +196,17 @@ private void RevealSpawns(PlayerRequestArgs args)
});
}

private void ConcealEntity(IMyEntity entity)
{
if (entity != entity.GetTopMostParent())
return;

entity.GetStorage().SetValue(Id, "True");
MyGamePruningStructure.Remove((MyEntity)entity);
entity.Physics?.Deactivate();
UnregisterRecursive(entity);

void UnregisterRecursive(IMyEntity e)
{
MyEntities.UnregisterForUpdate((MyEntity)e);
if (e.Hierarchy == null)
return;

foreach (var child in e.Hierarchy.Children)
UnregisterRecursive(child.Container.Entity);
}
}

private void RevealEntity(IMyEntity entity)
{
if (entity != entity.GetTopMostParent())
return;

entity.GetStorage().SetValue(Id, "False");
MyGamePruningStructure.Add((MyEntity)entity);
entity.Physics?.Activate();
RegisterRecursive(entity);

void RegisterRecursive(IMyEntity e)
{
MyEntities.RegisterForUpdate((MyEntity)e);
if (e.Hierarchy == null)
return;

foreach (var child in e.Hierarchy.Children)
RegisterRecursive(child.Container.Entity);
}
}

private int ConcealGroup(ConcealGroup group)
{
if (ConcealedGroups.Any(g => g.Id == group.Id))
return 0;

Log.Debug($"Concealing grids: {group.GridNames}");
group.Grids.ForEach(ConcealEntity);
group.Conceal();
foreach (var entity in group.Grids)
entity.GetStorage().SetValue(Id, "True");

group.UpdateAABB();
var aabb = group.WorldAABB;
group.ProxyId = _concealedAabbTree.AddProxy(ref aabb, group, 0);
Expand Down Expand Up @@ -277,7 +237,10 @@ public int RevealGroup(ConcealGroup group)

var count = group.Grids.Count;
Log.Debug($"Revealing grids: {group.GridNames}");
group.Grids.ForEach(RevealEntity);
group.Reveal();
foreach (var entity in group.Grids)
entity.GetStorage().SetValue(Id, "False");

ConcealedGroups.Remove(group);
_concealedAabbTree.RemoveProxy(group.ProxyId);
group.UpdatePostReveal();
Expand Down
52 changes: 52 additions & 0 deletions Jenkins/release.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
param([string] $ApiBase, [string]$tagName, [string]$authinfo, [string[]] $assetPaths)
Add-Type -AssemblyName "System.Web"

$headers = @{
Authorization = "Basic " + [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($authinfo))
Accept = "application/vnd.github.v3+json"
}
try
{
Write-Output("Checking if release with tag " + $tagName + " already exists...")
$release = Invoke-RestMethod -Uri ($ApiBase+"releases/tags/$tagName") -Method "GET" -Headers $headers
Write-Output(" Using existing release " + $release.id + " at " + $release.html_url)
} catch {
Write-Output(" Doesn't exist")
$rel_arg = @{
tag_name=$tagName
name="Generated $tagName"
body=""
draft=$TRUE
prerelease=$tagName.Contains("alpha") -or $tagName.Contains("beta")
}
Write-Output("Creating new release " + $tagName + "...")
$release = Invoke-RestMethod -Uri ($ApiBase+"releases") -Method "POST" -Headers $headers -Body (ConvertTo-Json($rel_arg))
Write-Output(" Created new release " + $tagName + " at " + $release.html_url)
}

$assetsApiBase = $release.assets_url
Write-Output("Checking for existing assets...")
$existingAssets = Invoke-RestMethod -Uri ($assetsApiBase) -Method "GET" -Headers $headers
$assetLabels = ($assetPaths | ForEach-Object {[System.IO.Path]::GetFileName($_)})
foreach ($asset in $existingAssets) {
if ($assetLabels -contains $asset.name) {
$uri = $asset.url
Write-Output(" Deleting old asset " + $asset.name + " (id " + $asset.id + "); URI=" + $uri)
$result = Invoke-RestMethod -Uri $uri -Method "DELETE" -Headers $headers
}
}
Write-Output("Uploading assets...")
$uploadUrl = $release.upload_url.Substring(0, $release.upload_url.LastIndexOf('{'))
foreach ($asset in $assetPaths) {
$assetName = [System.IO.Path]::GetFileName($asset)
$assetType = [System.Web.MimeMapping]::GetMimeMapping($asset)
$assetData = [System.IO.File]::ReadAllBytes($asset)
$headerExtra = $headers + @{
"Content-Type" = $assetType
Name = $assetName
}
$uri = $uploadUrl + "?name=" + $assetName
Write-Output(" Uploading " + $asset + " as " + $assetType + "; URI=" + $uri)
$result = Invoke-RestMethod -Uri $uri -Method "POST" -Headers $headerExtra -Body $assetData
Write-Output(" ID=" + $result.id + ", found at=" + $result.browser_download_url)
}
10 changes: 10 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ node {
stage('Archive') {
archiveArtifacts artifacts: "bin/x64/Release/Concealment.dll", caseSensitive: false, fingerprint: true, onlyIfSuccessful: true
}

gitVersion = bat(returnStdout: true, script: "@git describe --tags").trim()
gitSimpleVersion = bat(returnStdout: true, script: "@git describe --tags --abbrev=0").trim()
if (gitVersion == gitSimpleVersion) {
stage('Release') {
withCredentials([usernamePassword(credentialsId: 'torch-github', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
powershell "& ./Jenkins/release.ps1 \"https://api.github.com/repos/TorchAPI/Concealment/\" \"$gitSimpleVersion\" \"$USERNAME:$PASSWORD\" @(\"bin/x64/Release/Concealment.dll\")"
}
}
}
}
else
currentBuild.result = "FAIL"
Expand Down

0 comments on commit b95ef31

Please sign in to comment.