public UnitInstance CreateUnitObject(MapLua.SaveLua.Army.Unit Source, MapLua.SaveLua.Army.UnitsGroup Group) { Vector3 position = ScmapEditor.ScmapPosToWorld(Source.Position); Vector3 RadianOrientation = Vector3.zero; Quaternion rotation = Quaternion.Euler(Source.Orientation * Mathf.Rad2Deg); GameObject Obj = Instantiate(UnitsInfo.Current.UnitInstancePrefab, transform) as GameObject; Obj.name = Source.Name; UnitInstance UInst = Obj.GetComponent <UnitInstance>(); //UInst.Owner = Owner; UInst.Group = Group; Group.UnitInstances.Add(UInst); UInst.orders = Source.orders; UInst.platoon = Source.platoon; UInst.UnitRenderer = this; UInst.SetMatrix(ScmapEditor.SnapToTerrain(position), rotation); if (BP.Footprint.x > 0 && BP.Footprint.y > 0) { UInst.Col.size = new Vector3(BP.Footprint.x * 0.1f, BP.Size.y * 0.1f, BP.Footprint.y * 0.1f); } else { UInst.Col.size = BP.Size * 0.1f; } UInst.Col.center = Vector3.up * (BP.Size.y * 0.05f); AddInstance(UInst); return(UInst); }
public static void CreateRanges() { //SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[0]].GetComponent<UnitInstance>() Count = SelectionManager.Current.Selection.Ids.Count; if (Count > MaxUnitRanges) { Count = MaxUnitRanges; } for (int i = 0; i < Count; i++) { GameObject UIobj = SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[i]]; if (UIobj == null) { continue; } UnitInstance UI = UIobj.GetComponent <UnitInstance>(); if (UI == null) { UnitRanges[i].UnitTr = null; UnitRanges[i].Radius = 0; } else { UnitRanges[i].UnitTr = UI.transform; UnitRanges[i].Radius = ScmapEditor.ScmapPosToWorld(UI.UnitRenderer.BP.MaxRange); UnitRanges[i].MinRadius = ScmapEditor.ScmapPosToWorld(UI.UnitRenderer.BP.MinRange); } } }
private void InitUnits() { var dataUnits = DataGetter.GetItems(DataType.data_unit); if (_goodsInstanceCategory.ContainsKey(ItemType.Unit) == false) { _goodsInstanceCategory.Add(ItemType.Unit, new List <IItemInstance>()); } //TODO: 임의값을 넣기위해 랜덤으로,기본적으로는 서버에서 받는 값을 넣습니다. Random r = new Random(); foreach (var data in dataUnits) { var dataUnit = data.Value as DataUnit; if (_unitInstances.ContainsKey(dataUnit.ClassId)) { continue; } var unitInstance = new UnitInstance(dataUnit, r.Next(0, 100), r.Next(0, 2) == 0); _unitInstances.Add(dataUnit.ClassId, unitInstance); _goodsInstanceCategory[ItemType.Unit].Add(unitInstance); } }
/// <summary> /// Settles a city with the given settler unit /// </summary> /// <param name="settler"></param> /// <returns>whether a city was successfully settled</returns> public bool SettleCity(UnitInstance settler) { // check if the settler is too close to another city foreach (City c in cities) { if (Board.HexDistance(settler.Location, c.Location) < 4) { ConsoleManager.Instance.WriteLine("City too close to another", MsgType.ServerInfo); return(false); // the city was not settled } } // get the player that is trying to settle the city Player player = Controllers.Player.GetPlayer(settler.PlayerID); // create a new city and give it a unique id City city = new City(player, Controllers.Data.Empire.GetEmpire(player.EmpireID).GetNextDefaultCityName(), settler.Location); city.InstanceID = lastCityID++; // check if this is the players first city if (GetPlayerCities(player.InstanceID).Count == 0) { city.IsCapital = true; // the player's first city is its capital city.Buildings.Add("BUILDING_PALACE"); // capital city's have the palace } cities.Add(city); // add the city to the city list TryExpandBorders(city); // expand the city's borders UpdateCity(city); // update city data //OnCitySettled(new CityEventArgs(city)); // trigger the CitySettled event OnCityUpdated(new CityEventArgs(city)); // trigger the CityUpdated event return(true); // the city was settled }
GameObject[] ReadUnitsStorage(UnitsStorage Data) { List <GameObject> CreatedUnits = new List <GameObject>(); if (Data != null && Data.Units != null) { for (int i = 0; i < Data.Units.Length; i++) { SaveLua.Army.Unit NewUnit = new SaveLua.Army.Unit(); NewUnit.Name = SaveLua.Army.Unit.GetFreeName("UNIT_"); NewUnit.type = Data.Units[i].ID; NewUnit.orders = Data.Units[i].orders; NewUnit.platoon = Data.Units[i].platoon; if (!ScmapEditor.Current.Teren.terrainData.bounds.Contains(ScmapEditor.Current.Teren.transform.InverseTransformPoint(Data.Units[i].pos))) { Vector3 Offset = ScmapEditor.Current.Teren.transform.TransformPoint(ScmapEditor.Current.Teren.terrainData.bounds.center) - Data.Center; Offset.y = 0; Data.Units[i].pos += Offset; } NewUnit.Position = ScmapEditor.WorldPosToScmap(Data.Units[i].pos); NewUnit.Orientation = UnitInstance.ScmapRotationFromRotation(Data.Units[i].rot); FirstSelected.Source.AddUnit(NewUnit); NewUnit.Instantiate(); SnapAction(NewUnit.Instance.transform, NewUnit.Instance.gameObject); CreatedUnits.Add(NewUnit.Instance.gameObject); } } return(CreatedUnits.ToArray()); }
public void SelectUnit() { RenderUnitRanges.CreateRanges(); if (SelectionManager.Current.Selection.Ids.Count <= 0) { } else { UnitInstance Uinst = SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[0]].GetComponent <UnitInstance>(); if (Uinst != null) { UnitName.SetValue(Uinst.Owner.Name); SelectedUnitsGroup.text = Uinst.Owner.Parent.Name + " (" + Uinst.Owner.Parent.Owner.Name + ")"; UnitStats.text = Uinst.UnitRenderer.BP.CodeName + "\n" + "Reclaim: Mass: " + (Uinst.UnitRenderer.BP.BuildCostMass * Uinst.UnitRenderer.BP.Wreckage_MassMult) + ", Energy: " + (Uinst.UnitRenderer.BP.BuildCostEnergy * Uinst.UnitRenderer.BP.Wreckage_EnergyMult) + "\nVision radius: " + Uinst.UnitRenderer.BP.VisionRadius + ((Uinst.UnitRenderer.BP.MaxRange > 0) ? ("\nWeapon range: " + Uinst.UnitRenderer.BP.MaxRange) : ""); return; } } // Default UnitName.SetValue(""); SelectedUnitsGroup.text = ""; UnitStats.text = ""; }
public void SelectGroupOfUnit() { if (SelectionManager.Current.Selection.Ids.Count == 0) { return; } GameObject SelectedUnit = SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[0]]; UnitInstance inst = SelectedUnit.GetComponent <UnitInstance>(); if (inst != null && inst.Owner != null && inst.Owner.Parent != null) { foreach (UnitListObject ulo in UnitGroups) { if (ulo.Source == inst.Owner.Parent) { ClearGrpSelection(); //AddToGrpSelection(ulo); SelectGroup(ulo, false); break; } } } }
static UnitsStorage GetUnitsStorage() { GameObject[] Objs = SelectionManager.Current.GetAllSelectedObjects(false); UnitsStorage Data = new UnitsStorage(); Data.Units = new UnitsStorage.Unit[Objs.Length]; for (int i = 0; i < Objs.Length; i++) { UnitInstance UnitI = Objs[i].GetComponent <UnitInstance>(); UnitsStorage.Unit UnitToSave = new UnitsStorage.Unit(); UnitToSave.ID = UnitI.Owner.type; UnitToSave.pos = UnitI.transform.position; UnitToSave.rot = UnitI.transform.rotation; UnitToSave.orders = UnitI.Owner.orders; UnitToSave.platoon = UnitI.Owner.platoon; Data.Units[i] = UnitToSave; Data.Center += UnitToSave.pos; } Data.Center /= Data.Units.Length; return(Data); }
public void Place(Vector3[] Positions, Quaternion[] Rotations, Vector3[] Scales, bool RegisterUndo) { if (FirstSelected == null) { ShowGroupError(); return; } if (Positions.Length > 0 && RegisterUndo) { Undo.RegisterUndo(new UndoHistory.HistoryUnitsRemove(), new UndoHistory.HistoryUnitsRemove.UnitsRemoveParam(new SaveLua.Army.UnitsGroup[] { FirstSelected.Source })); } for (int i = 0; i < Positions.Length; i++) { if (RandomRotation.isOn) { Rotations[i] = GetRandomRotation; } SaveLua.Army.Unit NewUnit = new SaveLua.Army.Unit(); NewUnit.Name = SaveLua.Army.Unit.GetFreeName("UNIT_"); NewUnit.type = SelectedUnit.CodeName; NewUnit.orders = ""; NewUnit.platoon = ""; NewUnit.Position = ScmapEditor.WorldPosToScmap(Positions[i]); NewUnit.Orientation = UnitInstance.ScmapRotationFromRotation(Rotations[i]); FirstSelected.Source.AddUnit(NewUnit); NewUnit.Instantiate(); FirstSelected.Refresh(); } }
public UnitInstance FillGameObjectValues(GameObject Obj, MapLua.SaveLua.Army.Unit Source, MapLua.SaveLua.Army.UnitsGroup Group, Vector3 position, Quaternion rotation) { Obj.name = Source.Name; UnitInstance UInst = Obj.GetComponent <UnitInstance>(); //UInst.Owner = Owner; UInst.Owner = Source; Source.Instance = UInst; //Group.Units.Add(Source); UInst.orders = Source.orders; UInst.platoon = Source.platoon; UInst.UnitRenderer = this; UInst.SetMatrix(UInst.GetSnapPosition(position), rotation); UInst.ArmyColor = Group.Owner.ArmyColor; if (BP.Footprint.x > 0 && BP.Footprint.y > 0) { UInst.Col.size = new Vector3(BP.Footprint.x * 0.1f, BP.Size.y * 0.1f, BP.Footprint.y * 0.1f); } else { UInst.Col.size = BP.Size * 0.1f; } UInst.Col.center = Vector3.up * (BP.Size.y * 0.05f); AddInstance(UInst); return(UInst); }
public void DestroyUnits(List <GameObject> MarkerObjects, bool RegisterUndo = true) { int Count = MarkerObjects.Count; if (RegisterUndo && MarkerObjects.Count > 0) { List <SaveLua.Army.UnitsGroup> AllGroups = new List <SaveLua.Army.UnitsGroup>(); for (int i = 0; i < Count; i++) { UnitInstance uinst = MarkerObjects[i].GetComponent <UnitInstance>(); if (!AllGroups.Contains(uinst.Owner.Parent)) { AllGroups.Add(uinst.Owner.Parent); } } Undo.RegisterUndo(new UndoHistory.HistoryUnitsRemove(), new UndoHistory.HistoryUnitsRemove.UnitsRemoveParam(AllGroups.ToArray())); } for (int i = 0; i < Count; i++) { //DestroyImmediate(MarkerObjects[i]); SaveLua.Army.Unit u = MarkerObjects[i].GetComponent <UnitInstance>().Owner; u.ClearInstance(); if (u.Parent != null) { u.Parent.RemoveUnit(u); } } SelectionManager.Current.CleanSelection(); GoToSelection(); }
// draws the given unit's movement path private void DrawMovementPath(SpriteBatch sb, UnitInstance unit) { if (unit.MovementQueue == null || unit.MovementQueue.Count <= 0) { return; } DrawPath(sb, unit.Location, unit.MovementQueue, pathColor); }
/// <summary> /// Creates a new unit of the given id at the given location and puts it in control of the player of the given id /// </summary> /// <param name="unitID"></param> /// <param name="playerID"></param> /// <param name="location"></param> public void AddUnit(string unitID, int playerID, Point location) { UnitInstance unit = new UnitInstance(Controllers.Data.Unit, unitID, playerID, location); units.Add(unit); OnUnitAdded(new UnitEventArgs(unit)); }
public void AddUnit(UnitInstance unitInstance) { if (StackToExistingUnit(unitInstance) == false) { AddNewUnitToList(unitInstance); } RefreshCurrentWeight(); }
public void ReplaceSelected() { if (FirstSelected == null) { ShowGroupError(); return; } if (string.IsNullOrEmpty(SelectedUnit.CodeName)) { ShowUnitError(); return; } List <SaveLua.Army.UnitsGroup> AllGroups = new List <SaveLua.Army.UnitsGroup>(); List <GameObject> AllObjects = SelectionManager.GetAllSelectedGameobjects(); int Count = AllObjects.Count; if (Count == 0) { return; } for (int i = 0; i < Count; i++) { UnitInstance uinst = AllObjects[i].GetComponent <UnitInstance>(); if (!AllGroups.Contains(uinst.Owner.Parent)) { AllGroups.Add(uinst.Owner.Parent); } } Undo.RegisterUndo(new UndoHistory.HistoryUnitsRemove(), new UndoHistory.HistoryUnitsRemove.UnitsRemoveParam(AllGroups.ToArray())); Vector3[] Positions = new Vector3[Count]; Quaternion[] Rotations = new Quaternion[Count]; Vector3[] Scales = new Vector3[Count]; for (int i = 0; i < Count; i++) { UnitInstance uinst = AllObjects[i].GetComponent <UnitInstance>(); Positions[i] = uinst.transform.position; Rotations[i] = uinst.transform.rotation; Scales[i] = uinst.transform.localScale; SaveLua.Army.Unit u = uinst.Owner; u.ClearInstance(); u.Parent.RemoveUnit(u); } Place(Positions, Rotations, Scales, false); GoToSelection(); }
public static UnitBody CreateNewUnitBody( UnitBody prefab, UnitInstance isInstanceOf ) { UnitBody body = Instantiate( prefab ); body.m_unitInstance = isInstanceOf; body.transform.SetParent( null, false ); body.gameObject.SetActive( false ); body.SpriteRenderer.sprite = isInstanceOf.Definition.BodySprite; return body; }
// parses a packet with the header UnitAdded private void ParseUnitAdded(Packet p) { UnitInstance unit = (UnitInstance)p.Item; DataManager.Unit.Reconstruct(unit); AllUnits.Add(unit); UpdateCache(); ConsoleManager.Instance.WriteLine($"Added a unit {unit.InstanceID}:{unit.UnitID}:{unit.Name}"); OnUnitsUpdated(new UnitListEventArgs(AllUnits)); }
public UnitInstance CreateUnitObject(MapLua.SaveLua.Army.Unit Source, MapLua.SaveLua.Army.UnitsGroup Group) { Vector3 position = ScmapEditor.ScmapPosToWorld(Source.Position); Vector3 RadianOrientation = Vector3.zero; Quaternion rotation = UnitInstance.RotationFromScmapRotation(Source.Orientation); GameObject Obj = Instantiate(UnitsInfo.Current.UnitInstancePrefab, transform) as GameObject; return(FillGameObjectValues(Obj, Source, Group, position, rotation)); }
// parses a packet with the header UnitRemoved private void ParseUnitRemoved(Packet p) { int unitInstanceID = (int)p.Item; UnitInstance unit = AllUnits.Find(u => u.InstanceID == unitInstanceID); AllUnits.Remove(unit); UpdateCache(); ConsoleManager.Instance.WriteLine($"Removed unit {unit.InstanceID}:{unit.UnitID}:{unit.Name}"); OnUnitsUpdated(new UnitListEventArgs(AllUnits)); }
public void Reconstruct(UnitInstance unit) { unit.BaseUnit = data[unit.UnitID]; if (unit.Name == null || unit.Name.Equals("")) { unit.Name = unit.BaseUnit.Name; } unit.Rebuild(); }
public UnitInstance FillGameObjectValues(GameObject Obj, MapLua.SaveLua.Army.Unit Source, MapLua.SaveLua.Army.UnitsGroup Group, Vector3 position, Quaternion rotation) { if (Obj.transform.childCount > 0) { foreach (Transform child in Obj.transform) { Destroy(child.gameObject); } } Obj.name = Source.Name; UnitInstance UInst = Obj.GetComponent <UnitInstance>(); //UInst.Owner = Owner; UInst.Owner = Source; Source.Instance = UInst; //Group.Units.Add(Source); UInst.orders = Source.orders; UInst.platoon = Source.platoon; UInst.UnitRenderer = this; UInst.SetMatrix(UInst.GetSnapPosition(position), rotation); UInst.ArmyColor = Group.Owner.ArmyColor; if (BP.SelectionSize.x > 0 && BP.SelectionSize.y > 0) { UInst.Col.size = BP.SelectionSize * 0.1f; } else { UInst.Col.size = BP.Size * 0.1f; } UInst.Col.center = Vector3.up * (BP.Size.y * 0.05f); if (BP.HasTermac) { if (BP.Termac_Albedo != null) { DecalsInfo.CreateGameObjectFromDecal(BP.Termac_Albedo); BP.Termac_Albedo.Obj.tr.parent = UInst.transform; BP.Termac_Albedo.Obj.tr.localPosition = Vector3.zero; } if (BP.Termac_Normal != null) { DecalsInfo.CreateGameObjectFromDecal(BP.Termac_Normal); BP.Termac_Normal.Obj.tr.parent = UInst.transform; BP.Termac_Normal.Obj.tr.localPosition = Vector3.zero; } } AddInstance(UInst); return(UInst); }
public Card SpawnUnitInRow(UnitInstance unitInstance, int rowIndex, Country unitCountry) { Card card = Instantiate(cardPrefab, BattleController.instance.GetWorldCanvas().transform); card.transform.position = rows[rowIndex].transform.position + new Vector3(0, 5, 0); card.transform.rotation = Quaternion.Euler(90, 0, 0); card.Init(unitInstance, unitCountry); rows[rowIndex].AddCardToRow(card); return(card); }
public void OnNameChanged() { if (SelectionManager.Current.Selection.Ids.Count < 0) { return; } string SourceName = UnitName.text; if (string.IsNullOrEmpty(SourceName) || string.IsNullOrWhiteSpace(SourceName)) { SelectUnit(); return; // EmptyName } SourceName = SourceName.Replace(" ", "_"); //TODO Register undo for (int i = 0; i < SelectionManager.Current.Selection.Ids.Count; i++) { UnitInstance Uinst = SelectionManager.Current.AffectedGameObjects[SelectionManager.Current.Selection.Ids[i]].GetComponent <UnitInstance>(); if (Uinst != null) { string NewName = SourceName; if (SaveLua.Army.Unit.NameExist(NewName)) { string[] Split = NewName.Split('_'); int OutInt = 0; if (Split.Length > 1 && int.TryParse(Split[Split.Length - 1], out OutInt)) { NewName = ""; for (int s = 0; s < Split.Length - 1; s++) { if (s > 0) { NewName += "_"; } NewName += Split[s]; } } NewName = SaveLua.Army.Unit.GetFreeName(NewName + "_"); } SaveLua.Army.Unit.ReplaceName(Uinst.Owner.Name, NewName); Uinst.Owner.Name = NewName; SelectUnit(); } } }
bool StackToExistingUnit(UnitInstance unitInstance) { int unitIndex = FindUnitByID(unitInstance.GetUnit().UnitID); if (unitIndex >= 0) { units[unitIndex].amount += unitInstance.amount; return(true); } return(false); }
public static void SaveUnit(LuaParser.Creator LuaFile, UnitInstance Instance) { LuaFile.OpenTab(LuaParser.Write.PropertieToLua(Instance.gameObject.name) + LuaParser.Write.OpenBracketValue); LuaFile.AddLine(LuaParser.Write.StringToLua(UnitsGroup.KEY_TYPE, Instance.UnitRenderer.BP.CodeName)); LuaFile.AddLine(LuaParser.Write.StringToLua(UnitsGroup.KEY_ORDERS, Instance.orders)); LuaFile.AddLine(LuaParser.Write.StringToLua(UnitsGroup.KEY_PLATOON, Instance.platoon)); LuaFile.AddLine(LuaParser.Write.Vector3ToLua(UnitsGroup.KEY_POSITION, ScmapEditor.WorldPosToScmap(Instance.transform.localPosition))); LuaFile.AddLine(LuaParser.Write.Vector3ToLua(UnitsGroup.KEY_ORIENTATION, Instance.GetScmapRotation())); LuaFile.CloseTab(LuaParser.Write.EndBracketNext); }
public static void GetTotalUnitsReclaim(out float Mass, out float Energy) { Mass = 0; Energy = 0; foreach (GameObject obj in UnitInstance.AllUnitInstances) { UnitInstance UI = obj.GetComponent <UnitInstance>(); Mass += UI.UnitRenderer.BP.BuildCostMass * UI.UnitRenderer.BP.Wreckage_MassMult; Energy += UI.UnitRenderer.BP.BuildCostEnergy * UI.UnitRenderer.BP.Wreckage_EnergyMult; } }
public void GoToSelection() { int[] AllTypes; AllObjects = UnitInstance.GetAllUnitGo(out AllTypes); SelectionManager.Current.SetAffectedGameObjects(AllObjects, SelectionManager.SelectionControlTypes.Units); SelectionManager.Current.SetAffectedTypes(AllTypes); PlacementManager.Clear(); if (ChangeControlerType.Current) { ChangeControlerType.Current.UpdateButtons(); } }
public void Refresh(UnitInstance unitInstance) { if (unitInstance != null) { unitToRefresh = unitInstance; iconImage.sprite = unitInstance.GetUnit().icon; amountText.text = unitInstance.GetUnit().name + " x " + unitInstance.amount.ToString("f0"); } else { unitToRefresh = null; iconImage.sprite = UnitsManager.instance.GetDefaultSprite(); amountText.text = "-"; } }
// parses a packet with the header UnitUpdate private void ParseUnitUpdate(Packet p) { UnitInstance unit = (UnitInstance)p.Item; UnitInstance oldUnit = AllUnits.Find(u => u.InstanceID == unit.InstanceID); if (!AllUnits.Remove(oldUnit)) { return; } DataManager.Unit.Reconstruct(unit); AllUnits.Add(unit); UpdateCache(); ConsoleManager.Instance.WriteLine($"Updated unit {unit.InstanceID}:{unit.UnitID}:{unit.Name}"); OnUnitsUpdated(new UnitListEventArgs(AllUnits)); }
public void RemoveInstance(UnitInstance UInst) { if (!Instances.Contains(UInst)) { return; } Instances.Remove(UInst); if (Lod.Contains(UInst)) { Lod.Remove(UInst); } IsDirty = true; }
public void Instantiate() { if (Instance && Instance.gameObject) { return; } UnitInstance ui = GetGamedataFile.LoadUnit(type).CreateUnitObject(this, Parent); ui.IsWreckage = Parent.IsWreckage ? 1 : 0; if (AllNames.Contains(Name)) { Name = GetFreeName("UNIT_"); } AllNames.Add(Name); }
void Restart() { //Debug.Log("*AI* Restarting Steps"); currentStep = AIStep.SelectUnit; selectedUnit = null; target = null; path = null; }
bool SelectUnit() { //Debug.Log("*AI* Slecting Unit"); foreach (UnitInstance i in myUnits) { if (!i.IsDead && !i.IsExausted) { selectedUnit = i; return true; } } //Debug.Log("*AI* No Unit to select!"); return false; }