public static void DrawFormation(FormationData formation) { if (EditorApplication.isPaused) { return; } float3 pos1, pos2, pos3, pos4; if (formation.Width == 0) { pos1 = formation.Position + new float3(1, 0, 1); pos2 = formation.Position + new float3(-1, 0, 1); pos3 = formation.Position + new float3(1, 0, -1); pos4 = formation.Position + new float3(-1, 0, -1); } else { pos1 = formation.Position + formation.GetOffsetFromCenter(0); pos2 = formation.Position + formation.GetOffsetFromCenter(formation.Width - 1); pos3 = formation.Position + formation.GetOffsetFromCenter(formation.UnitCount - formation.Width); pos4 = formation.Position + formation.GetOffsetFromCenter(formation.UnitCount - 1); } Color c = formation.IsFriendly ? Color.blue : Color.red; // Draw the position of the formation Debug.DrawLine(pos1, pos2, c, Time.deltaTime * 2); Debug.DrawLine(pos2, pos3, c, Time.deltaTime * 2); Debug.DrawLine(pos3, pos4, c, Time.deltaTime * 2); Debug.DrawLine(pos4, pos1, c, Time.deltaTime * 2); Debug.DrawLine(pos3, pos1, c, Time.deltaTime * 2); Debug.DrawLine(pos4, pos2, c, Time.deltaTime * 2); }
/// <summary> /// 兵种结构, 和阵型数据 /// idx : 编队ID /// </summary> /// <param name="idx"></param> private void addAllFormation(int idx) { FormationAgent formation = new FormationAgent(); // 设置对应的数据 formation.setData(_battle.getFormation()[idx]); int[] soildArray; // 保存兵种结构 if (idx == (int)Defaults.ResultNum.Zero) ///第一个战场 { soildArray = (int[])_battle.getOneStruct().Clone(); } else { soildArray = (int[])_battle.getTwoStruct().Clone(); } /// 获取阵型 int[] shapeArray = formation.getShapeArray(); // 这里需要注意下 兵种结构 的个数 和 阵型的个数 是一致的 for (int i = 0; i < soildArray.Length; i++) { // 记录当前的 位置 float[] pos = { formation.getPosXArray()[i], formation.getPosYArray()[i], formation.getPosZArray()[i] }; // 兵种ID 兵种阵型ID 位置信息 FormationData mation = new FormationData(soildArray[i], shapeArray[i], pos, false); _formationList.Add(mation); } }
public static void Initialise() { DivisionData.Setup(); FormationData.Setup(); TeamData.Setup(); PlayerData.Setup(); }
public Formation GetFormation(Enums.FormationId formationId) { FormationData f = formations.Where(x => x.formationId == formationId).FirstOrDefault(); Formation formation = JsonConvert.DeserializeObject <Formation>(f.data.text); return(formation); }
private void Spawn() { FormationData chosenFormation = formations[Random.Range(0, formations.Count)]; if (Random.Range(0, 100f) <= chosenFormation.chance) { Formation chosen = chosenFormation.formation; chosen.Build(); int size = chosen.row0.Count; float offset = size / 2f * unitGap; float xo = Random.Range(-boundSize + offset, boundSize - offset); for (int i = 0; i < Formation.maxRows; i++) { List <string> row = chosen.allRows[i]; for (int j = 0; j < row.Count; j++) { string target = row[j]; if (target != "0" && target != "") { float x = xo + j * unitGap - offset; Vector3 pos = transform.position; pos.x += x; pos.y += i * rowGap; objectPooler.SpawnFromPool(target, pos, transform.rotation); } } } nextSpawnTime = Time.time + 1f / spawnRate; } }
public void PopulatePlayers(List <PlayerData> _players, FormationData _formation, SquadScreen _controller) { for (int i = 0; i < _players.Count; i++) { players[i].Populate(_players[i], _controller, i); } UpdateFormation(_formation); }
public override void OnInspectorGUI() { EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUI.indentLevel++; EditorGUILayout.LabelField("阵型编辑器:"); EditorGUILayout.LabelField("在任意场景使用这个东西编辑一个阵型,"); EditorGUILayout.LabelField("然后将阵型保存为数据文件"); EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); EditorGUILayout.Space(); if (GUILayout.Button("Add Node")) { self.AddNode(); } EditorGUILayout.Space(); base.OnInspectorGUI(); EditorGUILayout.Space(); if (GUILayout.Button("Reset")) { self.ClearNodes(); } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(GUI.skin.box); EditorGUI.indentLevel++; EditorGUILayout.LabelField("- 点击\"Save Current Formation\"将把当前阵型保存为位置数据"); EditorGUILayout.LabelField("- 保存的数据文件在: Assets-Set it when you use this system"); EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); if (GUILayout.Button("Save Current Formation")) { FormationData formation = ScriptableObject.CreateInstance("FormationData") as FormationData; Vector3[] data = new Vector3[self.nodes.Count]; for (int i = 0; i < self.nodes.Count; i++) { data[i] = self.nodes[i].position; //save world position } formation.Setup(self.formationName, data); AssetDatabase.CreateAsset(formation, "Assets/Prefabs/FormationData/" + self.formationName.ToString() + ".asset"); AssetDatabase.SaveAssets(); self.SetDefaultName(); } }
private static void GenerateNewTeam(int index, Models.JsonConverters.Team teamData) { var divisionId = ((index - 1) / GameData.TeamsPerDivision) + 1; var cashQuotient = 120 - (teamData.InitialRanking * 2); var cash = rnd.Next(1, cashQuotient) * 1000000; var formation = FormationData.GetRandomFormation(); TeamData.AddNewTeam(teamData.TeamName, teamData.InitialRanking, divisionId, cash, formation); }
public void UpdateFormation(FormationData _data) { formation = _data; for (int i = 0; i < _data.Zones.Length; i++) { Zone zone = _data.Zones[i]; players[i].MoveTo(GetZone(zone).transform.position, zone); } UpdateConnections(); }
public int GetFormationId(FormationData _data) { for (int i = 0; i < List.Length; i++) { if (_data == List[i]) { return((int)_data.Type); } } return(0); }
public void Read(GamePacketReader reader) { SplineId = reader.ReadUInt(); Speed = reader.ReadUInt(); Position = reader.ReadUInt(); FormationData.Read(reader); Mode = reader.ReadEnum <SplineMode>(4u); Offset = reader.ReadUInt(); Blend = reader.ReadBit(); IsContinuing = reader.ReadBit(); AdjustSpeedToLength = reader.ReadBit(); }
public void Write(GamePacketWriter writer) { writer.Write(SplineId); writer.Write(Speed); writer.Write(Position); FormationData.Write(writer); writer.Write(Mode, 4u); writer.Write(Offset); writer.Write(Blend); writer.Write(IsContinuing); writer.Write(AdjustSpeedToLength); }
public void Execute() { //deltaTime += Time.deltaTime; for (int i = 0; i < formationList.Length; ++i) { FormationData formation = formationList[i]; float distance = math.length(CameraPosition - formation.formationPosition); for (int j = 0; j < formation.count(); j++) { float3 center = formation.formationPosition; float3 v3 = new float3(center.x + j % formation.width * 3f, 1, center.z + j / formation.width * 3); float4 v4 = new float4(v3.x, v3.y, v3.z, 1); int index = 1;//Randomizer.Range(0, 6, ref motionDeltaTime); AnimationClipDataBaked clip = animationClips[(int)0 * 25 + index]; normalizedTime = /*normalizedTimeStart*/ 0 + deltaTime / clip.AnimationLength; //Unity.Mathematics.Random r = new Unity.Mathematics.Random((uint)Time.realtimeSinceStartup); float rad = Randomizer.Float(0.1f, 0.3f, ref motionDeltaTime); normalizedTime = (normalizedTime + rad) % 1.0f; float texturePosition = normalizedTime * clip.TextureRange + clip.TextureOffset; int lowerPixelInt = (int)math.floor(texturePosition * clip.TextureWidth); float lowerPixelCenter = (lowerPixelInt * 1.0f) / clip.TextureWidth; float upperPixelCenter = lowerPixelCenter + clip.OnePixelOffset; float lerpFactor = (texturePosition - lowerPixelCenter) / clip.OnePixelOffset; float3 texturePositionData = new float3(lowerPixelCenter, upperPixelCenter, lerpFactor); if (distance < DistanceMaxLod0) { listPositionData0.Add(v4); listRotation0.Add(Quaternion.LookRotation(new Vector3(-90, 9, 0), new Vector3(0.0f, 1, 0.0f))); listTexturePosition0.Add(texturePositionData); } else if (distance < DistanceMaxLod1) { listPositionData1.Add(v4); listRotation1.Add(Quaternion.LookRotation(new Vector3(-90, 8, 0), new Vector3(0.0f, 1, 0.0f))); listTexturePosition1.Add(texturePositionData); } else if (distance < DistanceMaxLod2) { listPositionData2.Add(v4); listRotation2.Add(Quaternion.LookRotation(new Vector3(-90, 7, 0), new Vector3(0.0f, 1, 0.0f))); listTexturePosition2.Add(texturePositionData); } else { listPositionData3.Add(v4); listRotation3.Add(Quaternion.LookRotation(new Vector3(-90, 30, 0), new Vector3(0.0f, 1, 0.0f))); listTexturePosition3.Add(texturePositionData); } } } }
public void InitializeData(FormationData formationData) { /* * initData = formationData; * if (initData != null) * { * formationName = initData.name; * prefab = initData.prefab; * hierarchyLevel = initData.hierarchyLevel; * } */ CreatePrefab(); }
public void OnDropDownSelect() { List <FormationData> fileList = new List <FormationData>(Tools.GetAtFolder <FormationData>("Data/Formations")); foreach (FormationData data in fileList) { if (data.Name == formationNameList[dropdown.value]) { Formation = data; Populate(); } } }
public Entity Spawn(SpawnPointComponent point) { var settings = SimulationSettings.Instance; int unitCount = SimulationSettings.Instance.UnitsPerFormation; var formationData = new FormationData(unitCount, settings.FormationWidth, point.IsFriendly, point.Type, point.Position); //formationData.EnableMovement = false; var formationEntity = spawnerObject.Spawn(formationData, point.offset, formationWaypoints, true); ++totalRequested; return(formationEntity); }
public void CreateNew() { FormationData data = ScriptableObject.CreateInstance <FormationData>(); data.Name = "0-0-0"; data.Zones = new Zone[] { Zone.OwnGoal }; data.Connections = new List <FormationData.Connection>(); #if UNITY_EDITOR AssetDatabase.CreateAsset(data, folder + data.Name + ".asset"); AssetDatabase.SaveAssets(); #endif Formation = data; Populate(); }
public static float3 GetOffsetFromCenter(int unitId, ref FormationData formation, float radius = 1.0f) { float3 sideVector = formation.Forward.zyx; sideVector.x = -sideVector.x; // required to hit the corners correctly var sideOffset = sideVector * radius * formation.Width * formation.formationSide * 0.5f; var height = math.ceil((float)formation.UnitCount / formation.Width); return(sideVector * ((unitId % formation.Width) - (formation.Width * 0.5f)) * radius + sideOffset + formation.Forward * (unitId / formation.Width - (height * 0.5f)) * radius); }
// 兵种结构, 阵型 pos信息,是否是自己 -- 最终实现 private void setAllData(int[] soldierArray, int[] shapeIdArray, float[] posXArray, float[] posYArray, float[] posZArray) { formationList.Clear(); for (int i = 0; i < soldierArray.Length; ++i) { // 组织pos信息 float[] pos = { posXArray[i], posYArray[i], posZArray[i] }; FormationData mation = new FormationData(soldierArray[i], shapeIdArray[i], pos, true); formationList.Add(mation); } }
private void initilize() { if (init) { return; } init = true; PreSetting setting = Resources.Load <PreSetting>("PreSetting"); var bakingObject = GameObject.Instantiate(setting.go) as GameObject; SkinnedMeshRenderer renderer = bakingObject.GetComponentInChildren <SkinnedMeshRenderer>(); LodData lodData = new LodData(); lodData.Lod1Mesh = setting.mesh0; lodData.Lod2Mesh = setting.mesh1; lodData.Lod3Mesh = setting.mesh2; lodData.Lod1Distance = 10; lodData.Lod2Distance = 20; lodData.Lod3Distance = 30; Material material = setting.material; //SkinnedMeshRenderer r = Combine.CombineIt(bakingObject.transform); bakedData = KeyframeTextureBaker.BakeClips(renderer, GetAllAnimationClips(renderer.GetComponentInParent <Animation>()), lodData); //bakedData = KeyframeTextureBaker.BakeClips(r, GetAllAnimationClips(r.GetComponentInParent<Animation>()), lodData); TransferAnimationData(); //UnityEngine.Object fGo = Resources.Load("Formation"); for (int i = 0; i < formationCount; i++) { Vector3 formationPosition = new Vector3(i % 5 * (width + 30), 1, i / 5 * (height + 20)); //GameObject instance = Object.Instantiate(fGo) as GameObject; //instance.name = "Formation_" + i; //Formation form = instance.GetComponent<Formation>(); //form.Init(width, height); //instance.transform.position = formationPosition; FormationData data = new FormationData(); data.width = width; data.height = height; data.formationPosition = formationPosition; formationList.Add(data); } lodDrawer0 = new LodedDrawerECS(bakedData.NewMesh, material, bakedData); lodDrawer1 = new LodedDrawerECS(bakedData.lods.Lod1Mesh, material, bakedData); lodDrawer2 = new LodedDrawerECS(bakedData.lods.Lod2Mesh, material, bakedData); lodDrawer3 = new LodedDrawerECS(bakedData.lods.Lod3Mesh, material, bakedData); }
private void SpawnFormation(float3 position, Vector3 forward) { if (spawner == null) { return; } var settings = SimulationSettings.Instance; int unitCount = SimulationSettings.Instance.UnitsPerFormation; var formationData = new FormationData(unitCount, settings.FormationWidth, IsFriendly, UnitType, position); if (Static) { formationData.EnableMovement = false; } spawner.Spawn(formationData, new float3(0, 0, 0), formationWaypoints, false, forward); }
public void Write(GamePacketWriter writer) { writer.Write(SplineIds.Count, 10u); foreach (var splineId in SplineIds) { writer.Write(splineId); } writer.Write(Speed); writer.Write(Position); writer.Write(TakeoffLocationHeight); writer.Write(LandingLocationHeight); FormationData.Write(writer); writer.Write(Mode, 4); writer.Write(Offset); writer.Write(MultiSplineFlags); writer.Write(Blend); writer.Write(IsContinuing); }
private void UpdateFormationDropdown() { formationNameList = new List <string>(); int selected = 0; for (int i = 0; i < Formations.List.Length; i++) { FormationData data = Formations.List[i]; formationNameList.Add(data.Name); if (data.Name == Team.Formation.Name) { selected = i; } } formationDropdown.ClearOptions(); formationDropdown.AddOptions(formationNameList); formationDropdown.value = selected; }
private void SpawnPlayers(TeamData _team, List <MatchPlayer> _list, Vector2 _spawnPoint, MatchZonesContainer _zones) { PlayerData[] players = _team.Squad; FormationData formation = _team.Formation; for (int i = 0; i < players.Length; i++) { MatchPlayer player = Instantiate(playerTemplate, playersContainer); player.transform.localPosition = _spawnPoint; player.Populate(players[i], (i + 1).ToString()); player.gameObject.SetActive(true); _list.Add(player); } for (int j = 0; j < formation.Zones.Length; j++) { Zone zone = formation.Zones[j]; _list[j].MoveTo(GetZone(zone, _zones).transform.position, 1f, 0.1f * j); } }
private void SpawnFormation() { var settings = SimulationSettings.Instance; var isFriendly = totalRequested % 2 == 0; float3 position = new float3((totalRequested / 2) % width / 2f * sidewaysStep * (totalRequested / 2 % 2 == 0 ? -1 : 1) - ((totalRequested % 4 >= 2) ? sidewaysStep * 0.5f : 0), 0f, ((totalRequested) / (width * 2) * forwardStep + initialPosition) * (isFriendly ? 1 : -1)); int typeBase = (totalRequested / (width * 2)) % 2; var unitType = (UnitType)(typeBase * 2 + totalRequested % 2); int unitCount = SimulationSettings.Instance.UnitsPerFormation; var formationData = new FormationData(unitCount, settings.FormationWidth, isFriendly, unitType, position); spawnerObject.Spawn(formationData, new float3(0, 0, 0), formationWaypoints); ++totalRequested; }
public RowsFormation(int rows, int columns, double depth = 1, double sidemargin = 1) : this() { Data = new FormationData(FormationTypeIdentifier) { Name = FormationTypeIdentifier, Positions = new Position[rows * columns] }; Rows = rows; Columns = columns; Depth = depth; SideMargin = sidemargin; for (int row = 0; row < rows; row++) { for (int col = 0; col < columns; col++) { //Data.Positions[row * columns + col] = new Position((rows - row) * Depth, col * SideMargin, 0); Data.Positions[row * columns + col] = new Position(col * SideMargin, -(rows - row) * Depth, -90); } } }
public void UpdateCellFmtData(FormationData fmtData, FormationData.SingleLocation cellData) { if (cellData.isArrayEye) { fmtEyeIcon.transform.localScale = Vector3.one; fmtEyeIcon.PlayAnim(cellData.buffData.Icon); eyePropText.transform.localScale = Vector3.one; SetEyeBuffData(cellData); } else { fmtEyeIcon.transform.localScale = Vector3.zero; eyePropText.transform.localScale = Vector3.zero; } actorAvatarSlot.Hide(true, false); npcAvatarSlot.Hide(true, false); progressBG.transform.localScale = Vector3.one; lifeProgress.transform.localScale = Vector3.one; powerProgress.transform.localScale = Vector3.one; }
private void UpdateDropdown() { List <FormationData> fileList = new List <FormationData>(Tools.GetAtFolder <FormationData>("Data/Formations")); formationNameList = new List <string>(); int selected = 0; for (int i = 0; i < fileList.Count; i++) { FormationData data = fileList[i]; formationNameList.Add(data.Name); if (data.Name == Formation.Name) { selected = i; } } print(selected); dropdown.ClearOptions(); dropdown.AddOptions(formationNameList); dropdown.value = selected; }
public void Setup() { formationData = FormationDatabase.Instance.PickRandomFormation(waveEnemyTotal); }
/// <summary> /// 兵种结构, 和阵型数据 /// idx : 编队ID /// </summary> /// <param name="idx"></param> private void addAllFormation( int idx ) { FormationAgent formation = new FormationAgent(); // 设置对应的数据 formation.setData(_battle.getFormation()[idx]); int[] soildArray; // 保存兵种结构 if (idx == (int)Defaults.ResultNum.Zero) ///第一个战场 { soildArray = (int[])_battle.getOneStruct().Clone(); } else { soildArray = (int[])_battle.getTwoStruct().Clone(); } /// 获取阵型 int[] shapeArray = formation.getShapeArray(); // 这里需要注意下 兵种结构 的个数 和 阵型的个数 是一致的 for (int i = 0; i < soildArray.Length; i++) { // 记录当前的 位置 float[] pos = { formation.getPosXArray()[i], formation.getPosYArray()[i], formation.getPosZArray()[i] }; // 兵种ID 兵种阵型ID 位置信息 FormationData mation = new FormationData(soildArray[i], shapeArray[i], pos, false); _formationList.Add(mation); } }
public override Formation FromData(FormationData data) { return(new RowsFormation(data)); }