void Start()
    {
        This_Transform  = transform;
        MainBody_Script = GetComponentInParent <MainBody_Setting_CS> ();
        switch (Type)
        {
        case 0:          // Static.
            Initial_Settings();
            Parent_Flag = false;
            break;

        case 1:          // Anchor.
            Initial_Settings();
            Find_Anchor();
            Parent_Flag = false;
            break;

        case 2:          // Dynamic.
            Initial_Settings();
            Parent_Flag = false;
            break;

        case 9:          // Parent.
            Parent_Settings();
            Parent_Flag = true;
            break;
        }
    }
示例#2
0
    void Follow_Target_Settings()
    {
        // Find the "MainBody" of Follow_Target.
        MainBody_Setting_CS MainBody_Script = Follow_Target.GetComponentInChildren <MainBody_Setting_CS> ();

        if (MainBody_Script)
        {
            Follow_MainBody = MainBody_Script.transform;
        }
    }
    void Complete_Turret()
    { // Called from 'Turret_Finishing" when the sorting is finished.
        This_Transform           = transform;
        Turret_Horizontal_Script = GetComponentInParent <Turret_Horizontal_CS>();
        MainBody_Setting_CS Temp_Script = GetComponentInParent <MainBody_Setting_CS>();

        if (Temp_Script)
        {
            MainBody_Rigidbody = Temp_Script.GetComponent <Rigidbody>();
        }
    }
    void Store_Components(Transform Temp_Transform)          // Store MainBody's transform and sctipt ,and AI scripts.
    {
        MainBody_Setting_CS Temp_MainBodyScript = Temp_Transform.GetComponentInChildren <MainBody_Setting_CS> ();

        if (Temp_MainBodyScript)
        {
            if (Temp_Transform.root.tag == "Player")                      // Friendly tank.
            {
                for (int i = 0; i < Friendly_Body_Transforms.Length; i++) // Search empty.
                {
                    if (Friendly_Body_Transforms [i] == null)
                    {
                        // Store components.
                        Friendly_Body_Transforms [i] = Temp_MainBodyScript.transform;
                        Friendly_Body_Scripts [i]    = Temp_MainBodyScript;
                        AI_CS Temp_AI_Script = Friendly_Body_Transforms [i].GetComponentInChildren <AI_CS> ();
                        if (Temp_AI_Script)
                        {
                            Friendly_AI_Scripts [i] = Temp_AI_Script;
                        }
                        break;
                    }
                }
            }
            else if (Temp_Transform.root.tag != "Finish")                   // Hostile tank.
            {
                for (int i = 0; i < Hostile_Body_Transforms.Length; i++)    // Search empty.
                {
                    if (Hostile_Body_Transforms [i] == null)
                    {
                        // Store components.
                        Hostile_Body_Transforms [i] = Temp_MainBodyScript.transform;
                        Hostile_Body_Scripts [i]    = Temp_MainBodyScript;
                        AI_CS Temp_AI_Script = Hostile_Body_Transforms [i].GetComponentInChildren <AI_CS> ();
                        if (Temp_AI_Script)
                        {
                            Hostile_AI_Scripts [i] = Temp_AI_Script;
                        }
                        break;
                    }
                }
            }
        }
        else
        {
            Debug.LogWarning("'Game_Controller' cannot find the MainBody of '" + Temp_Transform.name + "'. (Physics Tank Maker)");
        }
    }
示例#5
0
 public void Set_Target(Transform Temp_Transform, MainBody_Setting_CS Temp_Script)           // Called from "Game_Controller".
 {
     if (No_Attack)
     {
         return;
     }
     if (Target_Transform != Temp_Transform)
     {
         Lost_Target();
         Target_Transform      = Temp_Transform;
         Target_Root_Transform = Target_Transform.root;
         if (Temp_Script)
         {
             AI_Upper_Offset = Temp_Script.AI_Upper_Offset;
             AI_Lower_Offset = Temp_Script.AI_Lower_Offset;
         }
     }
 }
示例#6
0
 public void Fire(Transform Temp_Target, int Temp_Num)
 {
     if (Flag == false)
     {
         Flag   = true;
         Number = Temp_Num;
         // Set target's position.
         MainBody_Setting_CS Temp_Script = Temp_Target.GetComponentInChildren <MainBody_Setting_CS>();
         if (Temp_Script)
         {
             Target_Pos = Temp_Script.transform.position;
         }
         else
         {
             Target_Pos = Temp_Target.position;
         }
     }
 }
