Fandom

武装突袭 Wiki

Object Oriented scripting shell

简体 | 繁體

4,827个页面创建
于此维基上
添加新页面
评论0 Share

您使用了广告屏蔽软件!


Wikia通过广告运营为用户提供免费的服务。我们对用户通过嵌入广告屏蔽软件访问网站进行了使用调整。

如果您使用了广告屏蔽软件,将无法使用我们的服务。请您移除广告屏蔽软件,以确保页面正常加载。

Introduction 编辑

During the implementation phase of the Multiplayer Armory, it was decided to make a scripted system which uses as many Object Oriented (OO) techniques as possible (without altering the engine). This page will describe the scripted scripting shell which is used to this effect.


CfgOO 编辑

Classes, their attributes and methods are defined in configs:

  class CfgOO
  {
     //Name used in method prefix
     class SomeClass 
     {
        //All attributes for this class, which will be configured for
        //each instantiated object of this class
        class Attributes 
        {
           //Class name determines the name of the attribute in Logic variable space
           //Initialized with default value for this type
           class someAttribute
           {
              type = "SCALAR"; //Game variable type (see supported types below) (String)
              defaultValue = 0; //Default value [optional] (Any)
           };
        };
  
        //All methods for this class, which will be precompiled and stored in BIS_OO_<Class>_<Method>
        class Methods 
        {
           //Class name determines the name of the method
           class SomeMethod 
           {
              parameterTypes[] = {"STRING", "SCALAR"}; //Types of each parameter, used for validation (Array of String)
              returnType = "SCALAR"; //The default return value is based on this (String)
              script = "path\someMethod.sqf"; //Function implementing the method to precompile (String)
           };
        };
     };
  };


Functions 编辑

addClass 编辑

This function loads a class in the shell and it precompiles all of its methods. These methods are then stored in global variables with the following name: BIS_OO_<ClassName>_<methodName>.

  //Assuming the function was loaded into BIS_OO_addClass
  className:String call BIS_OO_addClass;


createObject 编辑

To instantiate an object of a loaded class, use this function. It will create a Logic object with all of the defined attributes as variables. This function will also automatically call the class' constructor. This constructor will already receive a reference to the created object as parameter, but additional parameters can be provided.

  //The function is automatically loaded into BIS_OO_createObject after adding the first class
  createdObject:Object = [className:String(, parameter1:Any)] call BIS_OO_createObject;


Supported types 编辑

These are the data types supported by the OO shell:

  • "SCALAR"
  • "STRING"
  • "BOOL"
  • "ARRAY"
  • "OBJECT"
  • "CONFIG"
  • "GROUP"
  • "TASK"


Sample 编辑

Config:

 class CfgOO
 {
   class MyClass 
   {
     class Attributes 
     {
       class myAttribute {type = "SCALAR";};
     };
     class Methods 
     {
       //Constructor method
       class MyClass 
       {
         parameterTypes[] = {"OBJECT"};
         script = "path\data\scripts\classes\MyClass\MyClass.sqf";
       };
       class myMethod 
       {
         parameterTypes[] = {"OBJECT", "SCALAR", "STRING"};
         returnType = "SCALAR";
         script = "path\data\scripts\classes\MyClass\myMethod.sqf";
       };
     };
   };
 };

Script:

 //Precompiles all methods into global variables
 //Naming convention: BIS_OO_<Class>_<method>
 //Here: BIS_OO_MyClass_MyClass and BIS_OO_MyClass_myMethod
 "MyClass" call (compile (preprocessFileLineNumbers "ca\modules_e\oo\data\scripts\functions\addClass.sqf"));
 
 //Creates a Logic with all attributes initialized
 //Invokes the constructor
 private ["_myClassObject"];
 _myClassObject = ["MyClass"] call BIS_OO_createObject;
 
 //Invoking a method and getting an attribute
 private ["_return", "_value"];
 _return = [player, 1, "Hello"] call BIS_OO_MyClass_myMethod;
 _value = _myClassObject getVariable "myAttribute";

更多维基

随机维基