public bool HasOverlappedTargetWithWeapon(Vector2 targetPos, WeaponPart part) { LookaheadNode curSearchNode = this; bool crossedTarget = false; while (curSearchNode != null && curSearchNode.ParentNode != null) { Vector2 originFireVec = part.OwningTank.Hull.Schematic.OrigWeaponDirs[part.EquipIdx]; float range = part.Schematic.Range; Vector2 curFireVec = originFireVec.Rotate(curSearchNode.TankInfo.Rot); Vector2 parentFireVec = originFireVec.Rotate(curSearchNode.ParentNode.TankInfo.Rot); Vector2 curToTargetVec = targetPos - curSearchNode.TankInfo.Pos; Vector2 parentToTargetVec = targetPos - curSearchNode.ParentNode.TankInfo.Pos; float curAngleDiff = Vector2.SignedAngle(curFireVec, curToTargetVec); float parentAngleDiff = Vector2.SignedAngle(parentFireVec, parentToTargetVec); bool curFacing = Mathf.Abs(curAngleDiff) < 90f; if (curFacing && Mathf.Sign(curAngleDiff) != Mathf.Sign(parentAngleDiff) && curToTargetVec.magnitude < range && parentToTargetVec.magnitude < range) { crossedTarget = true; break; } curSearchNode = curSearchNode.ParentNode; } return(crossedTarget); }
public bool SetPart(WeaponPart newPart) { if (newPart != null && newPart.partType != slotType) { return(false); } if (part != null) { part.Unload(); } part = newPart; if (part != null) { part.Load(transform); } if (SceneManager.GetActiveScene().name == "WeaponCustomization") { UiWeaponStats.UpdateStats(); } return(true); }
void Start() { Tank playerTank = CombatHandler.Instance.HumanTankController.SelfTank; for (int i = 0; i < totalNumWeapons; ++i) { WeaponSlotUI slotUI = Instantiate <WeaponSlotUI>(weaponSlotUIPrefab, this.transform, false); float minYAnchor = 1f - ((float)(i + 1) / totalNumWeapons); float maxYAnchor = 1f - ((float)i / totalNumWeapons); RectTransform rectTrans = slotUI.GetComponent <RectTransform>(); Vector2 anchorMin = rectTrans.anchorMin; anchorMin.y = minYAnchor; Vector2 anchorMax = rectTrans.anchorMax; anchorMax.y = maxYAnchor; rectTrans.anchorMin = anchorMin; rectTrans.anchorMax = anchorMax; rectTrans.localPosition += new Vector3((float)i * slotOffset, 0, 0); WeaponPart part = playerTank.Hull.GetWeaponAtIdx(i); slotUI.Init(part); } }
public static void Show(WeaponPart part) { if (instance != null) { instance.ShowPanel(part); } }
public IEnumerator _Finds_All_Unconnected_Adaptors() { GameObject testGameObject = new GameObject(); testGameObject.name = "TESTGAMEOBJECT"; GameObject testGameObject1 = new GameObject(); testGameObject1.name = "TESTGAMEOBJECT"; WeaponPart testPart = testGameObject1.AddComponent <WeaponPart>(); Adaptor adaptorLoadingMechanism = testGameObject1.AddComponent <Adaptor>(); Adaptor adaptorLoadingMechnaism2 = testGameObject1.AddComponent <Adaptor>(); testPart.Adaptors = new List <Adaptor> { adaptorLoadingMechanism, adaptorLoadingMechnaism2 }; testPart.TestSetup("NotSearchedPart", WeaponPartType.Trigger, null); WeaponStructure weaponStructure = testGameObject.AddComponent <WeaponStructure>(); weaponStructure.trigger = testPart; testGameObject1.transform.parent = testGameObject.transform; yield return(null); List <Adaptor> result = weaponStructure.FindUnconnectedAdaptorsRecursively(); Assert.Contains(adaptorLoadingMechanism, result); Assert.Contains(adaptorLoadingMechnaism2, result); Assert.AreEqual(2, result.Count); }
// Update is called once per frame void Update() { if (player != null) { Vector2 direction = new Vector2(player.position.x - transform.position.x, player.position.y - transform.position.y); float distance = Vector3.Distance(transform.position, player.transform.position); if (distance < 20) { transform.up = direction; if (distance > 5) { rb.AddRelativeForce(Vector2.up * tankEntity.speed); } if (Time.timeSinceLevelLoad - lastFired > 1f) { foreach (TankPart part in tankEntity.parts) { if (part is WeaponPart) { WeaponPart weapon = (WeaponPart)part; if (part != null) { weapon.Fire(); } } } lastFired = Time.timeSinceLevelLoad; } } } }
public IEnumerator _Replaces_WeaponPart_Correctly() { var testData = createTestWeaponStructure(); yield return(null); WeaponPart replacedPart = (WeaponPart)testData[1]; WeaponStructure weaponStructure = (WeaponStructure)testData[0]; GameObject testGameObject = new GameObject(); testGameObject.name = "TESTGAMEOBJECT"; WeaponPart replacementPart = testGameObject.AddComponent <WeaponPart>(); replacementPart.Adaptors = new List <Adaptor>(); replacementPart.TestSetup("ReplacementPart", WeaponPartType.FiringMechanism, null); WeaponPart parent = replacedPart.Parent; weaponStructure.ReplaceWeaponPart(replacedPart, replacementPart); yield return(null); Assert.AreSame(replacementPart, parent.Children[0]); Assert.Contains(replacementPart, parent.Children); Assert.AreSame(replacementPart.transform.parent, parent.Adaptors[0].ChildPartTransform); }
public override void SetObject(object o) { if (o == null || !(o is WeaponPart)) { if (partName != null) { partName.text = "None"; } if (partIcon != null) { partIcon.sprite = null; } } else { part = o as WeaponPart; if (partName != null) { partName.text = part.name; } if (partIcon != null) { partIcon.sprite = part.icon; } } }
/// <summary> /// Try to recieve an object form another container /// </summary> /// <param name="o">The object to recieve</param> /// <param name="indices">The indeces in which the object should be stored</param> /// <returns>Whether the container sucsessfully recieved the object</returns> public override bool RecieveObject(object o, int[] indices) { // If it's not an item, or it's thw wrong number of indices if (!(o is WeaponPart) || indices.Length != 1) { return(false); } // Get the index int index = indices[0]; // Make sure the index is within range if (index != 0) { return(false); } // Get the item WeaponPart part = o as WeaponPart; // If the recieving slot is empty if (slot.part == null) { if (slot.SetPart(part)) { panel.SetObject(part); return(true); } } // Failed to recieve the object return(false); }
public override void SetPart(WeaponPart part) { base.SetPart(part); data = part as Body; fireRate = data.GetStats(WeaponPartStats.FireRate, 60f); }
public override void SetPart(WeaponPart part) { base.SetPart(part); data = part as Sight; fov = Sight.baseFov / data.GetStats(WeaponPartStats.Zoom, 1f); }
public override void SetPart(WeaponPart part) { base.SetPart(part); data = part as Mag; magSize = data.GetStatsI(WeaponPartStats.MagSize, 1); reloadTime = data.GetStats(WeaponPartStats.ReloadTime, 1f); }
public void AddWeaponAtIdx(WeaponPart weapon, int idx) { if (weapon.Schematic.Tier <= Schematic.WeaponTierRestrictions[idx]) { weapon.EquipIdx = idx; weapons[idx] = weapon; } }
/** * Set a part of the weapon */ public void SetPart(WeaponPart part) { WeaponPartHolder holder = GetHolder(part.GetPartType()); holder.Part = part; UpdateLayout(); }
public void SetPart(WeaponPart newPart) { part = newPart; var partTransform = Instantiate(part.prefab, transform).GetComponent <Transform>(); partTransform.localPosition = Vector3.zero; partTransform.localRotation = Quaternion.identity; }
public void AddPart(WeaponPart weaponPart) { if (weaponPart != null) { weaponParts.Add(weaponPart); weaponParts = weaponParts.OrderBy(p => p.stortCode).ToList(); } }
public WeaponPart RemovePart(WeaponPart weaponPart) { var part = weaponParts.Single(p => p.stortCode == weaponPart.stortCode); if (part != null) { weaponParts.Remove(part); } return(part); }
public void AddPart(WeaponPart item, Position sideToPlace) { if (sideToPlace == Position.FRONT ){ frontWeaponList.Add (item.GetName(),item); } if (sideToPlace == Position.REAR ){ frontWeaponList.Add (item.GetName(),item); } if (sideToPlace == Position.MIDDLE ){ middleWeaponList.Add (item.GetName(),item); } }
public void ShowPanel(WeaponPart part) { if (part == null) { Hide(); return; } RectTransform rt = GetComponent <RectTransform>(); rt.pivot = new Vector2(Input.mousePosition.x <= Screen.width / 2f ? 0 : 1, Input.mousePosition.y <= Screen.height / 2f ? 0 : 1); transform.position = Input.mousePosition; for (int i = 0; i < statsPanel.childCount; i++) { Destroy(statsPanel.GetChild(i).gameObject); } partName.text = part.name; partName.color = part.quality.color; partLevel.text = "LEVEL REQUIREMENT: " + part.level; partCost.text = "$" + part.price; partIcon.sprite = part.icon; foreach (var stat in part.stats) { switch (stat.statsType) { case StatsType.Base: AddStat(stat, part.GetStats(stat.stats)); break; case StatsType.Additive: AddStat(stat, part.GetStats(stat.stats)); break; case StatsType.Modifier: AddModifier(stat, part.GetStats(stat.stats)); break; default: break; } } }
public void Init(WeaponPart _part) { if (_part == null) { nameText.gameObject.SetActive(false); reloadFill.gameObject.SetActive(false); } else { part = _part; nameText.text = part.Schematic.Name; initialized = true; } }
/** * Regenerate each parts of the current Weapon */ void RandomizeWeapon() { Weapon weapon = Utility.GetWeapon(); for (int i = 1; i <= WeaponPart.GetPartTypeCount(); i++) { PartType partType = (PartType)i; WeaponPart part = GameController.Instance.GenerateRandomWeaponPart( partType ); weapon.SetPart(part); } }
void FindParts(ref List <WeaponPart> parts, WeaponPart part) { if (part == null) { return; } parts.Add(part); for (int i = 0; i < part.slots.Length; i++) { FindParts(ref parts, part.slots[i].part); } }
public void AddPart(WeaponPart item, Position sideToPlace) { if (sideToPlace == Position.FRONT) { frontWeaponList.Add(item.GetName(), item); } if (sideToPlace == Position.REAR) { frontWeaponList.Add(item.GetName(), item); } if (sideToPlace == Position.MIDDLE) { middleWeaponList.Add(item.GetName(), item); } }
public override void SetObject(object o) { if (o == null || !(o is WeaponPart)) { partName.text = "Empty"; partIcon.sprite = null; } else { WeaponPart part = o as WeaponPart; partName.text = part.name; partIcon.sprite = part.icon; } }
void EditPart() { WeaponPart selected = partList.selected; if (selected == null) { return; } EditorGUILayout.BeginHorizontal(); EditorGUILayout.ObjectField("Sprite", selected.icon, typeof(Sprite), allowSceneObjects: true); EditorGUILayout.BeginVertical(); GUILayout.Label("Edit part"); GUILayout.Label("Short code: " + selected.stortCode); selected.name = EditorGUILayout.TextField("Part name", selected.name); GUILayout.Label("Part type: " + selected.partType.ToString()); //selected.partType = (WeaponPartType)EditorGUILayout.EnumPopup("Type", selected.partType); GameObject newPrefab = (GameObject)EditorGUILayout.ObjectField("Prefab", selected.prefab, typeof(GameObject), false); if (selected.prefab != newPrefab) { //AssetDatabase.StartAssetEditing(); selected.prefab = newPrefab; selected.icon = GetPrefabIcon(newPrefab); //AssetDatabase.StopAssetEditing(); EditorUtility.SetDirty(selected); } if (GUILayout.Button("Update icon")) { //AssetDatabase.StartAssetEditing(); selected.icon = GetPrefabIcon(selected.prefab, true); //AssetDatabase.StopAssetEditing(); EditorUtility.SetDirty(selected); } if (GUILayout.Button("Delete part")) { AssetDatabase.DeleteAsset("Assets/Resources/WeaponParts/" + selected.stortCode + ".asset"); partList.Repaint(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); }
void GenerateWeapon() { GameObject randomBody = GetRandomPart(bodyParts); GameObject insBody = Instantiate(randomBody, Vector3.zero, Quaternion.identity); WeaponBody wpnBody = insBody.GetComponent <WeaponBody>(); WeaponPart barrel = SpawnWeaponPart(barrelParts, wpnBody.barrelSocket); WeaponPart scope = SpawnWeaponPart(scopeParts, wpnBody.scopeSocket); WeaponPart magazine = SpawnWeaponPart(magazineParts, wpnBody.magazineSocket); WeaponPart grip = SpawnWeaponPart(gripParts, wpnBody.gripSocket); WeaponPart stock = SpawnWeaponPart(stockParts, wpnBody.stockSocket); wpnBody.Initialize((WeaponBarrelPart)barrel, scope, stock, grip, magazine); prevWeapon = insBody; }
void Start() { Assert.IsNotNull(visor); Assert.IsNotNull(muzzle); partHolders = gameObject.GetComponentsInChildren <WeaponPartHolder>(); Assert.IsNotNull(partHolders); Assert.IsTrue(partHolders.Length == WeaponPart.GetPartTypeCount()); barrelHolder = GetHolder(PartType.BARREL); stockHolder = GetHolder(PartType.STOCK); sightHolder = GetHolder(PartType.SIGHT); stringHolder = GetHolder(PartType.STRING); handleHolder = GetHolder(PartType.HANDLE); quiverHolder = GetHolder(PartType.QUIVER); Assert.IsTrue(shootSFX != ""); Assert.IsTrue(emptySFX != ""); Assert.IsTrue(reloadSFX != ""); Assert.IsNotNull(barrelHolder); Assert.IsNotNull(stockHolder); Assert.IsNotNull(sightHolder); Assert.IsNotNull(stringHolder); Assert.IsNotNull(handleHolder); Assert.IsNotNull(quiverHolder); MagazineClip = GetMagazineSize(); playerCamera = Camera.main; flippedScale = new Vector3( defaultScale.x, defaultScale.y * -1, defaultScale.z ); transform.rotation = Quaternion.Euler( 0.0f, 0.0f, 0.0f ); UpdateLayout(); }
public WeaponPart GenerateRandomWeaponPart( PartType forcePart = PartType.NONE ) { WeaponPart part = ScriptableObject.CreateInstance <WeaponPart>(); PartType partType = forcePart; if (partType == PartType.NONE) { partType = (PartType)(UnityEngine.Random.Range( 0, WeaponPart.GetPartTypeCount() ) + 1); } switch (partType) { case PartType.QUIVER: part.RandomizeQuiver(); break; case PartType.BARREL: part.RandomizeBarrel(); break; case PartType.STOCK: part.RandomizeStock(); break; case PartType.HANDLE: part.RandomizeHandle(); break; case PartType.SIGHT: part.RandomizeSight(); break; case PartType.STRING: part.RandomizeString(); break; } return(part); }
public void Initialize(WeaponBarrelPart barrel, WeaponPart scope, WeaponPart stock, WeaponPart handle, WeaponPart magazine) { weaponParts.Add(this); muzzle = barrel.muzzle; muzzleFX = barrel.muzzleFX; weaponParts.Add(barrel); weaponParts.Add(scope); weaponParts.Add(stock); weaponParts.Add(handle); weaponParts.Add(magazine); CalculateStats(); DetermineRarity(); UpdateWeaponCard(); weapon.Initialize(weaponStats, this); }
void SavePart(ref WeaponPartData wpd, WeaponPart part) { if (part == null) { wpd.partShortCode = ""; return; } wpd.partShortCode = part.stortCode; wpd.level = part.level; wpd.quality = part.quality.index; wpd.dataParts = new WeaponPartData[part.slots.Length]; for (int i = 0; i < part.slots.Length; i++) { wpd.dataParts[i] = new WeaponPartData(); SavePart(ref wpd.dataParts[i], part.slots[i].part); } }
public void Init(TankSchematic tankSchematic) { tankGOConstructor.Init(tankSchematic); Hull = new HullPart(tankSchematic.HullSchematic, this); int count = 0; int validCount = 0; foreach (WeaponPartSchematic weaponSchematic in tankSchematic.WeaponSchematics) { if (weaponSchematic != null) { RectTransform rect = tankGOConstructor.weaponGOs[validCount].GetComponent <RectTransform>(); Vector2 dir = tankSchematic.HullSchematic.OrigWeaponDirs[count]; Vector2 weaponFireOffset = dir.normalized * rect.sizeDelta.y; // Then create weapon representation and add to hull WeaponPart part = new WeaponPart(weaponSchematic, weaponFireOffset, this); Hull.AddWeaponAtIdx(part, count); validCount += 1; } count += 1; } boxCollider.size = tankSchematic.HullSchematic.Size; float totalWeight = calculateTotalWeight() / 10f; this.body.mass = totalWeight; this.body.angularDrag = Hull.Schematic.AngularDrag; MaxArmour = calculateTotalArmour(); ResetState(); DisableMovement = false; initialized = true; }
public void SetFrontPart( string name) { currentFrontPart = middleWeaponList [name]; }
public void SetRearPart( string name) { currentRearPart = middleWeaponList [name]; }
private void LoadWeaponPartsFromXML() { XmlDocument xmlDoc = new XmlDocument (); xmlDoc.Load ("Assets/Data/WeaponParts.xml"); XmlNodeList weaponList = xmlDoc.GetElementsByTagName ("weapon"); foreach (XmlNode weapon in weaponList) { XmlNodeList weaponParams = weapon.ChildNodes; WeaponPart newPart = new WeaponPart(); foreach (XmlNode param in weaponParams){ if (param.Name == "name"){newPart.SetName (param.InnerText);} if (param.Name == "distance") { newPart.SetDistance (float.Parse (param.InnerText));} if (param.Name == "damage") { newPart.SetDamage (float.Parse (param.InnerText));} if (param.Name == "area") { newPart.SetAreaDamage (bool.Parse (param.InnerText));} if (param.Name == "side") { newPart.SetPosition (param.InnerText);} if (param.Name == "speed"){ newPart.SetSpeed (float.Parse (param.InnerText));} } allPosibleParts.Add (newPart.GetName (), newPart); } }
//在Body不为Null时有效 public bool Attach(WeaponPart part, WeaponComponent component) { if (!HasComponent(component)) return false; bool isAttached = part.JointTo(component); if (isAttached) { AddWeaponComponent(part); } return isAttached; }