Skip to content

Commit

Permalink
Spawn starting aircraft at cruise altitude
Browse files Browse the repository at this point in the history
  • Loading branch information
PunkPun committed Mar 11, 2024
1 parent a3d0a50 commit b002ea7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
29 changes: 26 additions & 3 deletions OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs
Expand Up @@ -13,6 +13,7 @@
using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Activities;
using OpenRA.Primitives;
using OpenRA.Traits;

Expand Down Expand Up @@ -73,6 +74,23 @@ public void WorldLoaded(World world, WorldRenderer wr)
SpawnUnitsForPlayer(world, p);
}

static void InitActor(Actor actor, CPos spawnLocation)
{
// Spawn aircraft at cruise altitude.
var aircraft = actor.TraitOrDefault<Aircraft>();
if (aircraft != null)
{
if (!aircraft.Info.TakeOffOnCreation && aircraft.CanLand(spawnLocation))
aircraft.AddInfluence(spawnLocation);
else
{
var pos = aircraft.CenterPosition;
aircraft.SetCenterPosition(actor, new WPos(pos.X, pos.Y, pos.Z + aircraft.Info.CruiseAltitude.Length));
actor.QueueActivity(new FlyIdle(actor));
}
}
}

void SpawnUnitsForPlayer(World w, Player p)
{
var spawnClass = p.PlayerReference.StartingUnitsClass ?? w.LobbyInfo.GlobalSettings
Expand All @@ -87,14 +105,17 @@ void SpawnUnitsForPlayer(World w, Player p)

if (unitGroup.BaseActor != null)
{
var pos = p.HomeLocation + unitGroup.BaseActorOffset;
var facing = unitGroup.BaseActorFacing ?? new WAngle(w.SharedRandom.Next(1024));
w.CreateActor(unitGroup.BaseActor.ToLowerInvariant(), new TypeDictionary
var actor = w.CreateActor(unitGroup.BaseActor.ToLowerInvariant(), new TypeDictionary
{
new LocationInit(p.HomeLocation + unitGroup.BaseActorOffset),
new LocationInit(pos),
new OwnerInit(p),
new SkipMakeAnimsInit(),
new FacingInit(facing),
});

InitActor(actor, pos);
}

if (unitGroup.SupportActors.Length == 0)
Expand All @@ -117,13 +138,15 @@ void SpawnUnitsForPlayer(World w, Player p)
var subCell = ip.SharesCell ? w.ActorMap.FreeSubCell(validCell) : 0;
var facing = unitGroup.SupportActorsFacing ?? new WAngle(w.SharedRandom.Next(1024));

w.CreateActor(s.ToLowerInvariant(), new TypeDictionary
var actor = w.CreateActor(s.ToLowerInvariant(), new TypeDictionary
{
new OwnerInit(p),
new LocationInit(validCell),
new SubCellInit(subCell),
new FacingInit(facing),
});

InitActor(actor, validCell);
}
}
}
Expand Down
1 change: 1 addition & 0 deletions mods/d2k/rules/aircraft.yaml
Expand Up @@ -18,6 +18,7 @@ carryall.reinforce:
LandableTerrainTypes: Sand, Rock, Transition, Spice, SpiceSand, Dune, Concrete
Repulsable: False
AirborneCondition: airborne
CanForceLand: false
CanSlide: True
VTOL: true
IdleTurnSpeed: 4
Expand Down

0 comments on commit b002ea7

Please sign in to comment.