Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    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);
        }
    }
Ejemplo n.º 4
0
 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);
    }
Ejemplo n.º 6
0
    // 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);
    }
Ejemplo n.º 8
0
    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;
            }
        }
    }
Ejemplo n.º 9
0
    /// <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);
    }
Ejemplo n.º 10
0
    public override void SetPart(WeaponPart part)
    {
        base.SetPart(part);

        data = part as Body;

        fireRate = data.GetStats(WeaponPartStats.FireRate, 60f);
    }
Ejemplo n.º 11
0
    public override void SetPart(WeaponPart part)
    {
        base.SetPart(part);

        data = part as Sight;

        fov = Sight.baseFov / data.GetStats(WeaponPartStats.Zoom, 1f);
    }
Ejemplo n.º 12
0
    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);
    }
Ejemplo n.º 13
0
 public void AddWeaponAtIdx(WeaponPart weapon, int idx)
 {
     if (weapon.Schematic.Tier <= Schematic.WeaponTierRestrictions[idx])
     {
         weapon.EquipIdx = idx;
         weapons[idx]    = weapon;
     }
 }
Ejemplo n.º 14
0
    /**
     * Set a part of the weapon
     */
    public void SetPart(WeaponPart part)
    {
        WeaponPartHolder holder = GetHolder(part.GetPartType());

        holder.Part = part;

        UpdateLayout();
    }
Ejemplo n.º 15
0
    public void SetPart(WeaponPart newPart)
    {
        part = newPart;

        var partTransform = Instantiate(part.prefab, transform).GetComponent <Transform>();

        partTransform.localPosition = Vector3.zero;
        partTransform.localRotation = Quaternion.identity;
    }
Ejemplo n.º 16
0
    public void AddPart(WeaponPart weaponPart)
    {
        if (weaponPart != null)
        {
            weaponParts.Add(weaponPart);

            weaponParts = weaponParts.OrderBy(p => p.stortCode).ToList();
        }
    }
Ejemplo n.º 17
0
    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);
     }
 }
Ejemplo n.º 19
0
    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;
            }
        }
    }
Ejemplo n.º 20
0
 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;
     }
 }
Ejemplo n.º 21
0
    /**
     * 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);
        }
    }
Ejemplo n.º 22
0
    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);
        }
    }
Ejemplo n.º 23
0
 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);
     }
 }
Ejemplo n.º 24
0
    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;
        }
    }
Ejemplo n.º 25
0
    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;
    }
Ejemplo n.º 27
0
    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();
    }
Ejemplo n.º 28
0
    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);
    }
Ejemplo n.º 29
0
    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);
    }
Ejemplo n.º 30
0
    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);
        }
    }
Ejemplo n.º 31
0
    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);
        }
    }
Ejemplo n.º 35
0
	//在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;
	}