示例#7
0
    public bool RayCast_Check(Transform Temp_Transform, MainBody_Setting_CS Temp_Script) // Called from Game_Controller.
    {
        This_Transform.localPosition = Initial_Position;                                 // Fix this position and rotation.
        Vector3    Temp_Pos = Temp_Transform.position + (Temp_Transform.up * Temp_Script.AI_Upper_Offset);
        Ray        Temp_Ray = new Ray(Eye_Transform.position, Temp_Pos - Eye_Transform.position);
        RaycastHit Temp_RaycastHit;

        if (Physics.Raycast(Temp_Ray, out Temp_RaycastHit, Visibility_Radius, Ray_LayerMask)) // Ray hits anything.
        {
            if (Temp_RaycastHit.transform.root == Temp_Transform.root)                        // Ray hits the target.
            {
                return(true);
            }
            else                 // Ray does not hit the target.
            {
                return(false);
            }
        }
        else             // Ray does not hit anything.
        {
            return(false);
        }
    }
示例#8
0
 void Start()
 {
     MainBody_Script = GetComponentInParent <MainBody_Setting_CS>();
 }
    void Assign_Target()
    {
        // Assign the target to friendly AI tanks.
        float               Min_Distance       = 10000.0f;
        Transform           Temp_Target        = null;
        MainBody_Setting_CS Temp_Target_Script = null;

        for (int i = 0; i < Friendly_Body_Transforms.Length; i++)
        {
            if (Friendly_AI_Scripts [i] && !Friendly_AI_Scripts [i].Fire_Flag)
            {
                for (int j = 0; j < Hostile_Body_Transforms.Length; j++)
                {
                    if (Hostile_Body_Transforms [j] && Hostile_Body_Transforms [j].root.tag != "Finish")
                    {
                        float Temp_Distance = Vector3.Distance(Friendly_Body_Transforms [i].position, Hostile_Body_Transforms [j].position);
                        if (Temp_Distance < Friendly_AI_Scripts [i].Visibility_Radius && Temp_Distance < Min_Distance)
                        {
                            if (Friendly_AI_Scripts [i].RayCast_Check(Hostile_Body_Transforms [j], Hostile_Body_Scripts [j]))
                            {
                                Min_Distance       = Temp_Distance;
                                Temp_Target        = Hostile_Body_Transforms [j];
                                Temp_Target_Script = Hostile_Body_Scripts [j];
                            }
                        }
                    }
                }
                if (Temp_Target)
                {
                    Friendly_AI_Scripts [i].Set_Target(Temp_Target, Temp_Target_Script);
                }
            }
        }
        // Assign the target to hostile AI tanks.
        Min_Distance       = 10000.0f;
        Temp_Target        = null;
        Temp_Target_Script = null;
        for (int i = 0; i < Hostile_Body_Transforms.Length; i++)
        {
            if (Hostile_AI_Scripts [i] && !Hostile_AI_Scripts [i].Fire_Flag)
            {
                for (int j = 0; j < Friendly_Body_Transforms.Length; j++)
                {
                    if (Friendly_Body_Transforms [j] && Friendly_Body_Transforms [j].root.tag != "Finish")
                    {
                        float Temp_Distance = Vector3.Distance(Hostile_Body_Transforms [i].position, Friendly_Body_Transforms [j].position);
                        if (Temp_Distance < Hostile_AI_Scripts [i].Visibility_Radius && Temp_Distance < Min_Distance)
                        {
                            if (Hostile_AI_Scripts [i].RayCast_Check(Friendly_Body_Transforms [j], Friendly_Body_Scripts [j]))
                            {
                                Min_Distance       = Temp_Distance;
                                Temp_Target        = Friendly_Body_Transforms [j];
                                Temp_Target_Script = Friendly_Body_Scripts [j];
                            }
                        }
                    }
                }
                if (Temp_Target)
                {
                    // Send message to "AI".
                    Hostile_AI_Scripts [i].Set_Target(Temp_Target, Temp_Target_Script);
                }
            }
        }
    }
示例#10
0
 void Start()
 {
     This_Transform  = transform;
     MainBody_Script = GetComponentInParent <MainBody_Setting_CS> ();
 }